Skip to content

gh-153888: autospec doesn't work with lazy-imported symbols#153977

Open
palakkhinvasara wants to merge 11 commits into
python:mainfrom
palakkhinvasara:fix-unittest-lazy-import-patch
Open

gh-153888: autospec doesn't work with lazy-imported symbols#153977
palakkhinvasara wants to merge 11 commits into
python:mainfrom
palakkhinvasara:fix-unittest-lazy-import-patch

Conversation

@palakkhinvasara

Copy link
Copy Markdown
Contributor

#153888 Fix unittest.mock.patch with lazy imports and autospec

unittest.mock.patch() currently reads unresolved lazy-import bindings directly from target.__dict__.

When autospec=True (and similarly spec/spec_set) is used with a lazy-imported object, patch() receives the LazyImportType proxy instead of the actual imported object. This causes create_autospec() to create a NonCallableMagicMock for callable objects.

For example:

lazy from json import dumps

with patch("__main__.dumps", autospec=True) as mock_dumps:
    mock_dumps({})

@palakkhinvasara palakkhinvasara changed the title issue #153888: autospec doesn't work with lazy-imported symbols issue gh-153888: autospec doesn't work with lazy-imported symbols Jul 18, 2026
@palakkhinvasara

Copy link
Copy Markdown
Contributor Author

hello @cjw296 , can you pls review this pr?

Thanks & Regards
Palak

builtin_string = 'builtins'

PTModule = sys.modules[__name__]
lazy from json import dumps as lazy_dumps # noqa: F401

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.

Why is this import here?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

corrected

Comment thread Lib/unittest/mock.py Outdated
original = getattr(target, name, DEFAULT)
else:
local = True
local = True

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.

The indentation looks off.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

corrected

@palakkhinvasara
palakkhinvasara force-pushed the fix-unittest-lazy-import-patch branch from 0bcfebb to 59a848a Compare July 20, 2026 12:55
@StanFromIreland StanFromIreland changed the title issue gh-153888: autospec doesn't work with lazy-imported symbols gh-153888: autospec doesn't work with lazy-imported symbols Jul 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants