http client/server for asyncio v3.7.0 Release Notes

Release Date: 2020-10-24 // over 3 years ago
  • ๐Ÿ”‹ Features

    • Response headers are now prepared prior to running on_response_prepare hooks, directly before headers are sent to the client.
      #1958 <https://github.com/aio-libs/aiohttp/issues/1958>_
    • โž• Add a quote_cookie option to CookieJar, a way to skip quotation wrapping of cookies containing special characters.
      #2571 <https://github.com/aio-libs/aiohttp/issues/2571>_
    • ๐ŸŒฒ Call AccessLogger.log with the current exception available from sys.exc_info().
      #3557 <https://github.com/aio-libs/aiohttp/issues/3557>_
    • ๐ŸŒ web.UrlDispatcher.add_routes and web.Application.add_routes return a list
      of registered AbstractRoute instances. AbstractRouteDef.register (and all
      subclasses) return a list of registered resources registered resource.
      #3866 <https://github.com/aio-libs/aiohttp/issues/3866>_
    • โž• Added properties of default ClientSession params to ClientSession class so it is available for introspection
      #3882 <https://github.com/aio-libs/aiohttp/issues/3882>_
    • ๐ŸŒ Don't cancel web handler on peer disconnection, raise OSError on reading/writing instead.
      #4080 <https://github.com/aio-libs/aiohttp/issues/4080>_
    • Implement BaseRequest.get_extra_info() to access a protocol transports' extra info.
      #4189 <https://github.com/aio-libs/aiohttp/issues/4189>_
    • โž• Added ClientSession.timeout property.
      #4191 <https://github.com/aio-libs/aiohttp/issues/4191>_
    • ๐Ÿ‘ allow use of SameSite in cookies.
      #4224 <https://github.com/aio-libs/aiohttp/issues/4224>_
    • ๐Ÿ‘‰ Use loop.sendfile() instead of custom implementation if available.
      #4269 <https://github.com/aio-libs/aiohttp/issues/4269>_
    • โœ… Apply SO_REUSEADDR to test server's socket.
      #4393 <https://github.com/aio-libs/aiohttp/issues/4393>_
    • ๐Ÿ‘‰ Use .raw_host instead of slower .host in client API
      #4402 <https://github.com/aio-libs/aiohttp/issues/4402>_
    • ๐Ÿ‘ Allow configuring the buffer size of input stream by passing read_bufsize argument.
      #4453 <https://github.com/aio-libs/aiohttp/issues/4453>_
    • ๐Ÿ Pass tests on Python 3.8 for Windows.
      #4513 <https://github.com/aio-libs/aiohttp/issues/4513>_
    • โž• Add method and url attributes to TraceRequestChunkSentParams and TraceResponseChunkReceivedParams.
      #4674 <https://github.com/aio-libs/aiohttp/issues/4674>_
    • โž• Add ClientResponse.ok property for checking status code under 400.
      #4711 <https://github.com/aio-libs/aiohttp/issues/4711>_
    • Don't ceil timeouts that are smaller than 5 seconds.
      #4850 <https://github.com/aio-libs/aiohttp/issues/4850>_
    • 0๏ธโƒฃ TCPSite now listens by default on all interfaces instead of just IPv4 when None is passed in as the host.
      #4894 <https://github.com/aio-libs/aiohttp/issues/4894>_
    • โฌ†๏ธ Bump http_parser to 2.9.4
      #5070 <https://github.com/aio-libs/aiohttp/issues/5070>_

    ๐Ÿ›  Bugfixes

    ๐Ÿ›  Fix keepalive connections not being closed in time
    #3296 <https://github.com/aio-libs/aiohttp/issues/3296>_

    ๐Ÿ›  Fix failed websocket handshake leaving connection hanging.
    #3380 <https://github.com/aio-libs/aiohttp/issues/3380>_

    ๐Ÿ›  Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact.
    #3805 <https://github.com/aio-libs/aiohttp/issues/3805>_

    Don't start heartbeat until writer is set
    #4062 <https://github.com/aio-libs/aiohttp/issues/4062>

    ๐Ÿ›  Fix handling of multipart file uploads without a content type.
    #4089 <https://github.com/aio-libs/aiohttp/issues/4089>_

    Preserve view handler function attributes across middlewares
    #4174 <https://github.com/aio-libs/aiohttp/issues/4174>_

    ๐Ÿ›  Fix the string representation of ServerDisconnectedError.
    #4175 <https://github.com/aio-libs/aiohttp/issues/4175>_

    Raising RuntimeError when trying to get encoding from not read body
    #4214 <https://github.com/aio-libs/aiohttp/issues/4214>_

    โœ‚ Remove warning messages from noop.
    #4282 <https://github.com/aio-libs/aiohttp/issues/4282>_

    ๐Ÿ›ฐ Raise ClientPayloadError if FormData re-processed.
    #4345 <https://github.com/aio-libs/aiohttp/issues/4345>_

    ๐Ÿ›  Fix a warning about unfinished task in web_protocol.py
    #4408 <https://github.com/aio-libs/aiohttp/issues/4408>_

    ๐Ÿ›  Fixed 'deflate' compression. According to RFC 2616 now.
    #4506 <https://github.com/aio-libs/aiohttp/issues/4506>_

    ๐Ÿ›  Fixed OverflowError on platforms with 32-bit time_t
    #4515 <https://github.com/aio-libs/aiohttp/issues/4515>_

    ๐Ÿ›  Fixed request.body_exists returns wrong value for methods without body.
    #4528 <https://github.com/aio-libs/aiohttp/issues/4528>_

    ๐Ÿ›  Fix connecting to link-local IPv6 addresses.
    #4554 <https://github.com/aio-libs/aiohttp/issues/4554>_

    ๐Ÿ›  Fix a problem with connection waiters that are never awaited.
    #4562 <https://github.com/aio-libs/aiohttp/issues/4562>_

    Always make sure transport is not closing before reuse a connection.

    Reuse a protocol based on keepalive in headers is unreliable.
    ๐Ÿ‘ For example, uWSGI will not support keepalive even it serves a
    ๐Ÿ”ง HTTP 1.1 request, except explicitly configure uWSGI with a
    --http-keepalive option.

    Servers designed like uWSGI could cause aiohttp intermittently
    ๐Ÿ“Š raise a ConnectionResetException when the protocol poll runs
    out and some protocol is reused.
    #4587 <https://github.com/aio-libs/aiohttp/issues/4587>_

    ๐Ÿ– Handle the last CRLF correctly even if it is received via separate TCP segment.
    #4630 <https://github.com/aio-libs/aiohttp/issues/4630>_

    ๐Ÿ›  Fix the register_resource function to validate route name before splitting it so that route name can include python keywords.
    #4691 <https://github.com/aio-libs/aiohttp/issues/4691>_

    ๐Ÿ‘Œ Improve typing annotations for web.Request, aiohttp.ClientResponse and
    multipart module.
    #4736 <https://github.com/aio-libs/aiohttp/issues/4736>_

    ๐Ÿ›  Fix resolver task is not awaited when connector is cancelled
    #4795 <https://github.com/aio-libs/aiohttp/issues/4795>_

    ๐Ÿ›  Fix a bug "Aiohttp doesn't return any error on invalid request methods"
    #4798 <https://github.com/aio-libs/aiohttp/issues/4798>_

    ๐Ÿ›  Fix HEAD requests for static content.
    #4809 <https://github.com/aio-libs/aiohttp/issues/4809>_

    ๐Ÿ›  Fix incorrect size calculation for memoryview
    #4890 <https://github.com/aio-libs/aiohttp/issues/4890>_

    Add HTTPMove to all_.
    #4897 <https://github.com/aio-libs/aiohttp/issues/4897>_

    ๐Ÿ›  Fixed the type annotations in the tracing module.
    #4912 <https://github.com/aio-libs/aiohttp/issues/4912>_

    Fix typing for multipart __aiter__.
    #4931 <https://github.com/aio-libs/aiohttp/issues/4931>_

    ๐Ÿ›  Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit.
    #4936 <https://github.com/aio-libs/aiohttp/issues/4936>_

    โž• Add forced UTF-8 encoding for application/rdap+json responses.
    #4938 <https://github.com/aio-libs/aiohttp/issues/4938>_

    ๐Ÿ›  Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL.
    #4972 <https://github.com/aio-libs/aiohttp/issues/4972>_

    ๐Ÿ›  Fix connection closing issue in HEAD request.
    #5012 <https://github.com/aio-libs/aiohttp/issues/5012>_

    ๐Ÿ›  Fix type hint on BaseRunner.addresses (from List[str] to List[Any])
    #5086 <https://github.com/aio-libs/aiohttp/issues/5086>_

    ๐Ÿ Make web.run_app() more responsive to Ctrl+C on Windows for Python < 3.8. It slightly
    increases CPU load as a side effect.
    #5098 <https://github.com/aio-libs/aiohttp/issues/5098>_

    ๐Ÿ‘Œ Improved Documentation

    • ๐Ÿ›  Fix example code in client quick-start
      #3376 <https://github.com/aio-libs/aiohttp/issues/3376>_
    • Updated the docs so there is no contradiction in ttl_dns_cache default value
      #3512 <https://github.com/aio-libs/aiohttp/issues/3512>_
    • โž• Add 'Deploy with SSL' to docs.
      #4201 <https://github.com/aio-libs/aiohttp/issues/4201>_
    • ๐Ÿ”„ Change typing of the secure argument on StreamResponse.set_cookie from Optional[str] to Optional[bool]
      #4204 <https://github.com/aio-libs/aiohttp/issues/4204>_
    • Changes ttl_dns_cache type from int to Optional[int].
      #4270 <https://github.com/aio-libs/aiohttp/issues/4270>_
    • ๐Ÿ“š Simplify README hello word example and add a documentation page for people coming from requests.
      #4272 <https://github.com/aio-libs/aiohttp/issues/4272>_
    • ๐Ÿ‘Œ Improve some code examples in the documentation involving websockets and starting a simple HTTP site with an AppRunner.
      #4285 <https://github.com/aio-libs/aiohttp/issues/4285>_
    • ๐Ÿ›  Fix typo in code example in Multipart docs
      #4312 <https://github.com/aio-libs/aiohttp/issues/4312>_
    • ๐Ÿ›  Fix code example in Multipart section.
      #4314 <https://github.com/aio-libs/aiohttp/issues/4314>_
    • โšก๏ธ Update contributing guide so new contributors read the most recent version of that guide. Update command used to create test coverage reporting.
      #4810 <https://github.com/aio-libs/aiohttp/issues/4810>_
    • Spelling: Change "canonize" to "canonicalize".
      #4986 <https://github.com/aio-libs/aiohttp/issues/4986>_
    • โž• Add aiohttp-sse-client library to third party usage list.
      #5084 <https://github.com/aio-libs/aiohttp/issues/5084>_

    Misc

    • #2856 <https://github.com/aio-libs/aiohttp/issues/2856>, #4218 <https://github.com/aio-libs/aiohttp/issues/4218>, #4250 <https://github.com/aio-libs/aiohttp/issues/4250>_