Releases: aio-libs/aiohttp
3.8.5
Security bugfixes
-
Upgraded the vendored copy of llhttp_ to v8.1.1 -- by :user:
webknjaz
and :user:Dreamsorcerer
.Thanks to :user:
sethmlarson
for reporting this and providing us with
comprehensive reproducer, workarounds and fixing details! For more
information, see
GHSA-45c4-8wx5-qw6w... _llhttp: https://llhttp.org
(#7346)
Features
-
Added information to C parser exceptions to show which character caused the error. -- by :user:
Dreamsorcerer
(#7366)
Bugfixes
-
Fixed a transport is :data:
None
error -- by :user:Dreamsorcerer
.(#3355)
3.8.4
3.8.3
.. attention::
This is the last :doc:aiohttp <index>
release tested under
Python 3.6. The 3.9 stream is dropping it from the CI and the
distribution package metadata.
Bugfixes
-
Increased the upper boundary of the :doc:
multidict:index
dependency
to allow for the version 6 -- by :user:hugovk
.It used to be limited below version 7 in :doc:
aiohttp <index>
v3.8.1 but
was lowered in v3.8.2 via :pr:6550
and never brought back, causing
problems with dependency pins when upgrading. :doc:aiohttp <index>
v3.8.3
fixes that by recovering the original boundary of< 7
.
(#6950)
3.8.2 (2022-09-20, subsequently yanked on 2022-09-21)
.. note::
This release has some compatibility fixes for Python 3.11 but it may
still have some quirks. Some tests are still flaky in the CI.
.. caution::
This release has been yanked from PyPI. Modern pip will not pick it
up automatically. The reason is that is has multidict < 6
set in
the distribution package metadata (see :pr:6950
). Please, use
aiohttp ~= 3.8.3, != 3.8.1
instead, if you can.
Bugfixes
-
Added support for registering :rfc:
OPTIONS <9110#OPTIONS>
HTTP method handlers via :py:class:~aiohttp.web.RouteTableDef
.
(#4663) -
Started supporting :rfc:
authority-form <9112#authority-form>
and
:rfc:absolute-form <9112#absolute-form>
URLs on the server-side.
(#6227) -
Fixed Python 3.11 incompatibilities by using Cython 0.29.25.
(#6396) -
Extended the
sock
argument typing declaration of the
:py:func:~aiohttp.web.run_app
function as optionally
accepting iterables.
(#6401) -
Fixed a regression where :py:exc:
~asyncio.CancelledError
occurs on client disconnection.
(#6719) -
Started exporting :py:class:
~aiohttp.web.PrefixedSubAppResource
under :py:mod:aiohttp.web
-- by :user:Dreamsorcerer
.This fixes a regression introduced by :pr:
3469
.
(#6889) -
Dropped the :class:
object
type possibility from
the :py:attr:aiohttp.ClientSession.timeout
property return type declaration.
(#6917),
(#6923)
Improved Documentation
- Added clarification on configuring the app object with
settings such as a database connection.
(#4137) - Extended the
sock
argument typing declaration of the
:py:func:~aiohttp.web.run_app
function as optionally
accepting iterables.
(#6401) - Dropped the :class:
object
type possibility from
the :py:attr:aiohttp.ClientSession.timeout
property return type declaration.
(#6917),
(#6923)
Deprecations and Removals
- Dropped Python 3.5 support, :doc:
aiohttp <index>
only works
under Python 3.6 and higher from now on.
(#4046)
Misc
- Removed a deprecated usage of :py:func:
pytest.warns(None) <pytest.warns>
in tests.
(#6663) - (#6369), (#6399), (#6550), (#6708), (#6757), (#6857), (#6872).
3.8.2
.. note::
This release has some compatibility fixes for Python 3.11 but it may
still have some quirks. Some tests are still flaky in the CI.
.. attention::
This is the last :doc:aiohttp <index>
release tested under
Python 3.6. The 3.9 stream is dropping it from the CI and the
distribution package metadata.
Bugfixes
-
Added support for registering :rfc:
OPTIONS <9110#OPTIONS>
HTTP method handlers via :py:class:~aiohttp.web.RouteTableDef
.
(#4663) -
Started supporting :rfc:
authority-form <9112#authority-form>
and
:rfc:absolute-form <9112#absolute-form>
URLs on the server-side.
(#6227) -
Fixed Python 3.11 incompatibilities by using Cython 0.29.25.
(#6396) -
Extended the
sock
argument typing declaration of the
:py:func:~aiohttp.web.run_app
function as optionally
accepting iterables.
(#6401) -
Fixed a regression where :py:exc:
~asyncio.CancelledError
occurs on client disconnection.
(#6719) -
Started exporting :py:class:
~aiohttp.web.PrefixedSubAppResource
under :py:mod:aiohttp.web
-- by :user:Dreamsorcerer
.This fixes a regression introduced by :pr:
3469
.
(#6889) -
Dropped the :class:
object
type possibility from
the :py:attr:aiohttp.ClientSession.timeout
property return type declaration.
(#6917),
(#6923)
Improved Documentation
- Added clarification on configuring the app object with
settings such as a database connection.
(#4137) - Extended the
sock
argument typing declaration of the
:py:func:~aiohttp.web.run_app
function as optionally
accepting iterables.
(#6401) - Dropped the :class:
object
type possibility from
the :py:attr:aiohttp.ClientSession.timeout
property return type declaration.
(#6917),
(#6923)
Deprecations and Removals
- Dropped Python 3.5 support, :doc:
aiohttp <index>
only works
under Python 3.6 and higher from now on.
(#4046)
Misc
- Removed a deprecated usage of :py:func:
pytest.warns(None) <pytest.warns>
in tests.
(#6663) - (#6369), (#6399), (#6550), (#6708), (#6757), (#6857), (#6872).
v3.8.1
Bugfixes
- Fix the error in handling the return value of
getaddrinfo
.
getaddrinfo
will return an(int, bytes)
tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
--disable-ipv6
option but his system enable the ipv6.
(#5901) - Do not install "examples" as a top-level package.
(#6189) - Restored ability to connect IPv6-only host.
(#6195) - Remove
Signal
from__all__
, replaceaiohttp.Signal
withaiosignal.Signal
in docs
(#6201) - Made chunked encoding HTTP header check stricter.
(#6305)
Improved Documentation
- update quick starter demo codes.
(#6240) - Added an explanation of how tiny timeouts affect performance to the client reference document.
(#6274) - Add flake8-docstrings to flake8 configuration, enable subset of checks.
(#6276) - Added information on running complex applications with additional tasks/processes -- :user:
Dreamsorcerer
.
(#6278)
Misc
- (#6205)
v3.8.0b0
Features
-
Added a
GunicornWebWorker
feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to returnweb.AppRunner
object.
(#2988)_ -
Switch from
http-parser
tollhttp
(#3561)_ -
Use Brotli instead of brotlipy
(#3803)_ -
Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp
cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly
disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python
mode is significantly slower than compiled one.
(#3828)_ -
Make access log use local time with timezone
(#3853)_ -
Implemented
readuntil
inStreamResponse
(#4054)_ -
FileResponse now supports ETag.
(#4594)_ -
Add a request handler type alias
aiohttp.typedefs.Handler
.
(#4686)_ -
AioHTTPTestCase
is more async friendly now.For people who use unittest and are used to use :py:exc:
~unittest.TestCase
it will be easier to write new test cases like the sync version of the :py:exc:~unittest.TestCase
class,
without using the decorator@unittest_run_loop
, justasync def test_*
.
The only difference is that for the people using python3.7 and below a new dependency is needed, it isasynctestcase
.
(#4700)_ -
Add validation of HTTP header keys and values to prevent header injection.
(#4818)_ -
Add predicate to
AbstractCookieJar.clear
.
AddAbstractCookieJar.clear_domain
to clean all domain and subdomains cookies only.
(#4942)_ -
Add keepalive_timeout parameter to web.run_app.
(#5094)_ -
Tracing for client sent headers
(#5105)_ -
Make type hints for http parser stricter
(#5267)_ -
Add final declarations for constants.
(#5275)_ -
Switch to external frozenlist and aiosignal libraries.
(#5293)_ -
Don't send secure cookies by insecure transports.
By default, the transport is secure if https or wss scheme is used.
UseCookieJar(treat_as_secure_origin="http://127.0.0.1")
to override the default security checker.
(#5571)_ -
Always create a new event loop in
aiohttp.web.run_app()
.
This adds better compatibility withasyncio.run()
or if trying to run multiple apps in sequence.
(#5572)_ -
Add
aiohttp.pytest_plugin.AiohttpClient
for static typing of pytest plugin.
(#5585)_ -
Added a
socket_factory
argument toBaseTestServer
.
(#5844)_ -
Add compression strategy parameter to enable_compression method.
(#5909)_ -
Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:
Hanaasagi
.
(#5927)_ -
Switched
chardet
tocharset-normalizer
for guessing the HTTP payload body encoding -- :user:Ousret
.
(#5930)_ -
Added optional auto_decompress argument for HttpRequestParser
(#5957)_ -
Added support for HTTPS proxies to the extent CPython's
:py:mod:asyncio
supports it -- by :user:bmbouter
,
:user:jborean93
and :user:webknjaz
.
(#5992)_ -
Added
base_url
parameter to the initializer of :class:~aiohttp.ClientSession
.
(#6013)_ -
Add Trove classifier and create binary wheels for 3.10. -- :user:
hugovk
.
(#6079)_ -
Started shipping platform-specific wheels with the
musl
tag targeting typical Alpine Linux runtimes — :user:asvetlov
.
(#6139)_ -
Started shipping platform-specific arm64 wheels for Apple Silicon — :user:
asvetlov
.
(#6139)_
Bugfixes
- Modify drain_helper() to handle concurrent
await resp.write(...)
orws.send_json(...)
calls without race-condition.
(#2934) - Started using
MultiLoopChildWatcher
when it's available under POSIX while setting up the test I/O loop.
(#3450)_ - Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
(#4012)_ - Fixed HTTP client requests to honor
no_proxy
environment variables.
(#4431)_ - Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
(#4748)_ - Ensure a cleanup context is cleaned up even when an exception occurs during startup.
(#4799)_ - Added a new exception type for Unix socket client errors which provides a more useful error message.
(#4984)_ - Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
(#5106)_ - Only depend on typing_extensions for Python <3.8
(#5107)_ - Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
(#5192)_ - Fix cookies disappearing from HTTPExceptions.
(#5233)_ - StaticResource prefixes no longer match URLs with a non-folder prefix. For example
routes.static('/foo', '/foo')
no longer matches the URL/foobar
. Previously, this would attempt to load the file/foo/ar
.
(#5250)_ - Acquire the connection before running traces to prevent race condition.
(#5259)_ - Add missing slots to ```_RequestContextManager
and
WSRequestContextManager``
(#5329) - Ensure sending a zero byte file does not throw an exception (round 2)
(#5380)_ - Set "text/plain" when data is an empty string in client requests.
(#5392)_ - Stop automatically releasing the
ClientResponse
object on calls to theok
property for the failed requests.
(#5403)_ - Include query parameters from
params
keyword argument in tracingURL
.
(#5432)_ - Fix annotations
(#5466)_ - Fixed the multipart POST requests processing to always release file
descriptors for thetempfile.Temporaryfile
-created
_io.BufferedRandom
instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:webknjaz
.
(#5494)_ - Fix 0 being incorrectly treated as an immediate timeout.
(#5527)_ - Replace deprecated app handler design in
tests/autobahn/server.py
with call toweb.run_app
; replace deprecatedaiohttp.ws_connect
calls intests/autobahn/client.py
withaiohttp.ClienSession.ws_connect
.
(#5606)_ - Fixed test for
HTTPUnauthorized
that access thetext
argument. This is not used in any part of the code, so it's removed now.
(#5657)_ - Remove incorrect default from docs
(#5727)_ - Remove external test dependency to http://httpbin.org
(#5840)_ - Don't cancel current task when entering a cancelled timer.
(#5853)_ - Added
params
keyword argument toClientSession.ws_connect
. -- :user:hoh
.
(#5868)_ - Uses :py:class:
~asyncio.ThreadedChildWatcher
under POSIX to allow setting up test loop in non-main thread.
(#5877)_ - Fix the error in handling the return value of
getaddrinfo
.
getaddrinfo
will return an(int, bytes)
tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
--disable-ipv6
option but his system enable the ipv6.
(#5901)_ - Removed the deprecated
loop
argument from theasyncio.sleep
/gather
calls
(#5905)_ - Return
None
fromrequest.if_modified_since
,request.if_unmodified_since
,request.if_range
andresponse.last_modified
when corresponding http date headers are invalid.
(#5925)_ - Fix resetting
SIGCHLD
signals in Gunicorn aiohttp Worker to fixsubprocesses
that capture output having an incorrectreturncode
.
(#6130)_ - Raise
400: Content-Length can't be present with Transfer-Encoding
if bothContent-Length
andTransfer-Encoding
are sent by peer by both C and Python implementations
(#6182)_
Improved Documentation
- Refactored OpenAPI/Swagger aiohttp addons, added
aio-openapi
(#5326)_ - Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
(#5725)_ - Documented that the HTTP client
Authorization
header is removed
on redirects to a different host or protocol.
(#5850)_
Misc
- (#3927), (#4247), (#4247), (#5389), (#5457), (#5486), (#5494), (#5515), (#5625), (#5635), (#5648), (#5657), (#5890), (#5914), (#5932), (#6002), (#6045), (#6131), (#6156), (#6165), (#6166)_
3.7.4.post0 (2021-03-06)
Misc
- Bumped upper bound of the
chardet
runtime dependency
to allow their v4.0 version stream.
(#5366)_
v3.8.0
Features
-
Added a
GunicornWebWorker
feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to returnweb.AppRunner
object.
(#2988)_ -
Switch from
http-parser
tollhttp
(#3561)_ -
Use Brotli instead of brotlipy
(#3803)_ -
Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp
cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly
disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python
mode is significantly slower than compiled one.
(#3828)_ -
Make access log use local time with timezone
(#3853)_ -
Implemented
readuntil
inStreamResponse
(#4054)_ -
FileResponse now supports ETag.
(#4594)_ -
Add a request handler type alias
aiohttp.typedefs.Handler
.
(#4686)_ -
AioHTTPTestCase
is more async friendly now.For people who use unittest and are used to use :py:exc:
~unittest.TestCase
it will be easier to write new test cases like the sync version of the :py:exc:~unittest.TestCase
class,
without using the decorator@unittest_run_loop
, justasync def test_*
.
The only difference is that for the people using python3.7 and below a new dependency is needed, it isasynctestcase
.
(#4700)_ -
Add validation of HTTP header keys and values to prevent header injection.
(#4818)_ -
Add predicate to
AbstractCookieJar.clear
.
AddAbstractCookieJar.clear_domain
to clean all domain and subdomains cookies only.
(#4942)_ -
Add keepalive_timeout parameter to web.run_app.
(#5094)_ -
Tracing for client sent headers
(#5105)_ -
Make type hints for http parser stricter
(#5267)_ -
Add final declarations for constants.
(#5275)_ -
Switch to external frozenlist and aiosignal libraries.
(#5293)_ -
Don't send secure cookies by insecure transports.
By default, the transport is secure if https or wss scheme is used.
UseCookieJar(treat_as_secure_origin="http://127.0.0.1")
to override the default security checker.
(#5571)_ -
Always create a new event loop in
aiohttp.web.run_app()
.
This adds better compatibility withasyncio.run()
or if trying to run multiple apps in sequence.
(#5572)_ -
Add
aiohttp.pytest_plugin.AiohttpClient
for static typing of pytest plugin.
(#5585)_ -
Added a
socket_factory
argument toBaseTestServer
.
(#5844)_ -
Add compression strategy parameter to enable_compression method.
(#5909)_ -
Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:
Hanaasagi
.
(#5927)_ -
Switched
chardet
tocharset-normalizer
for guessing the HTTP payload body encoding -- :user:Ousret
.
(#5930)_ -
Added optional auto_decompress argument for HttpRequestParser
(#5957)_ -
Added support for HTTPS proxies to the extent CPython's
:py:mod:asyncio
supports it -- by :user:bmbouter
,
:user:jborean93
and :user:webknjaz
.
(#5992)_ -
Added
base_url
parameter to the initializer of :class:~aiohttp.ClientSession
.
(#6013)_ -
Add Trove classifier and create binary wheels for 3.10. -- :user:
hugovk
.
(#6079)_ -
Started shipping platform-specific wheels with the
musl
tag targeting typical Alpine Linux runtimes — :user:asvetlov
.
(#6139)_ -
Started shipping platform-specific arm64 wheels for Apple Silicon — :user:
asvetlov
.
(#6139)_
Bugfixes
- Modify drain_helper() to handle concurrent
await resp.write(...)
orws.send_json(...)
calls without race-condition.
(#2934) - Started using
MultiLoopChildWatcher
when it's available under POSIX while setting up the test I/O loop.
(#3450)_ - Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
(#4012)_ - Fixed HTTP client requests to honor
no_proxy
environment variables.
(#4431)_ - Fix supporting WebSockets proxies configured via environment variables.
(#4648)_ - Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
(#4748)_ - Ensure a cleanup context is cleaned up even when an exception occurs during startup.
(#4799)_ - Added a new exception type for Unix socket client errors which provides a more useful error message.
(#4984)_ - Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
(#5106)_ - Only depend on typing_extensions for Python <3.8
(#5107)_ - Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
(#5192)_ - Fix cookies disappearing from HTTPExceptions.
(#5233)_ - StaticResource prefixes no longer match URLs with a non-folder prefix. For example
routes.static('/foo', '/foo')
no longer matches the URL/foobar
. Previously, this would attempt to load the file/foo/ar
.
(#5250)_ - Acquire the connection before running traces to prevent race condition.
(#5259)_ - Add missing slots to ```_RequestContextManager
and
WSRequestContextManager``
(#5329) - Ensure sending a zero byte file does not throw an exception (round 2)
(#5380)_ - Set "text/plain" when data is an empty string in client requests.
(#5392)_ - Stop automatically releasing the
ClientResponse
object on calls to theok
property for the failed requests.
(#5403)_ - Include query parameters from
params
keyword argument in tracingURL
.
(#5432)_ - Fix annotations
(#5466)_ - Fixed the multipart POST requests processing to always release file
descriptors for thetempfile.Temporaryfile
-created
_io.BufferedRandom
instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:webknjaz
.
(#5494)_ - Fix 0 being incorrectly treated as an immediate timeout.
(#5527)_ - Fixes failing tests when an environment variable proxy is set.
(#5554) - Replace deprecated app handler design in
tests/autobahn/server.py
with call toweb.run_app
; replace deprecatedaiohttp.ws_connect
calls intests/autobahn/client.py
withaiohttp.ClienSession.ws_connect
.
(#5606)_ - Fixed test for
HTTPUnauthorized
that access thetext
argument. This is not used in any part of the code, so it's removed now.
(#5657)_ - Remove incorrect default from docs
(#5727)_ - Remove external test dependency to http://httpbin.org
(#5840)_ - Don't cancel current task when entering a cancelled timer.
(#5853)_ - Added
params
keyword argument toClientSession.ws_connect
. -- :user:hoh
.
(#5868)_ - Uses :py:class:
~asyncio.ThreadedChildWatcher
under POSIX to allow setting up test loop in non-main thread.
(#5877)_ - Fix the error in handling the return value of
getaddrinfo
.
getaddrinfo
will return an(int, bytes)
tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
--disable-ipv6
option but his system enable the ipv6.
(#5901)_ - Removed the deprecated
loop
argument from theasyncio.sleep
/gather
calls
(#5905)_ - Return
None
fromrequest.if_modified_since
,request.if_unmodified_since
,request.if_range
andresponse.last_modified
when corresponding http date headers are invalid.
(#5925)_ - Fix resetting
SIGCHLD
signals in Gunicorn aiohttp Worker to fixsubprocesses
that capture output having an incorrectreturncode
.
(#6130)_ - Raise
400: Content-Length can't be present with Transfer-Encoding
if bothContent-Length
andTransfer-Encoding
are sent by peer by both C and Python implementations
(#6182)_
Improved Documentation
- Refactored OpenAPI/Swagger aiohttp addons, added
aio-openapi
(#5326)_ - Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
(#5725)_ - Documented that the HTTP client
Authorization
header is removed
on redirects to a different host or protocol.
(#5850)_
Misc
- (#3927), (#4247), (#4247), (#5389), (#5457), (#5486), (#5494), (#5515), (#5625), (#5635), (#5648), (#5657), (#5890), (#5914), (#5932), (#6002), (#6045), (#6131), (#6156), (#6165), (#6166)_
3.7.4.post0 (2021-03-06)
Misc
- Bumped upper bound of the
chardet
runtime dependency
to allow their v4.0 version stream.
(#5366)_
v3.8.0a7
Features
-
Added a
GunicornWebWorker
feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to returnweb.AppRunner
object.
(#2988)_ -
Switch from
http-parser
tollhttp
(#3561)_ -
Use Brotli instead of brotlipy
(#3803)_ -
Disable implicit switch-back to pure python mode. The build fails loudly if aiohttp
cannot be compiled with C Accelerators. Use AIOHTTP_NO_EXTENSIONS=1 to explicitly
disable C Extensions complication and switch to Pure-Python mode. Note that Pure-Python
mode is significantly slower than compiled one.
(#3828)_ -
Make access log use local time with timezone
(#3853)_ -
Implemented
readuntil
inStreamResponse
(#4054)_ -
FileResponse now supports ETag.
(#4594)_ -
Add a request handler type alias
aiohttp.typedefs.Handler
.
(#4686)_ -
AioHTTPTestCase
is more async friendly now.For people who use unittest and are used to use :py:exc:
~unittest.TestCase
it will be easier to write new test cases like the sync version of the :py:exc:~unittest.TestCase
class,
without using the decorator@unittest_run_loop
, justasync def test_*
.
The only difference is that for the people using python3.7 and below a new dependency is needed, it isasynctestcase
.
(#4700)_ -
Add validation of HTTP header keys and values to prevent header injection.
(#4818)_ -
Add predicate to
AbstractCookieJar.clear
.
AddAbstractCookieJar.clear_domain
to clean all domain and subdomains cookies only.
(#4942)_ -
Add keepalive_timeout parameter to web.run_app.
(#5094)_ -
Tracing for client sent headers
(#5105)_ -
Make type hints for http parser stricter
(#5267)_ -
Add final declarations for constants.
(#5275)_ -
Switch to external frozenlist and aiosignal libraries.
(#5293)_ -
Don't send secure cookies by insecure transports.
By default, the transport is secure if https or wss scheme is used.
UseCookieJar(treat_as_secure_origin="http://127.0.0.1")
to override the default security checker.
(#5571)_ -
Always create a new event loop in
aiohttp.web.run_app()
.
This adds better compatibility withasyncio.run()
or if trying to run multiple apps in sequence.
(#5572)_ -
Add
aiohttp.pytest_plugin.AiohttpClient
for static typing of pytest plugin.
(#5585)_ -
Added a
socket_factory
argument toBaseTestServer
.
(#5844)_ -
Add compression strategy parameter to enable_compression method.
(#5909)_ -
Added support for Python 3.10 to Github Actions CI/CD workflows and fix the related deprecation warnings -- :user:
Hanaasagi
.
(#5927)_ -
Switched
chardet
tocharset-normalizer
for guessing the HTTP payload body encoding -- :user:Ousret
.
(#5930)_ -
Added optional auto_decompress argument for HttpRequestParser
(#5957)_ -
Added support for HTTPS proxies to the extent CPython's
:py:mod:asyncio
supports it -- by :user:bmbouter
,
:user:jborean93
and :user:webknjaz
.
(#5992)_ -
Add Trove classifier and create binary wheels for 3.10. -- :user:
hugovk
.
(#6079)_ -
Started shipping platform-specific wheels with the
musl
tag targeting typical Alpine Linux runtimes — :user:asvetlov
.
(#6139)_ -
Started shipping platform-specific arm64 wheels for Apple Silicon — :user:
asvetlov
.
(#6139)_
Bugfixes
- Modify drain_helper() to handle concurrent
await resp.write(...)
orws.send_json(...)
calls without race-condition.
(#2934) - Started using
MultiLoopChildWatcher
when it's available under POSIX while setting up the test I/O loop.
(#3450)_ - Only encode content-disposition filename parameter using percent-encoding.
Other parameters are encoded to quoted-string or RFC2231 extended parameter
value.
(#4012)_ - Fixed HTTP client requests to honor
no_proxy
environment variables.
(#4431)_ - Change return type on URLDispatcher to UrlMappingMatchInfo to improve type annotations.
(#4748)_ - Ensure a cleanup context is cleaned up even when an exception occurs during startup.
(#4799)_ - Added a new exception type for Unix socket client errors which provides a more useful error message.
(#4984)_ - Remove Transfer-Encoding and Content-Type headers for 204 in StreamResponse
(#5106)_ - Only depend on typing_extensions for Python <3.8
(#5107)_ - Add ABNORMAL_CLOSURE and BAD_GATEWAY to WSCloseCode
(#5192)_ - Fix cookies disappearing from HTTPExceptions.
(#5233)_ - Acquire the connection before running traces to prevent race condition.
(#5259)_ - Add missing slots to ```_RequestContextManager
and
WSRequestContextManager``
(#5329) - Ensure sending a zero byte file does not throw an exception (round 2)
(#5380)_ - Set "text/plain" when data is an empty string in client requests.
(#5392)_ - Stop automatically releasing the
ClientResponse
object on calls to theok
property for the failed requests.
(#5403)_ - Include query parameters from
params
keyword argument in tracingURL
.
(#5432)_ - Fix annotations
(#5466)_ - Fixed the multipart POST requests processing to always release file
descriptors for thetempfile.Temporaryfile
-created
_io.BufferedRandom
instances of files sent within multipart request
bodies via HTTP POST requests -- by :user:webknjaz
.
(#5494)_ - Fix 0 being incorrectly treated as an immediate timeout.
(#5527)_ - Replace deprecated app handler design in
tests/autobahn/server.py
with call toweb.run_app
; replace deprecatedaiohttp.ws_connect
calls intests/autobahn/client.py
withaiohttp.ClienSession.ws_connect
.
(#5606)_ - Fixed test for
HTTPUnauthorized
that access thetext
argument. This is not used in any part of the code, so it's removed now.
(#5657)_ - Remove incorrect default from docs
(#5727)_ - Remove external test dependency to http://httpbin.org
(#5840)_ - Don't cancel current task when entering a cancelled timer.
(#5853)_ - Added
params
keyword argument toClientSession.ws_connect
. -- :user:hoh
.
(#5868)_ - Uses :py:class:
~asyncio.ThreadedChildWatcher
under POSIX to allow setting up test loop in non-main thread.
(#5877)_ - Fix the error in handling the return value of
getaddrinfo
.
getaddrinfo
will return an(int, bytes)
tuple, if CPython could not handle the address family.
It will cause a index out of range error in aiohttp. For example, if user compile CPython with
--disable-ipv6
option but his system enable the ipv6.
(#5901)_ - Removed the deprecated
loop
argument from theasyncio.sleep
/gather
calls
(#5905)_ - Return
None
fromrequest.if_modified_since
,request.if_unmodified_since
,request.if_range
andresponse.last_modified
when corresponding http date headers are invalid.
(#5925)_ - Fix resetting
SIGCHLD
signals in Gunicorn aiohttp Worker to fixsubprocesses
that capture output having an incorrectreturncode
.
(#6130)_
Improved Documentation
- Refactored OpenAPI/Swagger aiohttp addons, added
aio-openapi
(#5326)_ - Fixed docs on request cookies type, so it matches what is actually used in the code (a
read-only dictionary-like object).
(#5725)_ - Documented that the HTTP client
Authorization
header is removed
on redirects to a different host or protocol.
(#5850)_
Misc
- (#3927), (#4247), (#4247), (#5389), (#5457), (#5486), (#5494), (#5515), (#5625), (#5635), (#5648), (#5657), (#5890), (#5914), (#5932), (#6002), (#6045), (#6131), (#6156), (#6165), (#6166)_
3.7.4.post0 (2021-03-06)
Misc
- Bumped upper bound of the
chardet
runtime dependency
to allow their v4.0 version stream.
(#5366)_
aiohttp 3.7.3 release
Features
- Use Brotli instead of brotlipy
#3803 <https://github.com/aio-libs/aiohttp/issues/3803>
_ - Made exceptions pickleable. Also changed the repr of some exceptions.
#4077 <https://github.com/aio-libs/aiohttp/issues/4077>
_
Bugfixes
- Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
#3532 <https://github.com/aio-libs/aiohttp/issues/3532>
_ - Fix
web_middlewares.normalize_path_middleware
behavior for patch without slash.
#3669 <https://github.com/aio-libs/aiohttp/issues/3669>
_ - Fix overshadowing of overlapped sub-applications prefixes.
#3701 <https://github.com/aio-libs/aiohttp/issues/3701>
_ - Make
BaseConnector.close()
a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax.
#3736 <https://github.com/aio-libs/aiohttp/issues/3736>
_ - Reset the
sock_read
timeout each time data is received for aaiohttp.client
response.
#3808 <https://github.com/aio-libs/aiohttp/issues/3808>
_ - Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View
#3880 <https://github.com/aio-libs/aiohttp/issues/3880>
_ - Fixed querying the address families from DNS that the current host supports.
#5156 <https://github.com/aio-libs/aiohttp/issues/5156>
_ - Change return type of MultipartReader.aiter() and BodyPartReader.aiter() to AsyncIterator.
#5163 <https://github.com/aio-libs/aiohttp/issues/5163>
_ - Provide x86 Windows wheels.
#5230 <https://github.com/aio-libs/aiohttp/issues/5230>
_
Improved Documentation
- Add documentation for
aiohttp.web.FileResponse
.
#3958 <https://github.com/aio-libs/aiohttp/issues/3958>
_ - Removed deprecation warning in tracing example docs
#3964 <https://github.com/aio-libs/aiohttp/issues/3964>
_ - Fixed wrong "Usage" docstring of
aiohttp.client.request
.
#4603 <https://github.com/aio-libs/aiohttp/issues/4603>
_ - Add aiohttp-pydantic to third party libraries
#5228 <https://github.com/aio-libs/aiohttp/issues/5228>
_
Misc
#4102 <https://github.com/aio-libs/aiohttp/issues/4102>
_
aiohttp 3.7.2 release
Bugfixes
- Fixed static files handling for loops without
.sendfile()
support
#5149 <https://github.com/aio-libs/aiohttp/issues/5149>
_