3
Ug4                 @   s   d dl mZ d dlmZ ye W n ek
r<   dd ZY nX yd dlmZ W n   G dd deZY nX G dd	 d	e	Z
d
e
_G dd
 d
e	ZyeefZW n ek
r   eZY nX dd ZeefZG dd deZdddZdddZG dd de	ZdS )    )ref)BoundMethodWeakrefc             C   s
   t | dS )N__call__)hasattr)object r   P/home/u254762/public_html/venv/lib/python3.6/site-packages/blinker/_utilities.pycallable	   s    r	   )defaultdictc               @   sN   e Zd Zd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S )r
   Nc             O   s8   |d k	rt |d rtdtj| f|| || _d S )Nr   zfirst argument must be callable)r   	TypeErrordict__init__default_factory)selfr   akwr   r   r   r      s
    zdefaultdict.__init__c             C   s,   yt j| |S  tk
r&   | j|S X d S )N)r   __getitem__KeyError__missing__)r   keyr   r   r   r      s    zdefaultdict.__getitem__c             C   s&   | j d krt|| j   | |< }|S )N)r   r   )r   r   valuer   r   r   r      s    
zdefaultdict.__missing__c             C   s.   | j d krf }n| j f}t| |d d | j fS )N)r   typeitems)r   argsr   r   r   
__reduce__%   s    
zdefaultdict.__reduce__c             C   s   | j  S )N)__copy__)r   r   r   r   copy,   s    zdefaultdict.copyc             C   s   t | | j| S )N)r   r   )r   r   r   r   r   /   s    zdefaultdict.__copy__c             C   s"   dd l }t| | j|j| j S )Nr   )r   r   r   deepcopyr   )r   memor   r   r   r   __deepcopy__2   s    
zdefaultdict.__deepcopy__c             C   s   dj | jtj| S )Nzdefaultdict({}, {}))formatr   r   __repr__)r   r   r   r   r!   7   s    zdefaultdict.__repr__)N)__name__
__module____qualname__r   r   r   r   r   r   r   r!   r   r   r   r   r
      s   
r
   c               @   s$   e Zd Zdd Zdd Zdd ZdS )_symbolc             C   s   | | _ | _dS )zConstruct a new named symbol.N)r"   name)r   r&   r   r   r   r   >   s    z_symbol.__init__c             C   s   t | jffS )N)symbolr&   )r   r   r   r   r   B   s    z_symbol.__reduce__c             C   s   | j S )N)r&   )r   r   r   r   r!   E   s    z_symbol.__repr__N)r"   r#   r$   r   r   r!   r   r   r   r   r%   <   s   r%   r'   c               @   s   e Zd ZdZi Zdd ZdS )r'   a?  A constant symbol.

    >>> symbol('foo') is symbol('foo')
    True
    >>> symbol('foo')
    foo

    A slight refinement of the MAGICCOOKIE=object() pattern.  The primary
    advantage of symbol() is its repr().  They are also singletons.

    Repeated calls of symbol('name') will all return the same instance.

    c             C   s2   y
| j | S  tk
r,   | j j|t|S X d S )N)symbolsr   
setdefaultr%   )clsr&   r   r   r   __new__Z   s    
zsymbol.__new__N)r"   r#   r$   __doc__r(   r+   r   r   r   r   r'   J   s   c             C   sV   t | drt| jt| jfS t | dr<t| jt| jfS t| trJ| S t| S d S )N__func__im_func)r   idr-   __self__r.   im_self
isinstancetext)objr   r   r   hashable_identityg   s    


r5   c               @   s   e Zd ZdZdS )annotatable_weakrefz7A weakref.ref that supports custom instance attributes.N)r"   r#   r$   r,   r   r   r   r   r6   u   s   r6   Nc             K   sD   t | rt| |}n
t| |}x |j D ]\}}t||| q(W |S )zReturn an annotated weak ref.)r	   callable_referencer6   r   setattr)r   callbackannotationsZweakr   r   r   r   r   	referencey   s    
r;   c             C   sJ   t | dr | jdk	r t| |dS t | dr@| jdk	r@t| |dS t| |S )z@Return an annotated weak ref, supporting bound instance methods.r1   N)targetZ	on_deleter0   )r   r1   r   r0   r6   )r   r9   r   r   r   r7      s
    r7   c               @   s    e Zd ZdZdd Zdd ZdS )lazy_propertyz(A @property that is only evaluated once.c             C   s   || _ |j| _d S )N)	_deferredr,   )r   deferredr   r   r   r      s    zlazy_property.__init__c             C   s*   |d kr| S | j |}t|| j j| |S )N)r>   r8   r"   )r   r4   r*   r   r   r   r   __get__   s
    
zlazy_property.__get__N)r"   r#   r$   r,   r   r@   r   r   r   r   r=      s   r=   )N)N)weakrefr   Zblinker._saferefr   r	   	NameErrorcollectionsr
   r   r   r%   r"   r'   strunicoder3   r5   Z	WeakTypesr6   r;   r7   r=   r   r   r   r   <module>   s,   ,


	