B
    !]\y                 @   s  d dl Z d dlZd dlZd dlZd dlZd dlZejd  dkZejd  dkZerXe	fZ
nefZ
dd ZG dd deZG dd	 d	eZG d
d de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y2e jdsddlmZmZmZmZmZmZ W n ek
r2   Y nX dd Zdd Zdi fddZG d d! d!eZdi fd"d#Zd$d% Z d&d' Z!d(d) Z"d*d+ Z#d,d- Z$G d.d/ d/eZ%dS )0    N      c             G   s   | d|i S )z%Create a base class with a metaclass.ZNewBase )metabasesr   r   -lib/python3.7/site-packages/wrapt/wrappers.pywith_metaclass   s    r   c               @   sX   e Zd Zedd Zejdd Zedd Zejdd Zedd Zed	d
 ZdS )_ObjectProxyMethodsc             C   s   | j jS )N)__wrapped__
__module__)selfr   r   r   r      s    z_ObjectProxyMethods.__module__c             C   s   || j _d S )N)r
   r   )r   valuer   r   r   r   #   s    c             C   s   | j jS )N)r
   __doc__)r   r   r   r   r   '   s    z_ObjectProxyMethods.__doc__c             C   s   || j _d S )N)r
   r   )r   r   r   r   r   r   +   s    c             C   s   | j jS )N)r
   __dict__)r   r   r   r   r   2   s    z_ObjectProxyMethods.__dict__c             C   s   | j jS )N)r
   __weakref__)r   r   r   r   r   ;   s    z_ObjectProxyMethods.__weakref__N)__name__r   __qualname__propertysetterr   r   r   r   r   r   r   r	      s   	r	   c               @   s   e Zd Zdd ZdS )_ObjectProxyMetaTypec             C   s   | tt t| |||S )N)updatevarsr	   type__new__)clsnamer   Z
dictionaryr   r   r   r   @   s    z_ObjectProxyMetaType.__new__N)r   r   r   r   r   r   r   r   r   ?   s   r   c               @   s  e Zd ZdZdd Zedd Z e jdd Z edd Zejd	d Zed
d Zejdd Zdd Z	dd Z
er~dd Zdd Zdd Zerdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?dydz Z@d{d| ZAd}d~ ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dS )ObjectProxyr
   c             C   s<   t | d| yt | d|j W n tk
r6   Y nX d S )Nr
   r   )object__setattr__r   AttributeError)r   wrappedr   r   r   __init__N   s
    zObjectProxy.__init__c             C   s   | j jS )N)r
   r   )r   r   r   r   r   Z   s    zObjectProxy.__name__c             C   s   || j _d S )N)r
   r   )r   r   r   r   r   r   ^   s    c             C   s   | j jS )N)r
   	__class__)r   r   r   r   r"   b   s    zObjectProxy.__class__c             C   s   || j _d S )N)r
   r"   )r   r   r   r   r   r"   f   s    c             C   s   | j jS )N)r
   __annotations__)r   r   r   r   r#   j   s    zObjectProxy.__annotations__c             C   s   || j _d S )N)r
   r#   )r   r   r   r   r   r#   n   s    c             C   s
   t | jS )N)dirr
   )r   r   r   r   __dir__r   s    zObjectProxy.__dir__c             C   s
   t | jS )N)strr
   )r   r   r   r   __str__u   s    zObjectProxy.__str__c             C   s
   t | jS )N)bytesr
   )r   r   r   r   	__bytes__y   s    zObjectProxy.__bytes__c             C   s(   d t| jt| t| jjt| jS )Nz<{} at 0x{:x} for {} at 0x{:x}>)formatr   r   idr
   )r   r   r   r   __repr__|   s    
zObjectProxy.__repr__c             C   s
   t | jS )N)reversedr
   )r   r   r   r   __reversed__   s    zObjectProxy.__reversed__c             C   s
   t | jS )N)roundr
   )r   r   r   r   	__round__   s    zObjectProxy.__round__c             C   s
   | j |k S )N)r
   )r   otherr   r   r   __lt__   s    zObjectProxy.__lt__c             C   s
   | j |kS )N)r
   )r   r1   r   r   r   __le__   s    zObjectProxy.__le__c             C   s
   | j |kS )N)r
   )r   r1   r   r   r   __eq__   s    zObjectProxy.__eq__c             C   s
   | j |kS )N)r
   )r   r1   r   r   r   __ne__   s    zObjectProxy.__ne__c             C   s
   | j |kS )N)r
   )r   r1   r   r   r   __gt__   s    zObjectProxy.__gt__c             C   s
   | j |kS )N)r
   )r   r1   r   r   r   __ge__   s    zObjectProxy.__ge__c             C   s
   t | jS )N)hashr
   )r   r   r   r   __hash__   s    zObjectProxy.__hash__c             C   s
   t | jS )N)boolr
   )r   r   r   r   __nonzero__   s    zObjectProxy.__nonzero__c             C   s
   t | jS )N)r:   r
   )r   r   r   r   __bool__   s    zObjectProxy.__bool__c             C   s   | drt| || n|dkrt| || yt| d W n tk
