""" A backport of Python 3 functools to Python 2/3. The only important change we rely upon is that `update_wrapper` handles AttributeError gracefully. """ from functools import partial from sentry_sdk._types import MYPY if MYPY: from typing import Any from typing import Callable WRAPPER_ASSIGNMENTS = ( "__module__", "__name__", "__qualname__", "__doc__", "__annotations__", ) WRAPPER_UPDATES = ("__dict__",) def update_wrapper( wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES ): # type: (Any, Any, Any, Any) -> Any """Update a wrapper function to look like the wrapped function wrapper is the function to be updated wrapped is the original function assigned is a tuple naming the attributes assigned directly from the wrapped function to the wrapper function (defaults to functools.WRAPPER_ASSIGNMENTS) updated is a tuple naming the attributes of the wrapper that are updated with the corresponding attribute from the wrapped function (defaults to functools.WRAPPER_UPDATES) """ for attr in assigned: try: value = getattr(wrapped, attr) except AttributeError: pass else: setattr(wrapper, attr, value) for attr in updated: getattr(wrapper, attr).update(getattr(wrapped, attr, {})) # Issue #17482: set __wrapped__ last so we don't inadvertently copy it # from the wrapped function when updating __dict__ wrapper.__wrapped__ = wrapped # Return the wrapper so this can be used as a decorator via partial() return wrapper def wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES): # type: (Callable[..., Any], Any, Any) -> Callable[[Callable[..., Any]], Callable[..., Any]] """Decorator factory to apply update_wrapper() to a wrapper function Returns a decorator that invokes update_wrapper() with the decorated function as the wrapper argument and the arguments to wraps() as the remaining arguments. Default arguments are as for update_wrapper(). This is a convenience function to simplify applying partial() to update_wrapper(). """ return partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
integrations | Folder | 0755 |
|
|
__init__.py | File | 854 B | 0644 |
|
_compat.py | File | 2.3 KB | 0644 |
|
_functools.py | File | 2.22 KB | 0644 |
|
_queue.py | File | 8.21 KB | 0644 |
|
_types.py | File | 1.26 KB | 0644 |
|
api.py | File | 4.69 KB | 0644 |
|
attachments.py | File | 1.75 KB | 0644 |
|
client.py | File | 14.03 KB | 0644 |
|
consts.py | File | 3.5 KB | 0644 |
|
debug.py | File | 1.11 KB | 0644 |
|
envelope.py | File | 8.17 KB | 0644 |
|
hub.py | File | 21.35 KB | 0644 |
|
py.typed | File | 0 B | 0644 |
|
scope.py | File | 15.62 KB | 0644 |
|
serializer.py | File | 15.92 KB | 0644 |
|
sessions.py | File | 7.67 KB | 0644 |
|
tracing.py | File | 25.24 KB | 0644 |
|
transport.py | File | 11.48 KB | 0644 |
|
utils.py | File | 26.26 KB | 0644 |
|
worker.py | File | 3.87 KB | 0644 |
|