Skip to content

gh-72889: remove redundant mock.Mock()._is_coroutine = False workarounds - #94926

Merged
gvanrossum merged 2 commits into
python:mainfrom
graingert:remove-redudant-mock-is-coroutine-workarounds
Jul 17, 2022
Merged

gh-72889: remove redundant mock.Mock()._is_coroutine = False workarounds#94926
gvanrossum merged 2 commits into
python:mainfrom
graingert:remove-redudant-mock-is-coroutine-workarounds

Conversation

@graingert

@graingertgraingert commented Jul 17, 2022

Copy link
Copy Markdown
Contributor

@bedevere-botbedevere-bot added awaiting review tests Tests in the Lib/test dir labels Jul 17, 2022
Comment on lines 1287 to -1289
self.loop._add_reader = mock.Mock()
self.loop._add_reader._is_coroutine = False

@graingertgraingertJul 17, 2022

Copy link
Copy Markdown
ContributorAuthor

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:

defiscoroutinefunction(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()
assertasyncio.iscoroutinefunction(self.loop._add_reader) isTrue# mock objects have a truthy _is_coroutine attribute!self.loop._add_reader._is_coroutine=Falseassertasyncio.iscoroutinefunction(self.loop._add_reader) isFalse# patching it works around the issue

however the implementation was changed to use a marker object:

# A marker for iscoroutinefunction.
_is_coroutine=object()
defiscoroutinefunction(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()
assertasyncio.iscoroutinefunction(self.loop._add_reader) isFalse# mock objects have an _is_coroutine but it's not the asyncio.coroutines._is_coroutine sentinelself.loop._add_reader._is_coroutine=Falseassertasyncio.iscoroutinefunction(self.loop._add_reader) isFalse# it's still False so the workaround is redundant

@graingert

Copy link
Copy Markdown
ContributorAuthor

I don't think this needs a news entry

@gvanrossumgvanrossum left a comment

Copy link
Copy Markdown
Member

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.

@miss-islington

Copy link
Copy Markdown
Contributor

Thanks @graingert for the PR, and @gvanrossum for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11.
🐍🍒⛏🤖

@bedevere-bot

Copy link
Copy Markdown

GH-94934 is a backport of this pull request to the 3.11 branch.

@bedevere-botbedevere-bot removed the needs backport to 3.11 only security fixes label Jul 17, 2022
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Jul 17, 2022
…rkarounds (pythonGH-94926)
(cherry picked from commit 07aeb74)
Co-authored-by: Thomas Grainger <tagrain@gmail.com>
@graingert
graingert deleted the remove-redudant-mock-is-coroutine-workarounds branch July 17, 2022 17:23
miss-islington added a commit that referenced this pull request Jul 17, 2022
…nds (GH-94926)
(cherry picked from commit 07aeb74)
Co-authored-by: Thomas Grainger <tagrain@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip newstestsTests in the Lib/test dirtopic-asyncio

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@graingert@miss-islington@bedevere-bot@gvanrossum