gh-72889: remove redundant mock.Mock()._is_coroutine = False
workarounds by graingert · Pull Request #94926 · python/cpython (original) (raw)
when asyncio.iscoroutinefunction was implemented as:
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:
# 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