o
    q>e(                     @  s   d dl mZ d dlZd dlmZ d dlmZ ejej	e
e
f ee
f ZG dd dZde_G dd dZdddZeefZG dd deZ	ddddZdddZG dd dZdS )    )annotationsN)ref)BoundMethodWeakrefc                   @  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)__name__name)selfr    r	   S/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/blinker/_utilities.py__init__   s   z_symbol.__init__c                 C  s   t | jffS N)symbolr   r   r	   r	   r
   
__reduce__   s   z_symbol.__reduce__c                 C  s   | j S r   )r   r   r	   r	   r
   __repr__   s   z_symbol.__repr__N)r   
__module____qualname__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   z| j | W S  ty   | j |t| Y S w r   )symbolsKeyError
setdefaultr   )clsr   r	   r	   r
   __new__+   s
   zsymbol.__new__N)r   r   r   __doc__r   r   r	   r	   r	   r
   r      s    objobjectreturnIdentityTypec                 C  sV   t | drt| jt| jfS t | drt| jt| jfS t| ttfr'| S t| S )N__func__im_func)	hasattridr   __self__r   im_self
isinstanceintstr)r   r	   r	   r
   hashable_identity2   s   

r&   c                   @  s"   e Zd ZU dZded< ded< dS )annotatable_weakrefz7A weakref.ref that supports custom instance attributes.zt.Optional[IdentityType]receiver_id	sender_idN)r   r   r   r   __annotations__r	   r	   r	   r
   r'   @   s   
 r'   c                 K  s@   t | r
t| |}nt| |}| D ]
\}}t||| q|S )zReturn an annotated weak ref.)callablecallable_referencer'   itemssetattr)r   callbackr   weakkeyvaluer	   r	   r
   	referenceG   s   
r3   c                 C  sJ   t | dr| jdurt| |dS t | dr | jdur t| |dS t| |S )z@Return an annotated weak ref, supporting bound instance methods.r"   N)target	on_deleter!   )r   r"   r   r!   r'   )r   r/   r	   r	   r
   r,   T   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 r   )	_deferredr   )r   deferredr	   r	   r
   r   `   s   zlazy_property.__init__c                 C  s*   |d u r| S |  |}t|| j j| |S r   )r7   r.   r   )r   r   r   r2   r	   r	   r
   __get__d   s
   
zlazy_property.__get__N)r   r   r   r   r   r9   r	   r	   r	   r
   r6   ]   s    r6   )r   r   r   r   r   )r   r'   )
__future__r   typingtweakrefr   blinker._saferefr   UnionTupler$   r%   r   r   r   r   r&   	WeakTypesr'   r3   r,   r6   r	   r	   r	   r
   <module>   s    

	