U
    ]g)                     @   s<   d dl Z d dlZddlmZmZ dd ZG dd deZdS )    N   )ObjectProxy_FunctionWrapperBasec                 C   s$   |j r
d S d|_ |d k	r || d S )NT)_self_expired)refproxycallback r	   2/tmp/pip-unpacked-wheel-8a6eta5t/wrapt/weakrefs.py_weak_function_proxy_callback   s
    r   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )WeakFunctionProxy)r   _self_instanceNc              	      s   |ot jt| |d}d| _t|trvt|j|| _|j	d k	rZt
t| t|j	| nt
t| t|| d S z.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   
isinstancer   weakrefr   r   Z_self_parentsuperr   __init__r   __self____func__AttributeError)selfwrappedr   Z	_callback	__class__r	   r
   r       s8     







zWeakFunctionProxy.__init__c                  O   sX   dd }||  \}} |j o |  }|jo,|j}|d krB|j| |S ||t|| |S )Nc                 W   s   | |fS )Nr	   )r   argsr	   r	   r
   _unpack_selfN   s    z0WeakFunctionProxy.__call__.<locals>._unpack_self)r   __wrapped____get__type)r   kwargsr   r   instancefunctionr	   r	   r
   __call__M   s    zWeakFunctionProxy.__call__)N)__name__
__module____qualname__	__slots__r   r#   __classcell__r	   r	   r   r
   r      s   -r   )r   r   Z	__wrapt__r   r   r   r   r	   r	   r	   r
   <module>   s   