2.3.0 Release Notes
===================

Channels 2.3.0 updates the ``AsgiHandler`` HTTP request body handling to use a
spooled temporary file, rather than reading the whole request body into memory.

This significantly reduces the maximum memory requirements when serving Django
views, and protects from DoS attacks, whilst still allowing large file
uploads — a combination that had previously been *difficult*.

Many thanks to Ivan Ergunov for his work on the improvements! 🎩

Backwards Incompatible Changes
------------------------------

As a result of the reworked body handling, ``AsgiRequest.__init__()`` is
adjusted to expecte a file-like ``stream``, rather than the whole ``body`` as
bytes.

Test cases instantiating requests directly will likely need to be updated to
wrap the provided ``body`` in, e.g., ``io.BytesIO``.

Next Up...
----------

We're looking to address a few issues around ``AsyncHttpConsumer``. Any
human-power available to help on that, truly appreciated. 🙂
