Skip to content

Commit

Permalink
[PR #6923/78fa0401 backport][3.8] Exclude the object possibility fr…
Browse files Browse the repository at this point in the history
…om the `ClientSession.timeout` type (#6925)

**This is a backport of PR #6923 as merged into master
(78fa040).**

<!-- Thank you for your contribution! -->

## What do these changes do?

<!-- Please give a short brief about these changes. -->

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.

## Are there changes in behavior for the user?

<!-- Outline any notable behaviour for the end users. -->

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".

## Related issue number

<!-- Are there any issues opened that will be resolved by merging this
change? -->

#6917

## Checklist

- [x] I think the code is well written
- [ ] Unit tests for the changes exist
- [x] Documentation reflects the changes (documentation never mentioned
an `object` instance being accessible from there even)
- [ ] If you provide code modification, please add yourself to
`CONTRIBUTORS.txt`
  * The format is &lt;Name&gt; &lt;Surname&gt;.
  * Please keep alphabetical order, the file is sorted by names.
- [ ] Add a new news fragment into the `CHANGES` folder
  * name it `<issue_id>.<type>` for example (588.bugfix)
* if you don't have an `issue_id` change it to the pr id after creating
the pr
  * ensure type is one of the following:
    * `.feature`: Signifying a new feature.
    * `.bugfix`: Signifying a bug fix.
    * `.doc`: Signifying a documentation improvement.
    * `.removal`: Signifying a deprecation or removal of public API.
* `.misc`: A ticket has been closed, but it is not of interest to users.
* Make sure to use full sentences with correct case and punctuation, for
example: "Fix issue with non-ascii contents in doctest text files."

Co-authored-by: DevilXD <DevilXD@users.noreply.github.com>
  • Loading branch information
patchback[bot] and DevilXD committed Sep 20, 2022
1 parent 9fdf548 commit f19d7bd
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 1 deletion.
3 changes: 3 additions & 0 deletions CHANGES/6917.bugfix
@@ -0,0 +1,3 @@
Dropped the :class:`object` type possibility from
the :py:attr:`aiohttp.ClientSession.timeout`
property return type declaration.
1 change: 1 addition & 0 deletions CHANGES/6917.doc
1 change: 1 addition & 0 deletions CHANGES/6923.bugfix
1 change: 1 addition & 0 deletions CHANGES/6923.doc
2 changes: 1 addition & 1 deletion aiohttp/client.py
Expand Up @@ -1027,7 +1027,7 @@ def loop(self) -> asyncio.AbstractEventLoop:
return self._loop

@property
def timeout(self) -> Union[object, ClientTimeout]:
def timeout(self) -> ClientTimeout:
"""Timeout for the session."""
return self._timeout

Expand Down

0 comments on commit f19d7bd

Please sign in to comment.