
CøÓQi  ã            "   @   sy  d  d l  m Z d  d l m Z y e Wn e k
 rH d d „  Z Yn Xy d  d l m Z Wn Gd d „  d e ƒ Z Yn Xy d  d l	 m
 Z
 Wn e k
 r² d	 d
 „  Z
 Yn XGd d „  d e ƒ Z d e _ Gd d „  d e ƒ Z y e e f Z Wn e k
 re Z Yn Xd d „  Z e e f Z Gd d „  d e ƒ Z d d d „ Z d d d „ Z Gd d „  d e ƒ Z d S)é    )Úref)ÚBoundMethodWeakrefc             C   s   t  |  d ƒ S)NÚ__call__)Úhasattr)Úobject© r   ú4/usr/lib/python3/dist-packages/blinker/_utilities.pyÚcallable	   s    r	   )Údefaultdictc               @   ss   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   sH   | d  k	 r( t  | d ƒ r( t d ƒ ‚ t j |  | | Ž | |  _ 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 |  | ƒ SWn t k
 r5 |  j | ƒ SYn Xd  S)N)r   Ú__getitem__ÚKeyErrorÚ__missing__)r   Úkeyr   r   r   r      s    zdefaultdict.__getitem__c             C   s3   |  j  d  k r t | ƒ ‚ |  j  ƒ  |  | <} | S)N)r   r   )r   r   Úvaluer   r   r   r      s    zdefaultdict.__missing__c             C   sF   |  j  d  k r t ƒ  } n |  j  f } t |  ƒ | d  d  |  j ƒ  f S)N)r   ÚtupleÚ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   s1   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  t j |  ƒ f S)Nzdefaultdict(%s, %s))r   r   Ú__repr__)r   r   r   r   r!   7   s    	zdefaultdict.__repr__)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r    r!   r   r   r   r   r
      s   r
   )Úcontextmanagerc             C   s   d d „  } |  j  | _  | S)Nc              _   s   t  d ƒ ‚ d  S)Nz8Python 2.5 or above is required to use context managers.)ÚRuntimeError)r   r   r   r   r   Úoops@   s    zcontextmanager.<locals>.oops)r"   )Úfnr'   r   r   r   r%   ?   s    r%   c               @   s4   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   H   s    z_symbol.__init__c             C   s   t  |  j f f S)N)Úsymbolr*   )r   r   r   r   r   L   s    z_symbol.__reduce__c             C   s   |  j  S)N)r*   )r   r   r   r   r!   O   s    z_symbol.__repr__N)r"   r#   r$   r   r   r!   r   r   r   r   r)   F   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   sA   y |  j  | SWn+ t k
 r< |  j  j | t | ƒ ƒ SYn Xd  S)N)Úsymbolsr   Ú
setdefaultr)   )Úclsr*   r   r   r   Ú__new__d   s    zsymbol.__new__N)r"   r#   r$   Ú__doc__r,   r/   r   r   r   r   r+   T   s   c             C   sw   t  |  d ƒ r+ t |  j ƒ t |  j ƒ f St  |  d ƒ rV t |  j ƒ t |  j ƒ f St |  t ƒ ri |  St |  ƒ Sd  S)NÚ__func__Úim_func)r   Úidr1   Ú__self__r2   Úim_selfÚ
isinstanceÚtext)Úobjr   r   r   Úhashable_identityq   s    r9   c               @   s   e  Z d  Z d Z d S)Úannotatable_weakrefz7A weakref.ref that supports custom instance attributes.N)r"   r#   r$   r0   r   r   r   r   r:      s   r:   Nc             K   s^   t  |  ƒ r t |  | ƒ } n t |  | ƒ } x* | j ƒ  D] \ } } t | | | ƒ q: W| S)zReturn an annotated weak ref.)r	   Úcallable_referencer:   r   Úsetattr)r   ÚcallbackZannotationsZweakr   r   r   r   r   Ú	referenceƒ   s    r>   c             C   so   t  |  d ƒ r1 |  j d k	 r1 t d |  d | ƒ St  |  d ƒ rb |  j d k	 rb t d |  d | ƒ St |  | ƒ S)z@Return an annotated weak ref, supporting bound instance methods.r5   NÚtargetZ	on_deleter4   )r   r5   r   r4   r:   )r   r=   r   r   r   r;   Ž   s
    r;   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)Ú	_deferredr0   )r   Zdeferredr   r   r   r   š   s    	zlazy_property.__init__c             C   s9   | d  k r |  S|  j  | ƒ } t | |  j  j | ƒ | S)N)rA   r<   r"   )r   r8   r.   r   r   r   r   Ú__get__ž   s
    zlazy_property.__get__N)r"   r#   r$   r0   r   rB   r   r   r   r   r@   —   s   r@   )Úweakrefr   Zblinker._saferefr   r	   Ú	NameErrorÚcollectionsr
   r   Ú
contextlibr%   ÚImportErrorr   r)   r"   r+   ÚstrZunicoder7   r9   Z	WeakTypesr:   r>   r;   r@   r   r   r   r   Ú<module>   s4   ,		