rT   Y nX yt| d|j W q tk
r~   Y qX nR|dkrt| j|| t| || n,tt	| |rt| || nt| j|| d S )N_self_r
   r   )

startswithr   r   __delattr__r   r   setattrr
   hasattrr   )r   r   r   r   r   r   r      s$    
zObjectProxy.__setattr__c             C   s   |dkrt dt| j|S )Nr
   z wrapper has not been initialised)
ValueErrorgetattrr
   )r   r   r   r   r   __getattr__   s    zObjectProxy.__getattr__c             C   sx   | drt| | n\|dkr*tdnJ|dkrLt| | t| j| n(tt| |rht| | nt| j| d S )Nr=   r
   z__wrapped__ must be an objectr   )r>   r   r?   	TypeErrordelattrr
   rA   r   )r   r   r   r   r   r?      s    

zObjectProxy.__delattr__c             C   s
   | j | S )N)r
   )r   r1   r   r   r   __add__   s    zObjectProxy.__add__c             C   s
   | j | S )N)r
   )r   r1   r   r   r   __sub__   s    zObjectProxy.__sub__c             C   s
   | j | S )N)r
   )r   r1   r   r   r   __mul__   s    zObjectProxy.__mul__c             C   s   t | j|S )N)operatordivr
   )r   r1   r   r   r   __div__   s    zObjectProxy.__div__c             C   s   t | j|S )N)rJ   truedivr
   )r   r1   r   r   r   __truediv__   s    zObjectProxy.__truediv__c             C   s
   | j | S )N)r
   )r   r1   r   r   r   __floordiv__   s    zObjectProxy.__floordiv__c             C   s
   | j | S )N)r
   )r   r1   r   r   r   __mod__   s    zObjectProxy.__mod__c             C   s   t | j|S )N)divmodr
   )r   r1   r   r   r   
__divmod__   s    zObjectProxy.__divmod__c             G   s   t | j|f| S )N)powr
   )r   r1   argsr   r   r   __pow__   s    zObjectProxy.__pow__c             C   s
   | j |> S )N)r
   )r   r1   r   r   r   
__lshift__   s    zObjectProxy.__lshift__c             C   s
   | j |? S )N)r
   )r   r1   r   r   r   
