Skip to content

v3.8.0

Compare
Choose a tag to compare
@github-actions github-actions released this 31 Oct 21:43
· 4048 commits to master since this release

Features

  • Added a GunicornWebWorker feature for extending the aiohttp server configuration by allowing the 'wsgi' coroutine to return web.AppRunner object.
    (#2988)_

  • Switch from http-parser to llhttp
    (#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 in StreamResponse
    (#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, just async def test_*.
    The only difference is that for the people using python3.7 and below a new dependency is needed, it is asynctestcase.
    (#4700)_

  • Add validation of HTTP header keys and values to prevent header injection.
    (#4818)_

  • Add predicate to AbstractCookieJar.clear.
    Add AbstractCookieJar.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.
    Use CookieJar(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 with asyncio.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 to BaseTestServer.
    (#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 to charset-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(...) or ws.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 ```_RequestContextManagerandWSRequestContextManager``
    (#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 the ok property for the failed requests.
    (#5403)_
  • Include query parameters from params keyword argument in tracing URL.
    (#5432)_
  • Fix annotations
    (#5466)_
  • Fixed the multipart POST requests processing to always release file
    descriptors for the tempfile.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 to web.run_app; replace deprecated aiohttp.ws_connect calls in tests/autobahn/client.py with aiohttp.ClienSession.ws_connect.
    (#5606)_
  • Fixed test for HTTPUnauthorized that access the text 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 to ClientSession.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 the asyncio.sleep/gather calls
    (#5905)_
  • Return None from request.if_modified_since, request.if_unmodified_since, request.if_range and response.last_modified when corresponding http date headers are invalid.
    (#5925)_
  • Fix resetting SIGCHLD signals in Gunicorn aiohttp Worker to fix subprocesses that capture output having an incorrect returncode.
    (#6130)_
  • Raise 400: Content-Length can't be present with Transfer-Encoding if both Content-Length and Transfer-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


3.7.4.post0 (2021-03-06)

Misc

  • Bumped upper bound of the chardet runtime dependency
    to allow their v4.0 version stream.
    (#5366)_