mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
[3.13] gh-119600: mock: do not access attributes of original when new_callable is set (GH-119601) (#120334)
gh-119600: mock: do not access attributes of original when new_callable is set (GH-119601)
In order to patch flask.g e.g. as in GH-84982, that
proxies getattr must not be invoked. For that,
mock must not try to read from the original
object. In some cases that is unavoidable, e.g.
when doing autospec. However, patch("flask.g",
new_callable=MagicMock) should be entirely safe.
(cherry picked from commit 422c4fc855
)
Co-authored-by: Robert Collins <robert.collins@cognite.com>
This commit is contained in:
parent
ffc8e21c80
commit
aba5f2a4d1
4 changed files with 29 additions and 5 deletions
|
@ -1508,13 +1508,12 @@ class _patch(object):
|
|||
if isinstance(original, type):
|
||||
# If we're patching out a class and there is a spec
|
||||
inherit = True
|
||||
if spec is None and _is_async_obj(original):
|
||||
Klass = AsyncMock
|
||||
else:
|
||||
Klass = MagicMock
|
||||
_kwargs = {}
|
||||
|
||||
# Determine the Klass to use
|
||||
if new_callable is not None:
|
||||
Klass = new_callable
|
||||
elif spec is None and _is_async_obj(original):
|
||||
Klass = AsyncMock
|
||||
elif spec is not None or spec_set is not None:
|
||||
this_spec = spec
|
||||
if spec_set is not None:
|
||||
|
@ -1527,7 +1526,12 @@ class _patch(object):
|
|||
Klass = AsyncMock
|
||||
elif not_callable:
|
||||
Klass = NonCallableMagicMock
|
||||
else:
|
||||
Klass = MagicMock
|
||||
else:
|
||||
Klass = MagicMock
|
||||
|
||||
_kwargs = {}
|
||||
if spec is not None:
|
||||
_kwargs['spec'] = spec
|
||||
if spec_set is not None:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue