-
-
Notifications
You must be signed in to change notification settings - Fork 30.5k
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
gh-72889: remove redundant mock.Mock()._is_coroutine = False
workarounds
#94926
gh-72889: remove redundant mock.Mock()._is_coroutine = False
workarounds
#94926
Conversation
self.loop._add_reader = mock.Mock() | ||
self.loop._add_reader._is_coroutine = False |
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.
when asyncio.iscoroutinefunction was implemented as:
cpython/Lib/asyncio/coroutines.py
Lines 245 to 248 in 2f84144
def iscoroutinefunction(func): | |
"""Return True if func is a decorated coroutine function.""" | |
return (getattr(func, '_is_coroutine', False) or | |
_inspect_iscoroutinefunction(func)) |
this meant
self.loop._add_reader = mock.Mock()
assert asyncio.iscoroutinefunction(self.loop._add_reader) is True # mock objects have a truthy _is_coroutine attribute!
self.loop._add_reader._is_coroutine = False
assert asyncio.iscoroutinefunction(self.loop._add_reader) is False # patching it works around the issue
however the implementation was changed to use a marker object:
cpython/Lib/asyncio/coroutines.py
Lines 16 to 23 in ec4745b
# A marker for iscoroutinefunction. | |
_is_coroutine = object() | |
def iscoroutinefunction(func): | |
"""Return True if func is a decorated coroutine function.""" | |
return (inspect.iscoroutinefunction(func) or | |
getattr(func, '_is_coroutine', None) is _is_coroutine) |
and so now the _is_coroutine = False
work-around is redundant:
self.loop._add_reader = mock.Mock()
assert asyncio.iscoroutinefunction(self.loop._add_reader) is False # mock objects have an _is_coroutine but it's not the asyncio.coroutines._is_coroutine sentinel
self.loop._add_reader._is_coroutine = False
assert asyncio.iscoroutinefunction(self.loop._add_reader) is False # it's still False so the workaround is redundant
I don't think this needs a news entry |
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.
Since this just changes tests and the tests pass, I think this is okay.
Thanks @graingert for the PR, and @gvanrossum for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11. |
GH-94934 is a backport of this pull request to the 3.11 branch. |
…rkarounds (pythonGH-94926) (cherry picked from commit 07aeb74) Co-authored-by: Thomas Grainger <[email protected]>
…nds (GH-94926) (cherry picked from commit 07aeb74) Co-authored-by: Thomas Grainger <[email protected]>
these work-arounds were made redundant by python/asyncio#459