§
    j¥  ã                  óŠ   — U d Z ddlmZ ddlZddlmZmZ ddlmZ  ej	        ¦   «         Z
i Zded<   dd„Zdd„Zdd„Zddd„ZdS )a¼  Lightweight in-process event bus for decoupling modules.

Usage::

    from shared.events import on, emit

    # subscriber (e.g. in dispatch module init)
    on("identity_matched", lambda **kw: ingest_to_queue(**kw))

    # publisher (e.g. in face module)
    emit("identity_matched", owner_key=..., items=...)

Events are dispatched synchronously in the caller's thread.
Subscriber exceptions are logged but never propagate to the publisher.
é    )ÚannotationsN)ÚAnyÚCallable)Úloggerz#dict[str, list[Callable[..., Any]]]Ú	_handlersÚ
event_nameÚstrÚhandlerúCallable[..., Any]ÚreturnÚNonec                ó¢   — t           5  t                               | g ¦  «                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z=Register *handler* to be called when *event_name* is emitted.N)Ú_lockr   Ú
setdefaultÚappend)r   r
   s     ú//home/longshao/multi-rider-rag/shared/events.pyÚonr      s   € å	ð =ð =Ý×Ò˜Z¨Ñ,Ô,×3Ò3°GÑ<Ô<Ð<ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =ð =ð =s   ˆ/AÁAÁAc                óÌ   — t           5  t                               | ¦  «        }|r'	 |                     |¦  «         n# t          $ r Y nw xY wddd¦  «         dS # 1 swxY w Y   dS )z4Remove a previously registered handler (idempotent).N)r   r   ÚgetÚremoveÚ
ValueError)r   r
   Ú	listenerss      r   Úoffr   "   sÁ   € å	ð ð Ý—M’M *Ñ-Ô-ˆ	Øð 	ðØ× Ò  Ñ)Ô)Ð)Ð)øÝð ð ð Øðøøøðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s1   ˆA¦<»A¼
A	ÁAÁA	Á	AÁAÁ AÚkwargsr   c                óú   — t           5  t          t                               | g ¦  «        ¦  «        }ddd¦  «         n# 1 swxY w Y   |D ]0}	  |di |¤Ž Œ# t          $ r t          j        d| ¦  «         Y Œ-w xY wdS )zÃFire *event_name*, passing *kwargs* to every registered handler.

    Exceptions in individual handlers are logged and swallowed so that one
    broken subscriber cannot break the publisher.
    Nzevent handler error for %r© )r   Úlistr   r   Ú	Exceptionr   Ú	exception)r   r   r   r
   s       r   Úemitr    -   sï   € õ 
ð 8ð 8ÝŸš z°2Ñ6Ô6Ñ7Ô7ˆ	ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8àð Gð Gˆð	GØˆGÐÐfÐÐÐÐøÝð 	Gð 	Gð 	GÝÔÐ9¸:ÑFÔFÐFÐFÐFð	GøøøðGð Gs!   ˆ)=½AÁAÁAÁA8Á7A8ú
str | Nonec                ó´   — t           5  | €t                               ¦   «          nt                               | d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zBRemove all handlers for *event_name*, or all handlers if ``None``.N)r   r   ÚclearÚpop)r   s    r   r#   r#   <   s™   € å	ð ,ð ,ØÐÝOŠOÑÔÐÐåMŠM˜* dÑ+Ô+Ð+ð	,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   ˆ8AÁAÁA)r   r	   r
   r   r   r   )r   r	   r   r   r   r   )N)r   r!   r   r   )Ú__doc__Ú
__future__r   Ú	threadingÚtypingr   r   Úshared.config.configr   ÚLockr   r   Ú__annotations__r   r   r    r#   r   ó    r   ú<module>r-      sá   ððð ð ð  #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à 'Ð 'Ð 'Ð 'Ð 'Ð 'àˆ	ŒÑÔ€Ø13€	Ð 3Ð 3Ð 3Ñ 3ð=ð =ð =ð =ðð ð ð ðGð Gð Gð Gð,ð ,ð ,ð ,ð ,ð ,ð ,r,   