Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PR #6923/78fa0401 backport][3.9] Exclude the object possibility from the ClientSession.timeout type #6924

Commits on Sep 20, 2022

  1. Exclude the object possibility from the ClientSession.timeout type

    This is a follow-up PR to #6917, which fixes the overly inclusive typing
    of `ClientSession.timeout` attribute, which can never actually end up as
    an `object` instance. This leftover probably exists from the time when
    there was the `_sentinel` value being assigned to the attribute (see
    "3.8 branch `self._timeout` assignment" from the linked issue), hence
    why it ended up this way.
    
    For untyped code, there's absolutely no change — the `self._timeout`
    attribute was never actually assigned the sentinel value to. Most of the
    explanation already exists in #6917, here's the test code snippet from
    there again:
    
    ```py
    import asyncio
    import aiohttp
    
    async def main:
        session = aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=10))
        # read back the total time attribute
        total_time = session.timeout.total  # "object" type of "Union[object, ClientTimeout]" has no attribute "total"
        print(total_time)
    
    asyncio.run(main())
    ```
    
    For typed code, the current solution would be to `assert
    isinstance(session.timeout, aiohttp.ClientTimeout)` everywhere the
    attribute is being accessed. This PR removes this "unnecessary
    necessity".
    
    Co-authored-by: Sviatoslav Sydorenko <wk@sydorenko.org.ua>
    
    Fixes #6917
    PR #6923
    
    (cherry picked from commit 78fa040)
    DevilXD authored and patchback[bot] committed Sep 20, 2022
    Configuration menu
    Copy the full SHA
    46cdc5c View commit details
    Browse the repository at this point in the history