Python inspect.unwrap() Examples
The following are 30
code examples of inspect.unwrap().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
inspect
, or try the search function
.
Example #1
Source File: sphinx_autodoc_typehints.py From instaloader with MIT License | 6 votes |
def unwrap(func, *, stop=None): """This is the inspect.unwrap() method copied from Python 3.5's standard library.""" if stop is None: def _is_wrapper(f): return hasattr(f, '__wrapped__') else: def _is_wrapper(f): return hasattr(f, '__wrapped__') and not stop(f) f = func # remember the original func for error reporting memo = {id(f)} # Memoise by id to tolerate non-hashable objects while _is_wrapper(func): func = func.__wrapped__ id_func = id(func) if id_func in memo: raise ValueError('wrapper loop when unwrapping {!r}'.format(f)) memo.add(id_func) return func
Example #2
Source File: base.py From Hands-On-Application-Development-with-PyCharm with MIT License | 6 votes |
def args_check(name, func, provided): provided = list(provided) # First argument, filter input, is implied. plen = len(provided) + 1 # Check to see if a decorator is providing the real function. func = unwrap(func) args, _, _, defaults, _, _, _ = getfullargspec(func) alen = len(args) dlen = len(defaults or []) # Not enough OR Too many if plen < (alen - dlen) or plen > alen: raise TemplateSyntaxError("%s requires %d arguments, %d provided" % (name, alen - dlen, plen)) return True
Example #3
Source File: events.py From annotated-py-projects with MIT License | 6 votes |
def _get_function_source(func): if _PY34: func = inspect.unwrap(func) elif hasattr(func, '__wrapped__'): func = func.__wrapped__ if inspect.isfunction(func): code = func.__code__ return (code.co_filename, code.co_firstlineno) if isinstance(func, functools.partial): return _get_function_source(func.func) if _PY34 and isinstance(func, functools.partialmethod): return _get_function_source(func.func) return None
Example #4
Source File: compat.py From python-interface with Apache License 2.0 | 6 votes |
def unwrap(func, stop=None): # NOTE: implementation is taken from CPython/Lib/inspect.py, Python 3.6 if stop is None: def _is_wrapper(f): return hasattr(f, "__wrapped__") else: def _is_wrapper(f): return hasattr(f, "__wrapped__") and not stop(f) f = func # remember the original func for error reporting memo = {id(f)} # Memoise by id to tolerate non-hashable objects while _is_wrapper(func): func = func.__wrapped__ id_func = id(func) if id_func in memo: raise ValueError("wrapper loop when unwrapping {!r}".format(f)) memo.add(id_func) return func
Example #5
Source File: autohint.py From whalesong with MIT License | 6 votes |
def unwrap(func, *, stop=None): """This is the inspect.unwrap() method copied from Python 3.5's standard library.""" if stop is None: def _is_wrapper(f): return hasattr(f, '__wrapped__') else: def _is_wrapper(f): return hasattr(f, '__wrapped__') and not stop(f) f = func # remember the original func for error reporting memo = {id(f)} # Memoise by id to tolerate non-hashable objects while _is_wrapper(func): func = func.__wrapped__ id_func = id(func) if id_func in memo: raise ValueError('wrapper loop when unwrapping {!r}'.format(f)) memo.add(id_func) return func
Example #6
Source File: test_inspect.py From ironpython3 with Apache License 2.0 | 5 votes |
def test_cycle(self): def func1(): pass func1.__wrapped__ = func1 with self.assertRaisesRegex(ValueError, 'wrapper loop'): inspect.unwrap(func1) def func2(): pass func2.__wrapped__ = func1 func1.__wrapped__ = func2 with self.assertRaisesRegex(ValueError, 'wrapper loop'): inspect.unwrap(func1) with self.assertRaisesRegex(ValueError, 'wrapper loop'): inspect.unwrap(func2)
Example #7
Source File: format_helpers.py From android_universal with MIT License | 5 votes |
def _get_function_source(func): func = inspect.unwrap(func) if inspect.isfunction(func): code = func.__code__ return (code.co_filename, code.co_firstlineno) if isinstance(func, functools.partial): return _get_function_source(func.func) if isinstance(func, functools.partialmethod): return _get_function_source(func.func) return None
Example #8
Source File: _builders.py From tornado-swagger with MIT License | 5 votes |
def _try_extract_doc(func): return inspect.unwrap(func).__doc__
Example #9
Source File: _builders.py From tornado-swagger with MIT License | 5 votes |
def _try_extract_args(method_handler): return inspect.getfullargspec(inspect.unwrap(method_handler)).args[1:]
Example #10
Source File: conf.py From tree with Apache License 2.0 | 5 votes |
def linkcode_resolve(domain, info): """Resolve a GitHub URL corresponding to Python object.""" if domain != 'py': return None try: mod = sys.modules[info['module']] except ImportError: return None obj = mod try: for attr in info['fullname'].split('.'): obj = getattr(obj, attr) except AttributeError: return None else: obj = inspect.unwrap(obj) try: filename = inspect.getsourcefile(obj) except TypeError: return None try: source, lineno = inspect.getsourcelines(obj) except OSError: return None # TODO(slebedev): support tags after we release an initial version. return 'https://github.com/deepmind/tree/blob/master/tree/%s#L%d#L%d' % ( os.path.relpath(filename, start=os.path.dirname( tree.__file__)), lineno, lineno + len(source) - 1)
Example #11
Source File: events.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def _get_function_source(func): if compat.PY34: func = inspect.unwrap(func) elif hasattr(func, '__wrapped__'): func = func.__wrapped__ if inspect.isfunction(func): code = func.__code__ return (code.co_filename, code.co_firstlineno) if isinstance(func, functools.partial): return _get_function_source(func.func) if compat.PY34 and isinstance(func, functools.partialmethod): return _get_function_source(func.func) return None
Example #12
Source File: test_inspect.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_unwrap_one(self): def func(a, b): return a + b wrapper = functools.lru_cache(maxsize=20)(func) self.assertIs(inspect.unwrap(wrapper), func)
Example #13
Source File: test_inspect.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_unwrap_several(self): def func(a, b): return a + b wrapper = func for __ in range(10): @functools.wraps(wrapper) def wrapper(): pass self.assertIsNot(wrapper.__wrapped__, func) self.assertIs(inspect.unwrap(wrapper), func)
Example #14
Source File: test_inspect.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_stop(self): def func1(a, b): return a + b @functools.wraps(func1) def func2(): pass @functools.wraps(func2) def wrapper(): pass func2.stop_here = 1 unwrapped = inspect.unwrap(wrapper, stop=(lambda f: hasattr(f, "stop_here"))) self.assertIs(unwrapped, func2)
Example #15
Source File: test_inspect.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_cycle(self): def func1(): pass func1.__wrapped__ = func1 with self.assertRaisesRegex(ValueError, 'wrapper loop'): inspect.unwrap(func1) def func2(): pass func2.__wrapped__ = func1 func1.__wrapped__ = func2 with self.assertRaisesRegex(ValueError, 'wrapper loop'): inspect.unwrap(func1) with self.assertRaisesRegex(ValueError, 'wrapper loop'): inspect.unwrap(func2)
Example #16
Source File: autohint.py From whalesong with MIT License | 5 votes |
def process_signature(app, what: str, name: str, obj, options, signature, return_annotation): if not callable(obj): return if what in ('class', 'exception'): obj = getattr(obj, '__init__', getattr(obj, '__new__', None)) if not getattr(obj, '__annotations__', None): return obj = unwrap(obj) try: argspec = getargspec(obj) except (TypeError, ValueError): return if argspec.args: if what in ('class', 'exception'): del argspec.args[0] elif what == 'method': outer = inspect.getmodule(obj) for clsname in obj.__qualname__.split('.')[:-1]: outer = getattr(outer, clsname) method_object = outer.__dict__[obj.__name__] if not isinstance(method_object, (classmethod, staticmethod)): del argspec.args[0] return formatargspec(obj, *argspec[:-1]), None
Example #17
Source File: testing.py From ward with MIT License | 5 votes |
def is_async_test(self) -> bool: return inspect.iscoroutinefunction(inspect.unwrap(self.fn))
Example #18
Source File: testing.py From ward with MIT License | 5 votes |
def test(description: str, *args, tags=None, **kwargs): def decorator_test(func): unwrapped = inspect.unwrap(func) module_name: str = unwrapped.__module__ is_home_module: bool = "." not in module_name if is_test_module_name(module_name) and is_home_module: force_path: Path = kwargs.get("_force_path") if force_path: path = force_path.absolute() else: path = get_absolute_path(unwrapped) if hasattr(unwrapped, "ward_meta"): unwrapped.ward_meta.description = description unwrapped.ward_meta.tags = tags unwrapped.ward_meta.path = path else: unwrapped.ward_meta = WardMeta( description=description, tags=tags, path=path, ) collect_into = kwargs.get("_collect_into", anonymous_tests) collect_into[path].append(unwrapped) @functools.wraps(func) def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper return func return decorator_test
Example #19
Source File: format_helpers.py From odoo13-x64 with GNU General Public License v3.0 | 5 votes |
def _get_function_source(func): func = inspect.unwrap(func) if inspect.isfunction(func): code = func.__code__ return (code.co_filename, code.co_firstlineno) if isinstance(func, functools.partial): return _get_function_source(func.func) if isinstance(func, functools.partialmethod): return _get_function_source(func.func) return None
Example #20
Source File: __init__.py From pdoc with GNU Affero General Public License v3.0 | 5 votes |
def _is_async(self): """ Returns whether is function is asynchronous, either as a coroutine or an async generator. """ try: # Both of these are required because coroutines aren't classified as async # generators and vice versa. obj = inspect.unwrap(self.obj) return (inspect.iscoroutinefunction(obj) or inspect.isasyncgenfunction(obj)) except AttributeError: return False
Example #21
Source File: format_helpers.py From Carnets with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _get_function_source(func): func = inspect.unwrap(func) if inspect.isfunction(func): code = func.__code__ return (code.co_filename, code.co_firstlineno) if isinstance(func, functools.partial): return _get_function_source(func.func) if isinstance(func, functools.partialmethod): return _get_function_source(func.func) return None
Example #22
Source File: test_inspect.py From ironpython3 with Apache License 2.0 | 5 votes |
def test_unwrap_several(self): def func(a, b): return a + b wrapper = func for __ in range(10): @functools.wraps(wrapper) def wrapper(): pass self.assertIsNot(wrapper.__wrapped__, func) self.assertIs(inspect.unwrap(wrapper), func)
Example #23
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _get_position_of_obj(self, obj, quiet=False): if hasattr(inspect, "unwrap"): obj = inspect.unwrap(obj) if isinstance(obj, str): return obj, 1, None try: filename = inspect.getabsfile(obj) lines, lineno = inspect.getsourcelines(obj) except (IOError, TypeError) as e: if not quiet: print('** Error: %s **' % e, file=self.stdout) return None, None, None return filename, lineno, lines
Example #24
Source File: doctest.py From python-netsurv with MIT License | 5 votes |
def _patch_unwrap_mock_aware(): """ contextmanager which replaces ``inspect.unwrap`` with a version that's aware of mock objects and doesn't recurse on them """ real_unwrap = inspect.unwrap 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: yield finally: inspect.unwrap = real_unwrap
Example #25
Source File: doctest.py From python-netsurv with MIT License | 5 votes |
def _patch_unwrap_mock_aware(): """ contextmanager which replaces ``inspect.unwrap`` with a version that's aware of mock objects and doesn't recurse on them """ real_unwrap = inspect.unwrap 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: yield finally: inspect.unwrap = real_unwrap
Example #26
Source File: doctest.py From pytest with MIT License | 5 votes |
def _patch_unwrap_mock_aware() -> Generator[None, None, None]: """ contextmanager which replaces ``inspect.unwrap`` with a version that's aware of mock objects and doesn't recurse on them """ real_unwrap = inspect.unwrap def _mock_aware_unwrap( func: Callable[..., Any], *, stop: Optional[Callable[[Any], Any]] = None ) -> Any: try: if stop is None or stop is _is_mocked: return real_unwrap(func, stop=_is_mocked) _stop = stop return real_unwrap(func, stop=lambda obj: _is_mocked(obj) or _stop(func)) 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, func), PytestWarning, ) raise inspect.unwrap = _mock_aware_unwrap try: yield finally: inspect.unwrap = real_unwrap
Example #27
Source File: test_doctest.py From pytest with MIT License | 5 votes |
def test_warning_on_unwrap_of_broken_object( stop: Optional[Callable[[object], object]] ) -> None: bad_instance = Broken() assert inspect.unwrap.__module__ == "inspect" with _patch_unwrap_mock_aware(): assert inspect.unwrap.__module__ != "inspect" with pytest.warns( pytest.PytestWarning, match="^Got KeyError.* when unwrapping" ): with pytest.raises(KeyError): inspect.unwrap(bad_instance, stop=stop) # type: ignore[arg-type] # noqa: F821 assert inspect.unwrap.__module__ == "inspect"
Example #28
Source File: events.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def _get_function_source(func): if compat.PY34: func = inspect.unwrap(func) elif hasattr(func, '__wrapped__'): func = func.__wrapped__ if inspect.isfunction(func): code = func.__code__ return (code.co_filename, code.co_firstlineno) if isinstance(func, functools.partial): return _get_function_source(func.func) if compat.PY34 and isinstance(func, functools.partialmethod): return _get_function_source(func.func) return None
Example #29
Source File: test_inspect.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_unwrap_one(self): def func(a, b): return a + b wrapper = functools.lru_cache(maxsize=20)(func) self.assertIs(inspect.unwrap(wrapper), func)
Example #30
Source File: test_inspect.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def test_stop(self): def func1(a, b): return a + b @functools.wraps(func1) def func2(): pass @functools.wraps(func2) def wrapper(): pass func2.stop_here = 1 unwrapped = inspect.unwrap(wrapper, stop=(lambda f: hasattr(f, "stop_here"))) self.assertIs(unwrapped, func2)