U
    $gfUS                     @   sF  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k
r   Y nX 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kr*t d}|j}|dkr&|j}~n|dk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
   S/home/ankuromar296_gmail_com/.local/lib/python3.8/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  k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  k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                    s4   | d}tt| j|| 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 k	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 kr,t r,|s, fdd}|S |d }}t|tkrP|sL|S d }|d krnt rh }q}n&t |rd |}n|t|}|||S )Nc                    s4   }t |tkr|s| S d }f } | ||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              
      s&     | ||W  5 Q R  S Q R X 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   sX   t | dd }|d krTtj0 t | dd }|d krJt }t| d| W 5 Q R X |S )N_synchronized_lock)varsgetsynchronized_synchronized_meta_lockr   setattr)contextrb   r
   r
   r   ri     s    z(synchronized.<locals>._synchronized_lockc              
      s6    |d k	r|n|  | ||W  5 Q R  S Q R X 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<   
		  ]