forked from django/channels
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG.txt
528 lines (292 loc) · 13.7 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
Full release notes, with more details and upgrade information, are available at:
https://channels.readthedocs.io/en/latest/releases
2.1.7 (2019-01-31)
------------------
* HTTP request body size limit is now enforced
* database_sync_to_async now closes old connections before it runs code
* Auth middleware closes old connections before it runs
2.1.6 (2018-12-08)
------------------
* HttpCommunicator now extracts query strings correctly
* AsyncHttpConsumer provides channel layer attributes
* Prevent late-Daphne import errors
2.1.5 (2018-10-22)
------------------
* Django middleware caching now works on Django 1.11 and Django 2.0.
The previous release only ran on 2.1.
2.1.4 (2018-10-19)
------------------
* Django middleware is now cached rather than instantiated per request
resulting in a sigificant speed improvement
* ChannelServerLiveTestCase now serves static files again
* Improved error message resulting from bad Origin headers
* runserver logging now goes through the Django logging framework
* Generic consumers can now have non-default channel layers
* Improved error when accessing scope['user'] before it's ready
2.1.3 (2018-08-16)
------------------
* An ALLOWED_ORIGINS value of "*" will now also allow requests without a Host
header at all (especially important for tests)
* The request.path value is now correct in cases when a server has SCRIPT_NAME
set
* Errors that happen inside channel listeners inside a runworker or Worker
class are now raised rather than suppressed
2.1.2 (2018-06-13)
------------------
* AsyncHttpConsumer now has a disconnect() method you can override
* Session and authentication middleware is now non-blocking.
* URL routing context now includes default arguments from the URLconf.
* The FORCE_SCRIPT_NAME setting is now respected in ASGI mode.
* ALLOWED_HOSTS is now set correctly during LiveServerTests.
2.1.1 (2018-04-18)
------------------
* The scope["user"] object is no longer a lazy object, as this conflicts with
any async-based consumers.
2.1.0 (2018-04-11)
------------------
* Async HTTP Consumers and WebSocket Consumers both gained new functionality
(groups, subprotocols, and an async HTTP variant)
* URLRouters now allow nesting
* Async login and logout functions for sessions
* Expiry and groups in the in-memory channel layer
* Improved Live Server test case
* More powerful OriginValidator
* Other small changes and fixes in the full release notes.
2.0.2 (2018-02-08)
------------------
* SyncConsumer now terminates old database connections, and there is a new
database_sync_to_async wrapper to allow async connections to do the same.
2.0.1 (2018-02-05)
------------------
* AsyncWebsocketConsumer and AsyncJsonWebsocketConsumer classes added
* OriginValidator and AllowedHostsOriginValidator ASGI middleware is now available
* URLRouter now correctly resolves long lists of URLs
2.0.0 (2018-02-01)
------------------
* Major backwards-incompatible rewrite to move to an asyncio base and remove
the requirement to transport data over the network, as well as overhauled
generic consumers, test helpers, routing and more.
1.1.6 (2017-06-28)
------------------
* The ``runserver`` ``server_cls`` override no longer fails with more modern
Django versions that pass an ``ipv6`` parameter.
1.1.5 (2017-06-16)
------------------
* The Daphne dependency requirement was bumped to 1.3.0.
1.1.4 (2017-06-15)
------------------
* Pending messages correctly handle retries in backlog situations
* Workers in threading mode now respond to ctrl-C and gracefully exit.
* ``request.meta['QUERY_STRING']`` is now correctly encoded at all times.
* Test client improvements
* ``ChannelServerLiveTestCase`` added, allows an equivalent of the Django
``LiveTestCase``.
* Decorator added to check ``Origin`` headers (``allowed_hosts_only``)
* New ``TEST_CONFIG`` setting in ``CHANNEL_LAYERS`` that allows varying of
the channel layer for tests (e.g. using a different Redis install)
1.1.3 (2017-04-05)
------------------
* ``enforce_ordering`` now works correctly with the new-style process-specific
channels
* ASGI channel layer versions are now explicitly checked for version compatability
1.1.2 (2017-04-01)
------------------
* Session name hash changed to SHA-1 to satisfy FIPS-140-2. Due to this,
please force all WebSockets to reconnect after the upgrade.
* `scheme` key in ASGI-HTTP messages now translates into `request.is_secure()`
correctly.
* WebsocketBridge now exposes the underlying WebSocket as `.socket`
1.1.1 (2017-03-19)
------------------
* Fixed JS packaging issue
1.1.0 (2017-03-18)
------------------
* Channels now includes a JavaScript wrapper that wraps reconnection and
multiplexing for you on the client side.
* Test classes have been moved from ``channels.tests`` to ``channels.test``.
* Bindings now support non-integer fields for primary keys on models.
* The ``enforce_ordering`` decorator no longer suffers a race condition where
it would drop messages under high load.
* ``runserver`` no longer errors if the ``staticfiles`` app is not enabled in Django.
1.0.3 (2017-02-01)
------------------
* Database connections are no longer force-closed after each test is run.
* Channel sessions are not re-saved if they're empty even if they're marked as
modified, allowing logout to work correctly.
* WebsocketDemultiplexer now correctly does sessions for the second/third/etc.
connect and disconnect handlers.
* Request reading timeouts now correctly return 408 rather than erroring out.
* The ``rundelay`` delay server now only polls the database once per second,
and this interval is configurable with the ``--sleep`` option.
1.0.2 (2017-01-12)
------------------
* Websockets can now be closed from anywhere using the new ``WebsocketCloseException``.
There is also a generic ``ChannelSocketException`` so you can do custom behaviours.
* Calling ``Channel.send`` or ``Group.send`` from outside a consumer context
(i.e. in tests or management commands) will once again send the message immediately.
* The base implementation of databinding now correctly only calls ``group_names(instance)``,
as documented.
1.0.1 (2017-01-09)
------------------
* WebSocket generic views now accept connections by default in their connect
handler for better backwards compatibility.
1.0.0 (2017-01-08)
------------------
* BREAKING CHANGE: WebSockets must now be explicitly accepted or denied.
See https://channels.readthedocs.io/en/latest/releases/1.0.0.html for more.
* BREAKING CHANGE: Demultiplexers have been overhauled to directly dispatch
messages rather than using channels to new consumers. Consult the docs on
generic consumers for more: https://channels.readthedocs.io/en/latest/generics.html
* BREAKING CHANGE: Databinding now operates from implicit group membership,
where your code just has to say what groups would be used and Channels will
work out if it's a creation, modification or removal from a client's
perspective, including with permissions.
* Delay protocol server ships with Channels providing a specification on how
to delay jobs until later and a reference implementation.
* Serializers can now specify fields as `__all__` to auto-include all fields.
* Various other small fixes.
0.17.3 (2016-10-12)
-------------------
* channel_session now also rehydrates the http session with an option
* request.META['PATH_INFO'] is now present
* runserver shows Daphne log messages
* runserver --nothreading only starts a single worker thread
* Databinding changed to call group_names dynamically and imply changed/created from that;
other small changes to databinding, and more changes likely.
0.17.2 (2016-08-04)
-------------------
* New CHANNELS_WS_PROTOCOLS setting if you want Daphne to accept certain
subprotocols
* WebsocketBindingWithMembers allows serialization of non-fields on instances
* Class-based consumers have an .as_route() method that lets you skip using
route_class
* Bindings now work if loaded after app ready state
0.17.1 (2016-07-22)
-------------------
* Bindings now require that `fields` is defined on the class body so all fields
are not sent by default. To restore old behaviour, set it to ['__all__']
* Bindings can now be declared after app.ready() has been called and still work.
* Binding payloads now include the model name as `appname.modelname`.
* A worker_ready signal now gets triggered when `runworker` starts consuming
messages. It does not fire from within `runserver`.
0.17.0 (2016-07-19)
-------------------
* Data Binding framework is added, which allows easy tying of model changes
to WebSockets (and other protocols) and vice-versa.
* Standardised WebSocket/JSON multiplexing introduced
* WebSocket generic consumers now have a 'close' argument on send/group_send
0.16.1 (2016-07-12)
-------------------
* WebsocketConsumer now has a http_user option for auto user sessions.
* consumer_started and consumer_finished signals are now available under
channels.signals.
* Database connections are closed whenever a consumer finishes.
0.16.0 (2016-07-06)
-------------------
* websocket.connect and websocket.receive are now consumed by a no-op consumer
by default if you don't specify anything to consume it, to bring Channels in
line with the ASGI rules on WebSocket backpressure.
* You no longer need to call super's setUp in ChannelTestCase.
0.15.1 (2016-06-29)
-------------------
* Class based consumers now have a self.kwargs
* Fixed bug where empty streaming responses did not send headers or status code
0.15.0 (2016-06-22)
-------------------
* Query strings are now decoded entirely by Django. Must be used with Daphne
0.13 or higher.
0.14.3 (2016-06-21)
-------------------
* + signs in query strings are no longer double-decoded
* Message now has .values(), .keys() and .items() to match dict
0.14.2 (2016-06-16)
-------------------
* Class based consumers now have built-in channel_session and
channel_session_user support
0.14.1 (2016-06-09)
-------------------
* Fix unicode issues with test client under Python 2.7
0.14.0 (2016-05-25)
-------------------
* Class-based consumer pattern and WebSocket consumer now come with Channels
(see docs for more details)
* Better testing utilities including a higher-level Client abstraction with
optional HTTP/WebSocket HttpClient variant.
0.13.1 (2016-05-13)
-------------------
* enforce_ordering now queues future messages in a channel rather than
spinlocking worker processes to achieve delays.
* ConsumeLater no longer duplicates messages when they're requeued below the
limit.
0.13.0 (2016-05-07)
-------------------
* Backpressure is now implemented, meaning responses will pause sending if
the client does not read them fast enough.
* DatabaseChannelLayer has been removed; it was not sensible.
0.12.0 (2016-04-26)
-------------------
* HTTP paths and query strings are now expected to be sent over ASGI as
unescaped unicode. Daphne 0.11.0 is updated to send things in this format.
* request.FILES reading bug fixed
0.11.0 (2016-04-05)
-------------------
* ChannelTestCase base testing class for easier testing of consumers
* Routing rewrite to improve speed with nested includes and remove need for ^ operator
* Timeouts reading very slow request bodies
0.10.3 (2016-03-29)
-------------------
* Better error messages for wrongly-constructed routing lists
* Error when trying to use signed cookie backend with channel_session
* ASGI group_expiry implemented on database channel backend
0.10.2 (2016-03-23)
-------------------
* Regular expressions for routing include() can now be Unicode under Python 3
* Last-resort error handling for HTTP request exceptions inside Django's core
code. If DEBUG is on, shows plain text tracebacks; if it is off, shows
"Internal Server Error".
0.10.1 (2016-03-22)
-------------------
* Regular expressions for HTTP paths can now be Unicode under Python 3
* route() and include() now importable directly from `channels`
* FileResponse send speed improved for all code (previously just for staticfiles)
0.10.0 (2016-03-21)
-------------------
* New routing system
* Updated to match new ASGI single-reader-channel name spec
* Updated to match new ASGI HTTP header encoding spec
0.9.5 (2016-03-10)
------------------
* `runworker` now has an --alias option to specify a different channel layer
* `runserver` correctly falls back to WSGI mode if no channel layers configured
0.9.4 (2016-03-08)
------------------
* Worker processes now exit gracefully (finish their current processing) when
sent SIGTERM or SIGINT.
* `runserver` now has a shorter than standard HTTP timeout configured
of 60 seconds.
0.9.3 (2016-02-28)
------------------
* Static file serving is significantly faster thanks to larger chunk size
* `runworker` now refuses to start if an in memory layer is configured
0.9.2 (2016-02-28)
------------------
* ASGI spec updated to include `order` field for WebSocket messages
* `enforce_ordering` decorator introduced
* DatabaseChannelLayer now uses transactions to stop duplicated messages
0.9.1 (2016-02-21)
------------------
* Fix packaging issues with previous release
0.9 (2016-02-21)
----------------
* Staticfiles support in runserver
* Runserver logs requests and WebSocket connections to console
* Runserver autoreloads correctly
* --noasgi option on runserver to use the old WSGI-based server
* --noworker option on runserver to make it not launch worker threads
* Streaming responses work correctly
* Authentication decorators work again with new ASGI spec
* channel_session_user_from_http decorator introduced
* HTTP Long Poll support (raise ResponseLater)
* Handle non-latin1 request body encoding
* ASGI conformance tests for built-in database backend
* Moved some imports around for more sensible layout