-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
Exclude the object
possibility from the ClientSession.timeout
type
#6923
Conversation
I'm not sure if I deserve a |
CHANGES/6917.misc
Outdated
@@ -0,0 +1 @@ | |||
Fix ClientSession.timeout having incorrect typing. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Plz try following the recommendations at https://github.com/aio-libs/aiohttp/tree/master/CHANGES#alright-so-how-to-add-a-news-fragment. Also, use RST formatting to highlight/link identifiers.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, this is probably a bugfix + maybe docs type.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've made the updates myself.
I've never even added my own name. :P |
@Dreamsorcerer FYI you can now select a rebase mode in that GH button (just click on the drop-down arrow) |
Codecov Report
@@ Coverage Diff @@
## master #6923 +/- ##
=======================================
Coverage 97.35% 97.35%
=======================================
Files 106 106
Lines 30962 30962
Branches 3843 3843
=======================================
Hits 30144 30144
Misses 619 619
Partials 199 199
Flags with carried forward coverage won't be shown. Click here to find out more.
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
Ah, it all get squash committed anyway though, so I'm not it makes any difference. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems obviously correct to me, probably didn't need the long story in the bug ticket. :P
@webknjaz Seems like a simple fix for 3.8.2 if we've not already passed the point of no return? |
A good description is useful, since what's obvious for one person would be confusing for another. Especially, this applies to a “future you”, or a “trying to decide on backports you”, or a “Git archeologist-you”. |
I guess I could get it in. But it still needs brushing up the change note. |
object
possibility from the ClientSession.timeout
type
Backport to 3.9: 💚 backport PR created✅ Backport PR branch: Backported as #6924 🤖 @patchback |
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 <[email protected]> Fixes #6917 PR #6923 (cherry picked from commit 78fa040)
Backport to 3.8: 💚 backport PR created✅ Backport PR branch: Backported as #6925 🤖 @patchback |
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 <[email protected]> Fixes #6917 PR #6923 (cherry picked from commit 78fa040)
…om the `ClientSession.timeout` type (#6924) **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 <Name> <Surname>. * 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 <[email protected]>
…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 <Name> <Surname>. * 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 <[email protected]>
What do these changes do?
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 anobject
instance. This leftover probably exists from the time when there was the_sentinel
value being assigned to the attribute (see "3.8 branchself._timeout
assignment" from the linked issue), hence why it ended up this way.Are there changes in behavior for the user?
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: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
#6917
Checklist
object
instance being accessible from there even)CONTRIBUTORS.txt
CHANGES
folder<issue_id>.<type>
for example (588.bugfix)issue_id
change it to the pr id after creating the pr.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.