__rshift__   s    zObjectProxy.__rshift__c             C   s
   | j |@ S )N)r
   )r   r1   r   r   r   __and__   s    zObjectProxy.__and__c             C   s
   | j |A S )N)r
   )r   r1   r   r   r   __xor__   s    zObjectProxy.__xor__c             C   s
   | j |B S )N)r
   )r   r1   r   r   r   __or__   s    zObjectProxy.__or__c             C   s
   || j  S )N)r
   )r   r1   r   r   r   __radd__  s    zObjectProxy.__radd__c             C   s
   || j  S )N)r
   )r   r1   r   r   r   __rsub__  s    zObjectProxy.__rsub__c             C   s
   || j  S )N)r
   )r   r1   r   r   r   __rmul__  s    zObjectProxy.__rmul__c             C   s   t || jS )N)rJ   rK   r
   )r   r1   r   r   r   __rdiv__
  s    zObjectProxy.__rdiv__c             C   s   t || jS )N)rJ   rM   r
   )r   r1   r   r   r   __rtruediv__  s    zObjectProxy.__rtruediv__c             C   s
   || j  S )N)r
   )r   r1   r   r   r   __rfloordiv__  s    zObjectProxy.__rfloordiv__c             C   s
   || j  S )N)r
   )r   r1   r   r   r   __rmod__  s    zObjectProxy.__rmod__c             C   s   t || jS )N)rQ   r
   )r   r1   r   r   r   __rdivmod__  s    zObjectProxy.__rdivmod__c             G   s   t || jf| S )N)rS   r
   )r   r1   rT   r   r   r   __rpow__  s    zObjectProxy.__rpow__c             C   s
   || j > S )N)r
   )r   r1   r   r   r   __rlshift__  s    zObjectProxy.__rlshift__c             C   s
   || j ? S )N)r
   )r   r1   r   r   r   __rrshift__  s    zObjectProxy.__rrshift__c             C   s
   || j @ S )N)r
   )r   r1   r   r   r   __rand__"  s    zObjectProxy.__rand__c             C   s
   || j A S )N)r
   )r   r1   r   r   r   __rxor__%  s    zObjectProxy.__rxor__c             C   s
   || j B S )N)r
   )r   r1   r   r   r   __ror__(  s    zObjectProxy.__ror__c             C   s   |  j |7  _ | S )N)r
   )r   r1   r   r   r   __iadd__+  s    zObjectProxy.__iadd__c             C   s   |  j |8  _ | S )N)r
   )r   r1   r   r   r   __isub__/  s    zObjectProxy.__isub__c             C   s   |  j |9  _ | S )N)r
   )r   r1   r   r   r   __imul__3  s    zObjectProxy.__imul__c             C   s   t | j|| _| S )N)rJ   Zidivr
   )r   r1   r   r   r   __idiv__7  s    zObjectProxy.__idiv__c             C   s   t | j|| _| S )N)rJ   itruedivr
   )r   r1   r   r   r   __itruediv__;  s    zObjectProxy.__itruediv__c             C   s   |  j |  _ | S )N)r
   )r   r1   r   r   r   __ifloordiv__?  s    zObjectProxy.__ifloordiv__c             C   s   |  j |;  _ | S )N)r
   )r   r1   r   r   r   __imod__C  s    zObjectProxy.__imod__c             C   s   |  j |C  _ | S )N)r
   )r   r1   r   r   r   __ipow__G  s    zObjectProxy.__ipow__c             C   s   |  j |K  _ | S )N)r
   )r   r1   r   r   r   __ilshift__K  s    zObjectProxy.__ilshift__c             C   s   |  j |L  _ | S )N)r
   )r   r1   r   r   r   __irshift__O  s    zObjectProxy.__irshift__c             C   s   |  j |M  _ | S )N)r
   )r   r1   r   r   r   __iand__S  s    zObjectProxy.__iand__c             C   s   |  j |N  _ | S )N)r
   )r   r1   r   r   r   __ixor__W  s    zObjectProxy.__ixor__c             C   s   |  j |O  _ | S )N)r
   )r   r1   r   r   r   __ior__[  s    zObjectProxy.__ior__c             C   s   | j  S )N)r
   )r   r   r   r   __neg___  s    zObjectProxy.__neg__c             C   s   | j 
 S )N)r
   )r   r   r   r   __pos__b  s    zObjectProxy.__pos__c             C   s
   t | jS )N)absr
   )r   r   r   r   __abs__e  s    zObjectProxy.__abs__c             C   s   | j  S )N)r
   )r   r   r   r   
__invert__h  s    zObjectProxy.__invert__c             C   s
   t | jS )N)intr
   )r   r   r   r   __int__k  s    zObjectProxy.__int__c             C   s
   t | jS )N)Zlongr
   )r   r   r   r   __long__n  s    zObjectProxy.__long__c             C   s
   t | jS )N)floatr
   )r   r   r   r   	__float__q  s    zObjectProxy.__float__c             C   s
   t | jS )N)complexr
   )r   r   r   r   __complex__t  s    zObjectProxy.__complex__c             C   s
   t | jS )N)octr
   )r   r   r   r   __oct__w  s    zObjectProxy.__oct__c             C   s
   t | jS )N)hexr
   )r   r   r   r   __hex__z  s    zObjectProxy.__hex__c             C   s   t | jS )N)rJ   indexr
   )r   r   r   r   	__index__}  s    zObjectProxy.__index__c             C   s
   t | jS )N)lenr
   )r   r   r   r   __len__  s    zObjectProxy.__len__c             C   s
   || j kS )N)r
   )r   r   r   r   r   __contains__  s    zObjectProxy.__contains__c             C   s
   | j | S )N)r
   )r   keyr   r   r   __getitem__  s    zObjectProxy.__getitem__c             C   s   || j |< d S )N)r
   )r   r   r   r   r   r   __setitem__  s    zObjectProxy.__setitem__c             C   s   | j |= d S )N)r
   )r   r   r   r   r   __delitem__  s    zObjectProxy.__delitem__c             C   s   | j || S )N)r
   )r   ijr   r   r   __getslice__  s    zObjectProxy.__getslice__c             C   s   || j ||< d S )N)r
   )r   r   r   r   r   r   r   __setslice__  s    zObjectProxy.__setslice__c             C   s   | j ||= d S )N)r
   )r   r   r   r   r   r   __delslice__  s    zObjectProxy.__delslice__c             C   s
   | j  S )N)r
   	__enter__)r   r   r   r   r     s    zObjectProxy.__enter__c             O   s   | j j||S )N)r
   __exit__)r   rT   kwargsr   r   r   r     s    zObjectProxy.__exit__c             C   s
   t | jS )N)iterr
   )r   r   r   r   __iter__  s    zObjectProxy.__iter__c             C   s   t dd S )Nz#object proxy must define __copy__())NotImplementedError)r   r   r   r   __copy__  s    zObjectProxy.__copy__c             C   s   t dd S )Nz'object proxy must define __deepcopy__())r   )r   memor   r   r   __deepcopy__  s    zObjectProxy.__deepcopy__c             C   s   t dd S )Nz(object proxy must define __reduce_ex__())r   )r   r   r   r   
