Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/sentry_sdk/_functools.py: 81%
20 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1"""
2A backport of Python 3 functools to Python 2/3. The only important change
3we rely upon is that `update_wrapper` handles AttributeError gracefully.
4"""
6from functools import partial
8from sentry_sdk._types import MYPY
10if MYPY: 10 ↛ 11line 10 didn't jump to line 11, because the condition on line 10 was never true
11 from typing import Any
12 from typing import Callable
15WRAPPER_ASSIGNMENTS = (
16 "__module__",
17 "__name__",
18 "__qualname__",
19 "__doc__",
20 "__annotations__",
21)
22WRAPPER_UPDATES = ("__dict__",)
25def update_wrapper(
26 wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES
27):
28 # type: (Any, Any, Any, Any) -> Any
29 """Update a wrapper function to look like the wrapped function
31 wrapper is the function to be updated
32 wrapped is the original function
33 assigned is a tuple naming the attributes assigned directly
34 from the wrapped function to the wrapper function (defaults to
35 functools.WRAPPER_ASSIGNMENTS)
36 updated is a tuple naming the attributes of the wrapper that
37 are updated with the corresponding attribute from the wrapped
38 function (defaults to functools.WRAPPER_UPDATES)
39 """
40 for attr in assigned:
41 try:
42 value = getattr(wrapped, attr)
43 except AttributeError:
44 pass
45 else:
46 setattr(wrapper, attr, value)
47 for attr in updated:
48 getattr(wrapper, attr).update(getattr(wrapped, attr, {}))
49 # Issue #17482: set __wrapped__ last so we don't inadvertently copy it
50 # from the wrapped function when updating __dict__
51 wrapper.__wrapped__ = wrapped
52 # Return the wrapper so this can be used as a decorator via partial()
53 return wrapper
56def wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES):
57 # type: (Callable[..., Any], Any, Any) -> Callable[[Callable[..., Any]], Callable[..., Any]]
58 """Decorator factory to apply update_wrapper() to a wrapper function
60 Returns a decorator that invokes update_wrapper() with the decorated
61 function as the wrapper argument and the arguments to wraps() as the
62 remaining arguments. Default arguments are as for update_wrapper().
63 This is a convenience function to simplify applying partial() to
64 update_wrapper().
65 """
66 return partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)