github aio-libs/aiohttp v3.10.0b1
3.10.0b1

latest releases: v3.10.5, v3.10.4, v3.10.3...
pre-releaseone month ago

Bug fixes

  • Fixed server response headers for Content-Type and Content-Encoding for
    static compressed files -- by :user:steverep.

    Server will now respond with a Content-Type appropriate for the compressed
    file (e.g. "application/gzip"), and omit the Content-Encoding header.
    Users should expect that most clients will no longer decompress such responses
    by default.

    Related issues and pull requests on GitHub:
    #4462.

  • Fix duplicate cookie expiration calls in the CookieJar implementation

    Related issues and pull requests on GitHub:
    #7784.

  • Fix AsyncResolver to match ThreadedResolver behavior
    -- by :user:bdraco.

    On system with IPv6 support, the :py:class:~aiohttp.resolver.AsyncResolver would not fallback
    to providing A records when AAAA records were not available.
    Additionally, unlike the :py:class:~aiohttp.resolver.ThreadedResolver, the :py:class:~aiohttp.resolver.AsyncResolver
    did not handle link-local addresses correctly.

    This change makes the behavior consistent with the :py:class:~aiohttp.resolver.ThreadedResolver.

    Related issues and pull requests on GitHub:
    #8270.

  • Fix ws_connect not respecting receive_timeout`` on WS(S) connection. -- by :user:arcivanov`.

    Related issues and pull requests on GitHub:
    #8444.

  • Removed blocking I/O in the event loop for static resources and refactored
    exception handling -- by :user:steverep.

    File system calls when handling requests for static routes were moved to a
    separate thread to potentially improve performance. Exception handling
    was tightened in order to only return 403 Forbidden or 404 Not Found responses
    for expected scenarios; 500 Internal Server Error would be returned for any
    unknown errors.

    Related issues and pull requests on GitHub:
    #8507.

Features

  • Add a Request.wait_for_disconnection() method, as means of allowing request handlers to be notified of premature client disconnections.

    Related issues and pull requests on GitHub:
    #2492.

  • Added 5 new exceptions: :py:exc:~aiohttp.InvalidUrlClientError, :py:exc:~aiohttp.RedirectClientError,
    :py:exc:~aiohttp.NonHttpUrlClientError, :py:exc:~aiohttp.InvalidUrlRedirectClientError,
    :py:exc:~aiohttp.NonHttpUrlRedirectClientError

    :py:exc:~aiohttp.InvalidUrlRedirectClientError, :py:exc:~aiohttp.NonHttpUrlRedirectClientError
    are raised instead of :py:exc:ValueError or :py:exc:~aiohttp.InvalidURL when the redirect URL is invalid. Classes
    :py:exc:~aiohttp.InvalidUrlClientError, :py:exc:~aiohttp.RedirectClientError,
    :py:exc:~aiohttp.NonHttpUrlClientError are base for them.

    The :py:exc:~aiohttp.InvalidURL now exposes a description property with the text explanation of the error details.

    -- by :user:setla, :user:AraHaan, and :user:bdraco

    Related issues and pull requests on GitHub:
    #2507, #3315, #6722, #8481, #8482.

  • Added a feature to retry closed connections automatically for idempotent methods. -- by :user:Dreamsorcerer

    Related issues and pull requests on GitHub:
    #7297.

  • Implement filter_cookies() with domain-matching and path-matching on the keys, instead of testing every single cookie.
    This may break existing cookies that have been saved with CookieJar.save(). Cookies can be migrated with this script::

    import pickle
    with file_path.open("rb") as f:
        cookies = pickle.load(f)
    
    morsels = [(name, m) for c in cookies.values() for name, m in c.items()]
    cookies.clear()
    for name, m in morsels:
        cookies[(m["domain"], m["path"].rstrip("/"))][name] = m
    
    with file_path.open("wb") as f:
        pickle.dump(cookies, f, pickle.HIGHEST_PROTOCOL)
    

    Related issues and pull requests on GitHub:
    #7583.

  • Separated connection and socket timeout errors, from ServerTimeoutError.

    Related issues and pull requests on GitHub:
    #7801.

  • Implement happy eyeballs

    Related issues and pull requests on GitHub:
    #7954.

  • Added server capability to check for static files with Brotli compression via a .br extension -- by :user:steverep.

    Related issues and pull requests on GitHub:
    #8062.

Improved documentation

  • Add documentation for aiohttp.web.FileResponse.

    Related issues and pull requests on GitHub:
    #3958.

  • Improve the docs for the ssl params.

    Related issues and pull requests on GitHub:
    #8403.

Contributor-facing changes

  • Enabled HTTP parser tests originally intended for 3.9.2 release -- by :user:pajod.

    Related issues and pull requests on GitHub:
    #8088.

Miscellaneous internal changes

  • Improved URL handler resolution time by indexing resources in the UrlDispatcher.
    For applications with a large number of handlers, this should increase performance significantly.
    -- by :user:bdraco

    Related issues and pull requests on GitHub:
    #7829.

  • Add nacl_middleware <https://github.com/CosmicDNA/nacl_middleware>_ to the list of middlewares in the third party section of the documentation.

    Related issues and pull requests on GitHub:
    #8346.

  • Minor improvements to static typing -- by :user:Dreamsorcerer.

    Related issues and pull requests on GitHub:
    #8364.

  • Added a 3.11-specific overloads to ClientSession -- by :user:max-muoto.

    Related issues and pull requests on GitHub:
    #8463.

  • Simplified path checks for UrlDispatcher.add_static() method -- by :user:steverep.

    Related issues and pull requests on GitHub:
    #8491.

  • Avoid creating a future on every websocket receive -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    #8498.

  • Use identity checks for all WSMsgType type compares -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    #8501.

  • When using Python 3.12 or later, the writer is no longer scheduled on the event loop if it can finish synchronously. Avoiding event loop scheduling reduces latency and improves performance. -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    #8510.

  • Restore :py:class:~aiohttp.resolver.AsyncResolver to be the default resolver. -- by :user:bdraco.

    :py:class:~aiohttp.resolver.AsyncResolver was disabled by default because
    of IPv6 compatibility issues. These issues have been resolved and
    :py:class:~aiohttp.resolver.AsyncResolver is again now the default resolver.

    Related issues and pull requests on GitHub:
    #8522.

Don't miss a new aiohttp release

NewReleases is sending notifications on new releases.