Refactoring doctests
This commit is contained in:
parent
3c9b46f781
commit
bf39e89946
|
@ -364,30 +364,27 @@ def _patch_unwrap_mock_aware():
|
||||||
contextmanager which replaces ``inspect.unwrap`` with a version
|
contextmanager which replaces ``inspect.unwrap`` with a version
|
||||||
that's aware of mock objects and doesn't recurse on them
|
that's aware of mock objects and doesn't recurse on them
|
||||||
"""
|
"""
|
||||||
real_unwrap = getattr(inspect, "unwrap", None)
|
real_unwrap = inspect.unwrap
|
||||||
if real_unwrap is None:
|
|
||||||
yield
|
|
||||||
else:
|
|
||||||
|
|
||||||
def _mock_aware_unwrap(obj, stop=None):
|
def _mock_aware_unwrap(obj, stop=None):
|
||||||
try:
|
|
||||||
if stop is None or stop is _is_mocked:
|
|
||||||
return real_unwrap(obj, stop=_is_mocked)
|
|
||||||
return real_unwrap(obj, stop=lambda obj: _is_mocked(obj) or stop(obj))
|
|
||||||
except Exception as e:
|
|
||||||
warnings.warn(
|
|
||||||
"Got %r when unwrapping %r. This is usually caused "
|
|
||||||
"by a violation of Python's object protocol; see e.g. "
|
|
||||||
"https://github.com/pytest-dev/pytest/issues/5080" % (e, obj),
|
|
||||||
PytestWarning,
|
|
||||||
)
|
|
||||||
raise
|
|
||||||
|
|
||||||
inspect.unwrap = _mock_aware_unwrap
|
|
||||||
try:
|
try:
|
||||||
yield
|
if stop is None or stop is _is_mocked:
|
||||||
finally:
|
return real_unwrap(obj, stop=_is_mocked)
|
||||||
inspect.unwrap = real_unwrap
|
return real_unwrap(obj, stop=lambda obj: _is_mocked(obj) or stop(obj))
|
||||||
|
except Exception as e:
|
||||||
|
warnings.warn(
|
||||||
|
"Got %r when unwrapping %r. This is usually caused "
|
||||||
|
"by a violation of Python's object protocol; see e.g. "
|
||||||
|
"https://github.com/pytest-dev/pytest/issues/5080" % (e, obj),
|
||||||
|
PytestWarning,
|
||||||
|
)
|
||||||
|
raise
|
||||||
|
|
||||||
|
inspect.unwrap = _mock_aware_unwrap
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
inspect.unwrap = real_unwrap
|
||||||
|
|
||||||
|
|
||||||
class DoctestModule(pytest.Module):
|
class DoctestModule(pytest.Module):
|
||||||
|
|
Loading…
Reference in New Issue