o
    byN                     @   sR  d Z ddlZejd dkZejd dkZer$efZddlZeedZ	[ne
fZdddZ	ddlmZ dd	lmZmZmZ dd
lmZ ddlmZmZ zddlmZ W n	 ey[   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Z%dd Z&e e&_'dS )!zoThis module implements decorators for implementing other decorators
as well as some commonly used decorators.

    N      execc                 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_localsr   )Z_code_Z_globs_Z_locs_frame r   O/var/www/secure340b-portal/env/lib/python3.10/site-packages/wrapt/decorators.pyexec_   s   
r   )partial)ismethodisclassformatargspec)
namedtuple)LockRLock)	signaturer   )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   6      
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)   B   r'   z_AdapterFunctionCode.co_flagsc                 C   r$   r   )r   co_kwonlyargcountr&   r   r   r   r*   F   r'   z&_AdapterFunctionCode.co_kwonlyargcountc                 C   r$   r   )r   co_varnamesr&   r   r   r   r+   J   r'   z _AdapterFunctionCode.co_varnames)__name__
__module____qualname__r   propertyr%   r(   r)   r*   r+   __classcell__r   r   r!   r   r   4   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   r1   r   _self_adapter)r    wrappedadapterr!   r   r   r   P   r#   z"_AdapterFunctionSurrogate.__init__c                 C   s   t | jj| jjS r   )r   __wrapped____code__r2   r&   r   r   r   r6   T      z"_AdapterFunctionSurrogate.__code__c                 C   r$   r   )r2   __defaults__r&   r   r   r   r8   Y   r'   z&_AdapterFunctionSurrogate.__defaults__c                 C   r$   r   )r2   __kwdefaults__r&   r   r   r   r9   ]   r'   z(_AdapterFunctionSurrogate.__kwdefaults__c                 C   s   dt  vr	| jjS t| jS )Nr   )globalsr2   __signature__r   r&   r   r   r   r;   a   s   

z'_AdapterFunctionSurrogate.__signature__)r,   r-   r.   r   r/   r6   r8   r9   r;   PY2	func_codefunc_defaultsr0   r   r   r!   r   r1   N   s    



r1   c                   @   s$   e Zd Zedd ZereZdS dS )_BoundAdapterWrapperc                 C   s   t | jj| jjS r   )r1   r5   __func__Z_self_parentr2   r&   r   r   r   r@   s   r7   z_BoundAdapterWrapper.__func__N)r,   r-   r.   r/   r@   r<   Zim_funcr   r   r   r   r?   q   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 )Nr4   )popr   rA   r   r1   r5   _self_surrogater2   )r    argskwargsr4   r!   r   r   r      s   

zAdapterWrapper.__init__c                 C   r$   r   )rC   r6   r&   r   r   r   r6      r'   zAdapterWrapper.__code__c                 C   r$   r   )rC   r8   r&   r   r   r   r8      r'   zAdapterWrapper.__defaults__c                 C   r$   r   )rC   r9   r&   r   r   r   r9      r'   zAdapterWrapper.__kwdefaults__c                 C   r$   r   )rC   r;   r&   r   r   r   r;      r'   zAdapterWrapper.__signature__)r,   r-   r.   r?   Z__bound_function_wrapper__r   r/   r6   r8   r9   r<   r=   r>   r;   r0   r   r   r!   r   rA   {   s    


rA   c                   @   s   e Zd Zdd ZdS )AdapterFactoryc                 C   s   t  r   )NotImplementedErrorr    r3   r   r   r   __call__   s   zAdapterFactory.__call__N)r,   r-   r.   rI   r   r   r   r   rF      s    rF   c                       s$   e Zd Z fddZdd Z  ZS )DelegatedAdapterFactoryc                    s   t t|   || _d S r   )r   rJ   r   factory)r    rK   r!   r   r   r      s   
z DelegatedAdapterFactory.__init__c                 C   s
   |  |S r   )rK   rH   r   r   r   rI      s   
z DelegatedAdapterFactory.__call__)r,   r-   r.   r   rI   r0   r   r   r!   r   rJ      s    rJ   c                    s<   d urddd  fdd} |S t tdS )Nc                 S   sl   |r/t |tr|| }t|s'i }t |tst| }td||| |d }t| |||dS t| ||dS )Nzdef adapter{}: passr4   )r3   wrapperenabledr4   )r3   rL   rM   )	
isinstancerF   callablestring_typesr   r   formatrA   r   )r3   rL   rM   r4   nsr   r   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)rS   r4   rM   rE   r3   r   r   _capture   s   z-decorator.<locals>._wrapper.<locals>._capturer   )r   rT   rU   __get__)r3   instancerD   rE   rY   rV   rW   rX   rS   r4   rM   rL   )rE   r3   r   _wrapper   s"   zdecorator.<locals>._wrapper)rM   r4   NN)r   	decorator)rL   rM   r4   r]   r   r\   r   r_      s   
 
.r_   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   r3   r[   rD   rE   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&   rc   r   r   	__enter__  s   z1synchronized.<locals>._PartialDecorator.__enter__c                    s       d S r   )ra   r    rD   rc   r   r   __exit__  s   z0synchronized.<locals>._PartialDecorator.__exit__Nr,   r-   r.   rf   rh   r   rc   r   r   _PartialDecorator  s    rj   )r3   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)contextrd   r   r   r   rk     s   

z(synchronized.<locals>._synchronized_lockc                    s>    |p|  | |i |W  d    S 1 sw   Y  d S r   r   rb   rk   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   )r5   
_self_lockr`   r&   rr   r   r   rf     s   
z/synchronized.<locals>._FinalDecorator.__enter__c                 W   s   | j   d S r   )rt   ra   rg   r   r   r   rh     s   z.synchronized.<locals>._FinalDecorator.__exit__Nri   r   rr   r   r   _FinalDecorator  s    ru   )r3   rL   )hasattrr_   r   r   )r3   re   rj   rs   ru   r   )rk   rd   r   rn     s   
	 
rn   r^   )NNN)(__doc__r   version_infor<   PY3strrP   builtinsgetattrr   
basestring	functoolsr   inspectr   r   r   collectionsr   	threadingr   r   r   ImportErrorwrappersr   r   r   r   r   r1   r?   rA   objectrF   rJ   Zadapter_factoryr_   rn   ro   r   r   r   r   <module>   s@    

	#

	 u]