a
    !fUS                     @   sD  d Z ddlZejd dkZer0efZdddZnefZddlZe	edZ[ddl
mZ ddlmZ dd	lmZmZ d
dlmZ zddlmZ W n ey   Y n0 d
dlmZmZmZmZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ e Z!dddefddZ"dd Z#e e#_$dS )zoThis module implements decorators for implementing other decorators
as well as some commonly used decorators.

    N   c                 C   sB   |du r*t d}|j}|du r&|j}~n|du r6|}td dS )zExecute code in a namespace.N   zexec _code_ in _globs_, _locs_)sys	_getframe	f_globalsf_localsexec)Z_code_Z_globs_Z_locs_frame r
   Q/var/www/html/python-backend/venv/lib/python3.9/site-packages/wrapt/decorators.pyexec_   s    
r   r   )partial)isclass)LockRLockr   )formatargspec)	signature)FunctionWrapperBoundFunctionWrapperObjectProxyCallableObjectProxyc                       sX   e Zd Z fddZedd Zedd Zedd Zed	d
 Zedd Z	  Z
S )_AdapterFunctionCodec                    s   t t| | || _d S N)superr   __init___self_adapter_code)selfZwrapped_codeZadapter_code	__class__r
   r   r   7   s    z_AdapterFunctionCode.__init__c                 C   s   | j jS r   )r   co_argcountr   r
   r
   r   r   ;   s    z _AdapterFunctionCode.co_argcountc                 C   s   | j jS r   )r   co_coder    r
   r
   r   r!   ?   s    z_AdapterFunctionCode.co_codec                 C   s   | j jS r   )r   co_flagsr    r
   r
   r   r"   C   s    z_AdapterFunctionCode.co_flagsc                 C   s   | j jS r   )r   co_kwonlyargcountr    r
   r
   r   r#   G   s    z&_AdapterFunctionCode.co_kwonlyargcountc                 C   s   | j jS r   )r   co_varnamesr    r
   r
   r   r$   K   s    z _AdapterFunctionCode.co_varnames)__name__
__module____qualname__r   propertyr   r!   r"   r#   r$   __classcell__r
   r
   r   r   r   5   s   



r   c                       sX   e Zd Z fddZedd Zedd Zedd Zed	d
 Ze	rPeZ
eZ  ZS )_AdapterFunctionSurrogatec                    s   t t| | || _d S r   )r   r*   r   _self_adapter)r   wrappedadapterr   r
   r   r   Q   s    z"_AdapterFunctionSurrogate.__init__c                 C   s   t | jj| jjS r   )r   __wrapped____code__r+   r    r
   r
   r   r/   U   s    z"_AdapterFunctionSurrogate.__code__c                 C   s   | j jS r   )r+   __defaults__r    r
   r
   r   r0   Z   s    z&_AdapterFunctionSurrogate.__defaults__c                 C   s   | j jS r   )r+   __kwdefaults__r    r
   r
   r   r1   ^   s    z(_AdapterFunctionSurrogate.__kwdefaults__c                 C   s    dt  vr| jjS t| jS d S Nr   )globalsr+   __signature__r   r    r
   r
   r   r4   b   s    
z'_AdapterFunctionSurrogate.__signature__)r%   r&   r'   r   r(   r/   r0   r1   r4   PY2	func_codefunc_defaultsr)   r
   r
   r   r   r*   O   s   



r*   c                   @   s,   e Zd Zedd Zedd Zer(eZdS )_BoundAdapterWrapperc                 C   s   t | jj| jjS r   )r*   r.   __func___self_parentr+   r    r
   r
   r   r9   o   s    z_BoundAdapterWrapper.__func__c                 C   s"   dt  vr| jjS t| jjS d S r2   )r3   r.   r4   r   r:   r+   r    r
   r
   r   r4   t   s    
z"_BoundAdapterWrapper.__signature__N)r%   r&   r'   r(   r9   r4   r5   Zim_funcr
   r
   r
   r   r8   m   s   

r8   c                       s\   e Zd ZeZ fddZedd Zedd Zedd Z	e
rHeZeZed	d
 Z  ZS )AdapterWrapperc                    s8   | d}tt| j|i | t| j|| _|| _d S )Nr-   )popr   r;   r   r*   r.   _self_surrogater+   )r   argskwargsr-   r   r
   r   r      s    
zAdapterWrapper.__init__c                 C   s   | j jS r   )r=   r/   r    r
   r
   r   r/      s    zAdapterWrapper.__code__c                 C   s   | j jS r   )r=   r0   r    r
   r
   r   r0      s    zAdapterWrapper.__defaults__c                 C   s   | j jS r   )r=   r1   r    r
   r
   r   r1      s    zAdapterWrapper.__kwdefaults__c                 C   s   | j jS r   )r=   r4   r    r
   r
   r   r4      s    zAdapterWrapper.__signature__)r%   r&   r'   r8   Z__bound_function_wrapper__r   r(   r/   r0   r1   r5   r6   r7   r4   r)   r
   r
   r   r   r;   ~   s   


