o
    ;hUS                     @   sD  d Z ddlZejd dkZere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yP   Y nw 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 r|}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
   C/var/www/html/venv/lib/python3.10/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                       t t| | || _d S N)superr   __init___self_adapter_code)selfZwrapped_codeZadapter_code	__class__r
   r   r   7      
z_AdapterFunctionCode.__init__c                 C      | j jS r   )r   co_argcountr   r
   r
   r   r"   ;      z _AdapterFunctionCode.co_argcountc                 C   r!   r   )r   co_coder#   r
   r
   r   r%   ?   r$   z_AdapterFunctionCode.co_codec                 C   r!   r   )r   co_flagsr#   r
   r
   r   r&   C   r$   z_AdapterFunctionCode.co_flagsc                 C   r!   r   )r   co_kwonlyargcountr#   r
   r
   r   r'   G   r$   z&_AdapterFunctionCode.co_kwonlyargcountc                 C   r!   r   )r   co_varnamesr#   r
   r
   r   r(   K   r$   z _AdapterFunctionCode.co_varnames)__name__
__module____qualname__r   propertyr"   r%   r&   r'   r(   __classcell__r
   r
   r   r   r   5   s    



r   c                       s`   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	r,eZ
eZ  ZS   ZS )_AdapterFunctionSurrogatec                    r   r   )r   r.   r   _self_adapter)r   wrappedadapterr   r
   r   r   Q   r    z"_AdapterFunctionSurrogate.__init__c                 C   s   t | jj| jjS r   )r   __wrapped____code__r/   r#   r
   r
   r   r3   U      z"_AdapterFunctionSurrogate.__code__c                 C   r!   r   )r/   __defaults__r#   r
   r
   r   r5   Z   r$   z&_AdapterFunctionSurrogate.__defaults__c                 C   r!   r   )r/   __kwdefaults__r#   r
   r
   r   r6   ^   r$   z(_AdapterFunctionSurrogate.__kwdefaults__c                 C   s   dt  vr	| jjS t| jS Nr   )globalsr/   __signature__r   r#   r
   r
   r   r9   b   s   

z'_AdapterFunctionSurrogate.__signature__)r)   r*   r+   r   r,   r3   r5   r6   r9   PY2	func_codefunc_defaultsr-   r
   r
   r   r   r.   O   s    



r.   c                   @   s0   e Zd Zedd Zedd ZereZdS dS )_BoundAdapterWrapperc                 C   s   t | jj| jjS r   )r.   r2   __func___self_parentr/   r#   r
   r
   r   r>   o   r4   z_BoundAdapterWrapper.__func__c                 C   s   dt  vr	| jjS t| jjS r7   )r8   r2   r9   r   r?   r/   r#   r
   r
   r   r9   t   s   
z"_BoundAdapterWrapper.__signature__N)r)   r*   r+   r,   r>   r9   r:   Zim_funcr
   r
   r
   r   r=   m   s    

r=   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
r$eZeZed	d
 Z  ZS )AdapterWrapperc                    s8   | d}tt| j|i | t| j|| _|| _d S )Nr1   )popr   r@   r   r.   r2   _self_surrogater/   )r   argskwargsr1   r   r
   r   r      s   

zAdapterWrapper.__init__c                 C   r!   r   )rB   r3   r#   r
   r
   r   r3      r$   zAdapterWrapper.__code__c                 C   r!   r   )rB   r5   r#   r
   r
   r   r5      r$   zAdapterWrapper.__defaults__c                 C   r!   r   )rB   r6   r#   r
   r
   r   r6      r$   zAdapterWrapper.__kwdefaults__c                 C   r!   r   )rB   r9   r#   r
   r
   r   r9      r$   zAdapterWrapper.__signature__)r)   r*   r+   r=   Z__bound_function_wrapper__r   r,   r3   r5   r6   r:   r;   r<   r9   r-   r
   r
   r   r   r@   ~   s    


r@   c                   @   s   e Zd Zdd ZdS )AdapterFactoryc                 C   s   t  r   )NotImplementedErrorr   r0   r
   r
   r   __call__   s   zAdapterFactory.__call__N)r)   r*   r+   rH   r
   r
   r
   r   rE      s    rE   c                       s$   e Zd Z fddZdd Z  ZS )DelegatedAdapterFactoryc                    s   t t|   || _d S r   )r   rI   r   factory)r   rJ   r   r
   r   r      s   
z DelegatedAdapterFactory.__init__c                 C   s
   |  |S r   )rJ   rG   r
   r
   r   rH      s   
z DelegatedAdapterFactory.__call__)r)   r*   r+   r   rH   r-   r
   r
   r   r   rI      s    rI   c                    sF   d urdfdd	  fdd} |t dS tt dS )Nc                    s   |rFt |tr|| }t|s>i }i }t |ts,t|dkr(|d }|d d }t| }td||| |d }|r>||_t	| |||dS  | ||dS )N   zdef adapter{}: passr1   )r0   wrapperenabledr1   )r0   rM   rN   )

isinstancerE   callablestring_typeslenr   r   format__annotations__r@   )r0   rM   rN   r1   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 r(|s&|S d }|d u r7t r4 }n}nt |rBd |}n|t|}|||S )Nc                    s8   }t |tu r|s| S d }di } | ||S )Nr
   )typebool)target_wrapped_enabledtarget_wrapper)rX   r1   rN   rD   r0   r
   r   _capture  s   z-decorator.<locals>._wrapper.<locals>._capturer   )r   rY   rZ   __get__)r0   instancerC   rD   r^   r[   r\   r]   )rX   r1   rN   rM   )rD   r0   r   _wrapper   s"   zdecorator.<locals>._wrapper)r1   )rN   r1   rW   NN)	decoratorr   )rM   rN   r1   rW   ra   r
   )rX   r1   rN   rW   rM   r   rc      s   . 1rc   c                    sz   t | dr#t | dr#| 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w   Y  d S r   r
   r0   r`   rC   rD   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   )rd   r#   rg   r
   r   	__enter__  s   z1synchronized.<locals>._PartialDecorator.__enter__c                    s       d S r   )re   r   rC   rg   r
   r   __exit__  s   z0synchronized.<locals>._PartialDecorator.__exit__Nr)   r*   r+   rj   rl   r
   rg   r
   r   _PartialDecorator  s    rn   )r0   c                 S   s~   t | dd }|d u r=tj& t | dd }|d u r-t }t| d| W d    |S W d    |S 1 s8w   Y  |S )N_synchronized_lock)varsgetsynchronized_synchronized_meta_lockr   setattr)contextrh   r
   r
   r   ro     s   

z(synchronized.<locals>._synchronized_lockc                    sF    |d ur|n|  | |i |W  d    S 1 sw   Y  d S r   r
   rf   ro   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   )r2   
_self_lockrd   r#   rv   r
   r   rj     s   
z/synchronized.<locals>._FinalDecorator.__enter__c                 W   s   | j   d S r   )rx   re   rk   r
   r
   r   rl     s   z.synchronized.<locals>._FinalDecorator.__exit__Nrm   r
   rv   r
   r   _FinalDecorator  s    ry   )r0   rM   )hasattrrc   r   r   )r0   ri   rn   rw   ry   r
   )ro   rh   r   rr     s   
	 
rr   rb   )%__doc__r   version_infor:   
basestringrQ   r   strbuiltinsgetattr	functoolsr   inspectr   	threadingr   r   	argumentsr   r   ImportErrorZ	__wrapt__r   r   r   r   r   r.   r=   r@   objectrE   rI   Zadapter_factoryrc   rr   rs   r
   r
   r
   r   <module>   s@    
		  ]