a
    xd                     @   s`   d Z ddlmZ ddlmZ er8ddlmZ ddlmZ dZdZ	ee	fdd	Z
ee	fd
d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              	   C   sd   |D ]2}zt ||}W n ty(   Y q0 t| || q|D ]}t | |t ||i  q<|| _| S )a  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)
    )getattrAttributeErrorsetattrupdate__wrapped__)wrapperwrappedassignedupdatedattrvalue r   M/var/www/html/Ranjet/env/lib/python3.9/site-packages/sentry_sdk/_functools.pyupdate_wrapper   s    r   c                 C   s   t t| ||d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().
    r   r   r   )r   r   r   r   r   r   wraps8   s    
r   N)r	   	functoolsr   Zsentry_sdk._typesr   typingr   r   WRAPPER_ASSIGNMENTSWRAPPER_UPDATESr   r   r   r   r   r   <module>   s   