r;   c                   @   s   e Zd Zdd ZdS )AdapterFactoryc                 C   s
   t  d S r   )NotImplementedErrorr   r,   r
   r
   r   __call__   s    zAdapterFactory.__call__N)r%   r&   r'   rC   r
   r
   r
   r   r@      s   r@   c                       s$   e Zd Z fddZdd Z  ZS )DelegatedAdapterFactoryc                    s   t t|   || _d S r   )r   rD   r   factory)r   rE   r   r
   r   r      s    z DelegatedAdapterFactory.__init__c                 C   s
   |  |S r   )rE   rB   r
   r
   r   rC      s    z DelegatedAdapterFactory.__call__)r%   r&   r'   r   rC   r)   r
   r
   r   r   rD      s   rD   c                    sJ   d ur6dfdd	  fdd} |t dS tt dS d S )Nc                    s   |rt |tr|| }t|s|i }i }t |tsXt|dkrP|d }|d d }t| }td||| |d }|r|||_t	| |||dS  | ||dS )N   zdef adapter{}: passr-   )r,   wrapperenabledr-   )r,   rH   rI   )

isinstancer@   callablestring_typeslenr   r   format__annotations__r;   )r,   rH   rI   r-   nsannotations)proxyr
   r   _build   s&    


zdecorator.<locals>._buildc                    s   |d u r,t r,|s, fdd}|S |d }}t|tu rP|sL|S d }|d u rnt rh }q}n&t |rd |}n|t|}|||S )Nc                    s8   }t |tu r|s| S d }f i } | ||S r   )typebool)target_wrapped_enabledtarget_wrapper)rS   r-   rI   r?   r,   r
   r   _capture  s    z-decorator.<locals>._wrapper.<locals>._capturer   )r   rT   rU   __get__)r,   instancer>   r?   rY   rV   rW   rX   )rS   r-   rI   rH   )r?   r,   r   _wrapper   s"    zdecorator.<locals>._wrapper)r-   )rI   r-   rR   )NN)	decoratorr   )rH   rI   r-   rR   r\   r
   )rS   r-   rI   rR   rH   r   r]      s    . 1r]   c                    sz   t | drFt | drF| tfdd}G fdddt}||dS dd	   fd
d}G  fdddt}|| |dS )Nacquirereleasec                    s6     | |i |W  d    S 1 s(0    Y  d S r   r
   r,   r[   r>   r?   lockr
   r   _synchronized  s    z#synchronized.<locals>._synchronizedc                       s$   e Zd Z fddZ fddZdS )z'synchronized.<locals>._PartialDecoratorc                    s        S r   )r^   r    ra   r
   r   	__enter__  s    z1synchronized.<locals>._PartialDecorator.__enter__c                    s       d S r   )r_   r   r>   ra   r
   r   __exit__  s    z0synchronized.<locals>._PartialDecorator.__exit__Nr%   r&   r'   rd   rf   r
   ra   r
   r   _PartialDecorator  s   rh   )r,   c                 S   sl   t | dd }|d u rhtj: t | dd }|d u rJt }t| d| W d    n1 s^0    Y  |S )N_synchronized_lock)varsgetsynchronized_synchronized_meta_lockr   setattr)contextrb   r
   r
   r   ri     s    *z(synchronized.<locals>._synchronized_lockc                    sF    |d ur|n|  | |i |W  d    S 1 s80    Y  d S r   r
   r`   ri   r
   r   _synchronized_wrapper	  s    z+synchronized.<locals>._synchronized_wrapperc                       s    e Zd Z fddZdd ZdS )z%synchronized.<locals>._FinalDecoratorc                    s    | j | _| j  | jS r   )r.   
_self_lockr^   r    rp   r
   r   rd     s    
z/synchronized.<locals>._FinalDecorator.__enter__c                 W   s   | j   d S r   )rr   r_   re   r
   r
   r   rf     s    z.synchronized.<locals>._FinalDecorator.__exit__Nrg   r
   rp   r
   r   _FinalDecorator  s   rs   )r,   rH   )hasattrr]   r   r   )r,   rc   rh   rq   rs   r
   )ri   rb   r   rl     s    	
 
rl   )NN)%__doc__r   version_infor5   
basestringrL   r   strbuiltinsgetattr	functoolsr   inspectr   	threadingr   r   	argumentsr   r   ImportErrorZ	__wrapt__r   r   r   r   r   r*   r8   r;   objectr@   rD   Zadapter_factoryr]   rl   rm   r
   r
   r
   r   <module>   s<   
		  ]