o
    ØRWj*  ã                   @  sB   d dl mZ d dlZd dlmZmZ edef ZG dd„ dƒZdS )é    )ÚannotationsN)ÚAnyÚCallable.c                   @  sl   e Zd ZdZddœd!dd	„Zd"d
d„Zd"dd„Zddœd#dd„Zd$dd„Zd%dd„Z	d&dd„Z
d'dd„Zd S )(ÚEventHandlerRegistryz2Thread-safe (optional) registry of event handlers.F)Úuse_lockr   ÚboolÚreturnÚNonec                C  s*   i | _ tƒ | _|rt ¡ | _d S d | _d S ©N)Ú	_handlersÚsetÚ	_once_idsÚ	threadingÚLockÚ_lock)Úselfr   © r   úd/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/_event_handler.pyÚ__init__   s   zEventHandlerRegistry.__init__c                 C  ó   | j d ur| j  ¡  d S d S r
   )r   Úacquire©r   r   r   r   Ú_acquire   ó   
ÿzEventHandlerRegistry._acquirec                 C  r   r
   )r   Úreleaser   r   r   r   Ú_release   r   zEventHandlerRegistry._release©ÚonceÚ
event_typeÚstrÚhandlerÚEventHandlerr   c                C  s\   |   ¡  z$| j |g ¡}| |¡ |r"| j t|ƒ¡ W |  ¡  d S W |  ¡  d S |  ¡  w r
   )r   r   Ú
setdefaultÚappendr   ÚaddÚidr   )r   r   r    r   Úhandlersr   r   r   r$      s   
ýzEventHandlerRegistry.addc                 C  sv   |   ¡  z1| j |¡}|d ur/z| |¡ W n	 ty   Y nw | j t|ƒ¡ W |  ¡  d S W |  ¡  d S |  ¡  w r
   )	r   r   ÚgetÚremoveÚ
ValueErrorr   Údiscardr%   r   )r   r   r    r&   r   r   r   r(   %   s   ÿùzEventHandlerRegistry.removeúlist[EventHandler]c                   s~   ˆ   ¡  z5ˆ j |¡}|sg W ˆ  ¡  S t|ƒ}‡ fdd„|D ƒ}|D ]}| |¡ ˆ j t|ƒ¡ q#|W ˆ  ¡  S ˆ  ¡  w )zOReturn a snapshot of handlers for the given event type, removing once-handlers.c                   s   g | ]}t |ƒˆ jv r|‘qS r   )r%   r   )Ú.0Úhr   r   r   Ú
<listcomp>:   s    z5EventHandlerRegistry.get_handlers.<locals>.<listcomp>)	r   r   r'   r   Úlistr(   r   r*   r%   )r   r   r&   ÚresultÚ	to_remover-   r   r   r   Úget_handlers2   s   
ù
z!EventHandlerRegistry.get_handlersc                 C  s2   |   ¡  z| j |¡}t|ƒW |  ¡  S |  ¡  w r
   )r   r   r'   r   r   )r   r   r&   r   r   r   Úhas_handlersB   s
   z!EventHandlerRegistry.has_handlersÚtargetc                 C  sr   |   ¡  z/| j ¡ D ]\}}|D ]}t|ƒ| jv }|j|||d� qq
| j ¡  | j ¡  W |  ¡  dS |  ¡  w )zDMove all handlers from this registry into *target*, then clear self.r   N)r   r   Úitemsr%   r   r$   Úclearr   )r   r4   r   r&   r    r   r   r   r   Ú
merge_intoJ   s   þ
zEventHandlerRegistry.merge_intoN)r   r   r   r	   )r   r	   )r   r   r    r!   r   r   r   r	   )r   r   r    r!   r   r	   )r   r   r   r+   )r   r   r   r   )r4   r   r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r$   r(   r2   r3   r7   r   r   r   r   r      s    





r   )Ú
__future__r   r   Útypingr   r   r!   r   r   r   r   r   Ú<module>   s
   