__reduce__  s    zObjectProxy.__reduce__c             C   s   t dd S )Nz(object proxy must define __reduce_ex__())r   )r   Zprotocolr   r   r   __reduce_ex__  s    zObjectProxy.__reduce_ex__N)_r   r   r   	__slots__r!   r   r   r"   r#   r%   r'   PY3r)   r,   r.   r0   r2   r3   r4   r5   r6   r7   r9   r;   r<   r   rD   r?   rG   rH   rI   rL   rN   rO   rP   rR   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   rz   r{   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   J   s   	r   c               @   s   e Zd Zdd ZdS )CallableObjectProxyc             O   s   | j ||S )N)r
   )r   rT   r   r   r   r   __call__  s    zCallableObjectProxy.__call__N)r   r   r   r   r   r   r   r   r     s   r   c                   s$   e Zd Z fddZdd Z  ZS )PartialCallableObjectProxyc                sZ   t |dk rtd|d |dd   }}t|s:tdtt| | || _|| _d S )N   z(partial type takes at least one argumentr   z#the first argument must be callable)r   rE   callablesuperr   r!   
_self_args_self_kwargs)r   rT   r   r    )r"   r   r   r!     s    z#PartialCallableObjectProxy.__init__c             O   s*   | j | }t| j}|| | j||S )N)r   dictr   r   r
   )r   rT   r   Z_argsZ_kwargsr   r   r   r     s    


z#PartialCallableObjectProxy.__call__)r   r   r   r!   r   __classcell__r   r   )r"   r   r     s   r   c                   s2   e Zd ZdZd
 fdd	Zdd Zdd	 Z  ZS )_FunctionWrapperBase)_self_instance_self_wrapper_self_enabled_self_binding_self_parentNfunctionc                sZ   t t| | t| d| t| d| t| d| t| d| t| d| d S )Nr   r   r   r   r   )r   r   r!   r   r   )r   r    instancewrapperenabledbindingparent)r"   r   r   r!     s    z_FunctionWrapperBase.__init__c             C   s   | j d krBt| js>| j||}| ||| j| j| j| S | S | j	d kr| jdkr| j j||}| j ||| j| j| j| j S | S )Nr   )
r   inspectisclassr
   __get____bound_function_wrapper__r   r   r   r   )r   r   ownerZ
descriptorr   r   r   r     s    

z_FunctionWrapperBase.__get__c             O   s   | j d k	r<t| j r*|   s<| j||S n| j s<| j||S | jdkrx| jd krxt| jdd }|d k	rx| | j|||S | | j| j||S )Nr   __self__)r   r   r
   r   r   rC   r   )r   rT   r   r   r   r   r   r     s    




z_FunctionWrapperBase.__call__)Nr   N)r   r   r   r   r!   r   r   r   r   r   )r"   r   r     s
    
8r   c               @   s   e Zd Zdd ZdS )BoundFunctionWrapperc             O   s   | j d k	r<t| j r*|   s<| j||S n| j s<| j||S | jdkr| jd kr|s\td|d |dd   }}t| j|}| ||||S | | j| j||S t| jdd }| | j|||S d S )Nr   z&missing 1 required positional argumentr   r   r   )	r   r   r
   r   r   rE   r   r   rC   )r   rT   r   r   r    r   r   r   r   8  s$    



zBoundFunctionWrapper.__call__N)r   r   r   r   r   r   r   r   r   6  s   r   c                   s"   e Zd ZeZd fdd	Z  ZS )FunctionWrapperNc                sb   t |trd}n6t |tr d}n&t|drBt|jr<d}qFd}nd}tt| 	|d ||| d S )Nclassmethodstaticmethodr   r   )

isinstancer   r   rA   r   r   r   r   r   r!   )r   r    r   r   r   )r"   r   r   r!   t  s    I


