o
    ¥ÜÓh¶  ã                   @  sF   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd„ dƒZ	dS )	zq
greenlet-specific code that pretends to be a `threading.local`.

Fails to import if not running under greenlet.
é    )Úannotations)ÚAny)ÚWeakKeyDictionary)Ú
getcurrentc                   @  s8   e Zd ZdZddd„Zdd	d
„Zddd„Zddd„ZdS )ÚGreenThreadLocalz6
    threading.local() replacement for greenlets.
    ÚreturnÚNonec                 C  s   t ƒ | jd< d S )NÚ	_weakdict)r   Ú__dict__)Úself© r   úJ/var/www/html/ai/venv/lib/python3.10/site-packages/structlog/_greenlets.pyÚ__init__   s   zGreenThreadLocal.__init__ÚnameÚstrr   c                 C  s0   t ƒ }z| j| | W S  ty   t|ƒd ‚w ©N©r   r	   ÚKeyErrorÚAttributeError©r   r   Úkeyr   r   r   Ú__getattr__   s   
ÿzGreenThreadLocal.__getattr__Úvalc                 C  s   t ƒ }|| j |i ¡|< d S r   )r   r	   Ú
setdefault)r   r   r   r   r   r   r   Ú__setattr__#   s   zGreenThreadLocal.__setattr__c                 C  s2   t ƒ }z	| j| |= W d S  ty   t|ƒd ‚w r   r   r   r   r   r   Ú__delattr__'   s   
ÿzGreenThreadLocal.__delattr__N)r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r      s    


r   N)
r   Ú
__future__r   Útypingr   Úweakrefr   Úgreenletr   r   r   r   r   r   Ú<module>   s   