§
    [¬“j,  ã                   ót   — d dl Z d dlmZmZmZmZ  e j        e¦  «        Z G d„ d¦  «        Z	 e	¦   «         Z
dS )é    N)ÚCallableÚDictÚListÚAnyc                   óZ   — e Zd ZdZd„ Zdedefd„Zddedefd„Z	e
ded	efd
„¦   «         ZdS )ÚEventBusz>Simple in-memory Pub/Sub Event Bus for decoupled mega-modules.c                 ó   — i | _         d S ©N)Úsubscribers)Úselfs    ú9C:\Projects\DSCons\app\core\module_framework\event_bus.pyÚ__init__zEventBus.__init__   s   € Ø68ˆÔÐÐó    Ú
event_typeÚcallbackc                 ó¦   — || j         vr
g | j         |<   | j         |                              |¦  «         t                               d|› �¦  «         d S )Nz[EVENT BUS] Subscribed to )r   ÚappendÚloggerÚinfo)r   r   r   s      r   Ú	subscribezEventBus.subscribe   sZ   € Ø˜TÔ-Ð-Ð-Ø+-ˆDÔ˜ZÑ(ØÔ˜Ô$×+Ò+¨HÑ5Ô5Ð5Ý�ŠÐ=°Ð=Ð=Ñ>Ô>Ð>Ð>Ð>r   NÚdatac           	   ƒ   ó¬  K  — || j         v rÆt                               d|› dt          | j         |         ¦  «        › d�¦  «         | j         |         D ]�}	 dd l}|                     |¦  «        r|                      ||¦  «        ¦  «         n ||¦  «         ŒG# t          $ r,}t                               d|› d|› �d¬¦  «         Y d }~Œxd }~ww xY wd S d S )	Nz[EVENT BUS] Publishing z to z subscribersr   z$[EVENT BUS] Error in subscriber for z: T)Úexc_info)	r   r   r   ÚlenÚasyncioÚiscoroutinefunctionÚcreate_taskÚ	ExceptionÚerror)r   r   r   r   r   Úes         r   ÚpublishzEventBus.publish   s%  è è € Ø˜Ô)Ð)Ð)Ý�KŠKÐq°*ÐqÐqÅ#ÀdÔFVÐWaÔFbÑBcÔBcÐqÐqÐqÑrÔrÐrØ Ô,¨ZÔ8ð jð j�ðjØ"�N�N�NØ×2Ò2°8Ñ<Ô<ð 'Ø×+Ò+¨H¨H°T©N¬NÑ;Ô;Ð;Ð;à ˜ ™œ˜øøÝ ð jð jð jÝ—L’LÐ!YÈ
Ð!YÐ!YÐVWÐ!YÐ!YÐdh�LÑiÔiÐiÐiÐiÐiÐiÐiøøøøðjøøøð *Ð)ðjð js   ÁABÂ
CÂ#"C
Ã
CÚpayloadc                 óÀ   ‡— ddl }ddlmŠ ˆfd„}|                     ||¬¦  «        }|                      d||f¦  «         t
                               d|› d�¦  «         dS )	z�
        Publish an event transactionally by writing it to the outbox table.
        Needs an active psycopg2/psycopg3 cursor (cur).
        r   N)ÚUUIDc                 óP   •— t          | ‰¦  «        rt          | ¦  «        S t          ‚r
   )Ú
isinstanceÚstrÚ	TypeError)Úobjr$   s    €r   Úuuid_convertz-EventBus.publish_outbox.<locals>.uuid_convert'   s%   ø€ Ý˜#˜tÑ$Ô$ð  Ý˜3‘x”x�ÝˆOr   )Údefaultz|
            INSERT INTO erp_outbox_events (event_type, payload, status)
            VALUES (%s, %s, 'pending')
            z[EVENT BUS] Event z written to outbox.)ÚjsonÚuuidr$   ÚdumpsÚexecuter   Údebug)Úcurr   r"   r,   r*   Úpayload_jsonr$   s         @r   Úpublish_outboxzEventBus.publish_outbox   s›   ø€ ð 	ˆˆˆØÐÐÐÐÐð	ð 	ð 	ð 	ð 	ð
 —z’z '°<�zÑ@Ô@ˆà�Šðð ˜Ð&ñ	
ô 	
ð 	
õ 	�ŠÐI¨*ÐIÐIÐIÑJÔJÐJÐJÐJr   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   r   r   r   r!   ÚstaticmethodÚdictr3   © r   r   r   r      s¯   € € € € € ØHÐHð9ð 9ð 9ð? Cð ?°8ð ?ð ?ð ?ð ?ðjð j¨ð j°3ð jð jð jð jð ðK¨ð K°dð Kð Kð Kñ „\ðKð Kð Kr   r   )ÚloggingÚtypingr   r   r   r   Ú	getLoggerr4   r   r   Ú	event_busr:   r   r   ú<module>r?      s†   ðØ €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à	ˆÔ	˜8Ñ	$Ô	$€ð/Kð /Kð /Kð /Kð /Kñ /Kô /Kð /Kðb ˆH‰JŒJ€	€	€	r   