mf^dZddlmZddlmZer ddlmZddlmZdZdZ ee fdZ ee fd Z d S) z A backport of Python 3 functools to Python 2/3. The only important change we rely upon is that `update_wrapper` handles AttributeError gracefully. )partial)MYPY)Any)Callable) __module____name__ __qualname____doc____annotations__)__dict__c|D]4} t||}t|||%#t$rY1wxYw|D]4}t||t||i5||_|S)aUpdate 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) )getattrsetattrAttributeErrorupdate __wrapped__)wrapperwrappedassignedupdatedattrvalues L/opt/imunify360/venv/lib64/python3.11/site-packages/sentry_sdk/_functools.pyupdate_wrapperrs** *GT**E GT5 ) ) ) )    D BB%%ggtR&@&@AAAA"G Ns ( 55c2tt|||S)a|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(). rrr)rrrs rwrapsr8s >7Xw W W WWN) r functoolsrsentry_sdk._typesrtypingrrWRAPPER_ASSIGNMENTSWRAPPER_UPDATESrrrrr%s """"""   3O>0 X X X X X Xr