zFunctionWrapper.__init__)N)r   r   r   r   r   r!   r   r   r   )r"   r   r   p  s   r   ZWRAPT_DISABLE_EXTENSIONSr   )r   r   r   r   r   r   c             C   s   t | trt|  tj|  } | }|d}|d }t||}xf|dd  D ]V}|}t|rxBt	|D ]}|t
|krht
|| }P qhW t||}qJt||}qJW |||fS )N.r   r   )r   string_types
__import__sysmodulessplitrC   r   r   Zgetmror   )moduler   r   path	attributeoriginalr   r   r   r   resolve_path  s"    




r   c             C   s   t | || d S )N)r@   )r   r   replacementr   r   r   apply_patch  s    r   r   c       	      C   s0   t | |\}}}||f||}t||| |S )N)r   r   )	r   r   factoryrT   r   r   r   r   r   r   r   r   wrap_object  s    r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
AttributeWrapperc             C   s   || _ || _|| _|| _d S )N)r   r   rT   r   )r   r   r   rT   r   r   r   r   r!     s    zAttributeWrapper.__init__c             C   s"   |j | j }| j|f| j| jS )N)r   r   r   rT   r   )r   r   r   r   r   r   r   r     s    zAttributeWrapper.__get__c             C   s   ||j | j< d S )N)r   r   )r   r   r   r   r   r   __set__  s    zAttributeWrapper.__set__c             C   s   |j | j= d S )N)r   r   )r   r   r   r   r   
__delete__  s    zAttributeWrapper.__delete__N)r   r   r   r!   r   r   r   r   r   r   r   r     s   r   c       	      C   s<   | dd\}}t| |d }t||||}t||| |S )Nr   r   r   )rsplitr   r   r   )	r   r   r   rT   r   r   r   r   r   r   r   r   wrap_object_attribute"  s
    r   c                s    fdd}t  |S )Nc                sH   |d }|d kr }n(t |r. d |}n |t|}t||S )Nr   )r   r   r   r   r   )r    r   rT   r   target_wrappedtarget_wrapper)r   r   r   _wrapper/  s    
z"function_wrapper.<locals>._wrapper)r   )r   r   r   )r   r   function_wrapper.  s    	r   c             C   s   t | |t|fS )N)r   r   )r   r   r   r   r   r   wrap_function_wrapper:  s    r   c                s    fdd}|S )Nc                s   t  t| fS )N)r   r   )r   )r   r   r   r   r   >  s    z(patch_function_wrapper.<locals>._wrapperr   )r   r   r   r   )r   r   r   patch_function_wrapper=  s    r   c                s    fdd}|S )Nc                s    fdd}t  |S )Nc                sX   |d }|d kr n(t |r.d | n|t|  fdd}t||S )Nr   c          
      sD   t  \}}}t|}t||| z
| ||S t||| X d S )N)r   r   r@   )r    r   rT   r   r   r   r   r   )r   r   r   r   r   _executeL  s    

zRtransient_function_wrapper.<locals>._decorator.<locals>._wrapper.<locals>._execute)r   r   r   r   r   )r    r   rT   r   r   r   )r   r   r   )r   r   r   D  s    
z@transient_function_wrapper.<locals>._decorator.<locals>._wrapper)r   )r   r   )r   r   )r   r   
_decoratorC  s    z.transient_function_wrapper.<locals>._decoratorr   )r   r   r   r   )r   r   r   transient_function_wrapperB  s    r   c             C   s$   |j r
d S d|_ |d k	r || d S )NT)_self_expired)refproxycallbackr   r   r   _weak_function_proxy_callbacka  s
    r   c                   s*   e Zd ZdZd fdd	Zdd Z  ZS )WeakFunctionProxy)r   r   Nc          	      s   |ot jt| |d}d| _t|trvt|j|| _|j	d k	rZt
t| t|j	| nt
t| t|| d S y.t|j|| _t
t| t|j| W n2 tk
r   d | _t
t| t|| Y nX d S )N)r   r   F)	functoolspartialr   r   r   r   weakrefr   r   r   r   r   r!   r   r   __func__r   )r   r    r   Z	_callback)r"   r   r   r!   r  s*    





zWeakFunctionProxy.__init__c             O   sD   | j o|   }| jo| j}|d kr.| j||S ||t|||S )N)r   r
   r   r   )r   rT   r   r   r   r   r   r   r     s
    zWeakFunctionProxy.__call__)N)r   r   r   r   r!   r   r   r   r   )r"   r   r   n  s   -r   )&osr   r   rJ   r   r   version_infoZPY2r   r&   r   Z
basestringr   r   r	   r   r   r   r   r   r   r   r   environgetZ	_wrappersImportErrorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sJ   +  gj:_$(