63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
""" deprecated module for turning on/off some features. """
|
||
|
|
||
|
import py
|
||
|
|
||
|
from py.builtin import builtins as cpy_builtin
|
||
|
|
||
|
def invoke(assertion=False, compile=False):
|
||
|
""" (deprecated) invoke magic, currently you can specify:
|
||
|
|
||
|
assertion patches the builtin AssertionError to try to give
|
||
|
more meaningful AssertionErrors, which by means
|
||
|
of deploying a mini-interpreter constructs
|
||
|
a useful error message.
|
||
|
"""
|
||
|
py.log._apiwarn("1.1",
|
||
|
"py.magic.invoke() is deprecated, use py.code.patch_builtins()",
|
||
|
stacklevel=2,
|
||
|
)
|
||
|
py.code.patch_builtins(assertion=assertion, compile=compile)
|
||
|
|
||
|
def revoke(assertion=False, compile=False):
|
||
|
""" (deprecated) revoke previously invoked magic (see invoke())."""
|
||
|
py.log._apiwarn("1.1",
|
||
|
"py.magic.revoke() is deprecated, use py.code.unpatch_builtins()",
|
||
|
stacklevel=2,
|
||
|
)
|
||
|
py.code.unpatch_builtins(assertion=assertion, compile=compile)
|
||
|
|
||
|
patched = {}
|
||
|
|
||
|
def patch(namespace, name, value):
|
||
|
""" (deprecated) rebind the 'name' on the 'namespace' to the 'value',
|
||
|
possibly and remember the original value. Multiple
|
||
|
invocations to the same namespace/name pair will
|
||
|
remember a list of old values.
|
||
|
"""
|
||
|
py.log._apiwarn("1.1",
|
||
|
"py.magic.patch() is deprecated, in tests use monkeypatch funcarg.",
|
||
|
stacklevel=2,
|
||
|
)
|
||
|
nref = (namespace, name)
|
||
|
orig = getattr(namespace, name)
|
||
|
patched.setdefault(nref, []).append(orig)
|
||
|
setattr(namespace, name, value)
|
||
|
return orig
|
||
|
|
||
|
def revert(namespace, name):
|
||
|
""" (deprecated) revert to the orginal value the last patch modified.
|
||
|
Raise ValueError if no such original value exists.
|
||
|
"""
|
||
|
py.log._apiwarn("1.1",
|
||
|
"py.magic.revert() is deprecated, in tests use monkeypatch funcarg.",
|
||
|
stacklevel=2,
|
||
|
)
|
||
|
nref = (namespace, name)
|
||
|
if nref not in patched or not patched[nref]:
|
||
|
raise ValueError("No original value stored for %s.%s" % nref)
|
||
|
current = getattr(namespace, name)
|
||
|
orig = patched[nref].pop()
|
||
|
setattr(namespace, name, orig)
|
||
|
return current
|
||
|
|