§
    `¦·f#  ã                   ó”   — d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZmZmZ d
Z G d„ d¦  «        ZdS )zEvent dispatcher sends events.é    N)ÚdefaultdictÚdeque)ÚProducer)Úapp_or_default)Úanon_nodename)Ú	utcoffseté   )ÚEventÚget_exchangeÚ
group_from)ÚEventDispatcherc                   ó°   — e Zd ZdZdhZdZdZdZ	 	 	 	 dd„Zd„ Z	d	„ Z
d
„ Zd„ Zdefd„Zddefd„Zdeddefd„Zdd„Zd„ Zd„ Zd„ Zd„ Z eee¦  «        ZdS )r   a0  Dispatches event messages.

    Arguments:
        connection (kombu.Connection): Connection to the broker.

        hostname (str): Hostname to identify ourselves as,
            by default uses the hostname returned by
            :func:`~celery.utils.anon_nodename`.

        groups (Sequence[str]): List of groups to send events for.
            :meth:`send` will ignore send requests to groups not in this list.
            If this is :const:`None`, all events will be sent.
            Example groups include ``"task"`` and ``"worker"``.

        enabled (bool): Set to :const:`False` to not actually publish any
            events, making :meth:`send` a no-op.

        channel (kombu.Channel): Can be used instead of `connection` to specify
            an exact channel to use when sending events.

        buffer_while_offline (bool): If enabled events will be buffered
            while the connection is down. :meth:`flush` must be called
            as soon as the connection is re-established.

    Note:
        You need to :meth:`close` this after use.
    ÚsqlNTr	   é   c                 óú  — t          |p| j        ¦  «        | _        || _        || _        |pt	          ¦   «         | _        || _        |
pt          ¦   «         | _        || _	        || _
        t          t          ¦  «        | _        t          j        ¦   «         | _        d | _        t%          ¦   «         | _        |p| j        j        j        | _        t/          ¦   «         | _        t/          ¦   «         | _        t/          |pg ¦  «        | _        t6          j         t6          j         g| _        | j        j        | _        |	| _         |s|r|j        j!        | _        || _"        | j        p| j         #                    ¦   «         }tI          || j        j        j%        ¬¦  «        | _&        |j'        j(        | j)        v rd| _"        | j"        r|  *                    ¦   «          d| j        i| _+        tY          j-        ¦   «         | _.        d S )N)ÚnameFÚhostname)/r   ÚappÚ
connectionÚchannelr   r   Úbuffer_while_offlineÚ	frozensetÚbuffer_groupÚbuffer_limitÚon_send_bufferedr   ÚlistÚ_group_bufferÚ	threadingÚLockÚmutexÚproducerr   Ú_outbound_bufferÚconfÚevent_serializerÚ
serializerÚsetÚ
on_enabledÚon_disabledÚgroupsÚtimeÚtimezoneÚaltzoneÚtzoffsetÚclockÚdelivery_modeÚclientÚenabledÚconnection_for_writer   Úevent_exchangeÚexchangeÚ	transportÚdriver_typeÚDISABLED_TRANSPORTSÚenableÚheadersÚosÚgetpidÚpid)Úselfr   r   r1   r   r   r   r%   r)   r/   r   r   r   Úconninfos                 úJ/var/www/html/env/lib/python3.11/site-packages/celery/events/dispatcher.pyÚ__init__zEventDispatcher.__init__:   s©  € õ " # /¨¬Ñ2Ô2ˆŒØ$ˆŒØˆŒØ Ð3¥M¡O¤OˆŒØ$8ˆÔ!Ø(Ð7­I©K¬KˆÔØ(ˆÔØ 0ˆÔÝ(­Ñ.Ô.ˆÔÝ”^Ñ%Ô%ˆŒ
ØˆŒÝ %¡¤ˆÔØ$ÐF¨¬¬Ô(FˆŒÝ™%œ%ˆŒÝ™5œ5ˆÔÝ˜&˜, BÑ'Ô'ˆŒÝœ-˜­$¬,¨Ð7ˆŒØ”X”^ˆŒ
Ø*ˆÔØð 	8˜gð 	8Ø%Ô0Ô7ˆDŒOØˆŒØ”?ÐE d¤h×&CÒ&CÑ&EÔ&EˆÝ$ XØ*.¬(¬-Ô*FðHñ Hô HˆŒàÔÔ)¨TÔ-EÐEÐEØ ˆDŒLØŒ<ð 	ØKŠK‰MŒMˆMØ" D¤MÐ2ˆŒÝ”9‘;”;ˆŒˆˆó    c                 ó   — | S ©N© ©r=   s    r?   Ú	__enter__zEventDispatcher.__enter__^   s   € ØˆrA   c                 ó.   — |                       ¦   «          d S rC   )Úclose)r=   Úexc_infos     r?   Ú__exit__zEventDispatcher.__exit__a   s   € Ø
Š
‰ŒˆˆˆrA   c                 ó˜   — t          | j        p| j        | j        | j        d¬¦  «        | _        d| _        | j        D ]} |¦   «          Œd S )NF)r4   r%   Úauto_declareT)r   r   r   r4   r%   r!   r1   r'   ©r=   Úcallbacks     r?   r8   zEventDispatcher.enabled   sa   € Ý  ¤Ð!@°´Ø*.¬-Ø,0¬OØ.3ð5ñ 5ô 5ˆŒð ˆŒØœð 	ð 	ˆHØˆH‰JŒJˆJˆJð	ð 	rA   c                 óv   — | j         r/d| _         |                      ¦   «          | j        D ]} |¦   «          Œd S d S )NF)r1   rH   r(   rM   s     r?   ÚdisablezEventDispatcher.disablem   sS   € ØŒ<ð 	Ø ˆDŒLØJŠJ‰LŒLˆLØ Ô,ð ð Ø‘
”


ð		ð 	ðð rA   Fc           	      ó  — |rdn| j                              ¦   «         } ||f| j        t          ¦   «         | j        |dœ|¤Ž}| j        5   | j        ||fd|                     dd¦  «        i|¤Žcddd¦  «         S # 1 swxY w Y   dS )au  Publish event using custom :class:`~kombu.Producer`.

        Arguments:
            type (str): Event type name, with group separated by dash (`-`).
                fields: Dictionary of event fields, must be json serializable.
            producer (kombu.Producer): Producer instance to use:
                only the ``publish`` method will be called.
            retry (bool): Retry in the event of connection failure.
            retry_policy (Mapping): Map of custom retry policy options.
                See :meth:`~kombu.Connection.ensure`.
            blind (bool): Don't set logical clock value (also don't forward
                the internal logical clock).
            Event (Callable): Event type used to create event.
                Defaults to :func:`Event`.
            utcoffset (Callable): Function returning the current
                utc offset in hours.
        N©r   r   r<   r.   Úrouting_keyú-ú.)r.   Úforwardr   r   r<   r    Ú_publishÚreplace)	r=   ÚtypeÚfieldsr!   Úblindr
   Úkwargsr.   Úevents	            r?   ÚpublishzEventDispatcher.publisht   s  € ð& Ð7 4¤:×#5Ò#5Ñ#7Ô#7ˆØdð ; T¤]½i¹k¼kØœ(¨%ð;ð ;Ø39ð;ð ;ˆàŒZð 	Oð 	OØ 4”= ¨ð Oð OØ-1¯\ª\¸#¸sÑ-CÔ-CðOØGMðOð Oð	Oð 	Oð 	Oð 	Oñ 	Oô 	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oøøøð 	Oð 	Oð 	Oð 	Oð 	Oð 	Os   Á	%A;Á;A?ÂA?c                 óö   — | j         }	 |                     |||j        |||g| j        | j        | j        ¬¦	  «	         d S # t          $ r0}| j        s‚ | j         	                    |||f¦  «         Y d }~d S d }~ww xY w)N)rS   r4   ÚretryÚretry_policyÚdeclarer%   r9   r/   )
r4   r^   r   r%   r9   r/   Ú	Exceptionr   r"   Úappend)	r=   r]   r!   rS   r`   ra   r   r4   Úexcs	            r?   rW   zEventDispatcher._publishŽ   s¿   € à”=ˆð	DØ×ÒØØ'Ø!œØØ)Ø!˜
Øœ?ØœØ"Ô0ð ñ 
ô 
ð 
ð 
ð 
øõ ð 	Dð 	Dð 	DØÔ,ð ØØÔ!×(Ò(¨%°¸cÐ)BÑCÔCÐCÐCÐCÐCÐCÐCÐCøøøøð	Døøøs   ‰3> ¾
A8Á%A3Á3A8c           	      óô  — | j         rð| j        t          |¦  «        }	}|r|	|vrdS |	| j        v r¨| j                             ¦   «         }
 ||f| j         |¦   «         | j        |
dœ|¤Ž}| j        |	         }| 	                    |¦  «         t          |¦  «        | j        k    r|                      ¦   «          dS | j        r|                      ¦   «          dS dS |                      ||| j        ||||¬¦  «        S dS )aÆ  Send event.

        Arguments:
            type (str): Event type name, with group separated by dash (`-`).
            retry (bool): Retry in the event of connection failure.
            retry_policy (Mapping): Map of custom retry policy options.
                See :meth:`~kombu.Connection.ensure`.
            blind (bool): Don't set logical clock value (also don't forward
                the internal logical clock).
            Event (Callable): Event type used to create event,
                defaults to :func:`Event`.
            utcoffset (Callable): unction returning the current utc offset
                in hours.
            **fields (Any): Event fields -- must be json serializable.
        NrR   )r[   r
   r`   ra   )r1   r)   r   r   r.   rV   r   r<   r   rd   Úlenr   Úflushr   r^   r!   )r=   rY   r[   r   r`   ra   r
   rZ   r)   Úgroupr.   r]   Úbufs                r?   ÚsendzEventDispatcher.send¢   sC  € ð" Œ<ð 	?Ø œK­°DÑ)9Ô)9EˆFØð ˜% vÐ-Ð-ØØ˜Ô)Ð)Ð)Øœ
×*Ò*Ñ,Ô,Ø˜˜dð C¨T¬]Ø(1¨	©¬Ø"&¤(°%ðCð Cà;AðCð Cð Ô(¨Ô/Ø—
’
˜5Ñ!Ô!Ð!Ýs‘8”8˜tÔ0Ò0Ð0Ø—J’J‘L”LLLLØÔ*ð ,Ø×)Ò)Ñ+Ô+Ð+Ð+Ð+ð,ð ,ð —|’| D¨&°$´-ÀuØ*/°uØ1=ð $ñ ?ô ?ð ?ð!	?ð 	?rA   c                 ó  — |r’t          | j        ¦  «        }	 | j        5  |D ]"\  }}}|                      || j        |¦  «         Œ#	 ddd¦  «         n# 1 swxY w Y   | j                             ¦   «          n# | j                             ¦   «          w xY w|rh| j        5  | j                             ¦   «         D ]+\  }}|                      || j        d|z  ¦  «         g |dd…<   Œ,	 ddd¦  «         dS # 1 swxY w Y   dS dS )zFlush the outbound buffer.Nz%s.multi)r   r"   r    rW   r!   Úclearr   Úitems)	r=   Úerrorsr)   rj   r]   rS   Ú_ri   Úeventss	            r?   rh   zEventDispatcher.flushÇ   sÌ  € àð 	.ÝtÔ,Ñ-Ô-ˆCð.Ø”Zð Ið IØ14ð Ið IÑ-˜˜{¨AØŸš e¨T¬]¸KÑHÔHÐHÐHðIðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Ið Ô%×+Ò+Ñ-Ô-Ð-Ð-øÔ%×+Ò+Ñ-Ô-Ð-Ð-øøøØð 	#Ø”ð #ð #Ø%)Ô%7×%=Ò%=Ñ%?Ô%?ð #ð #‘ME˜6Ø—M’M &¨$¬-¸ÀeÑ9KÑLÔLÐLØ "F˜1˜1˜1‘IIð#ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #ð	#ð 	#sA   ˜A7 Ÿ&AÁA7 ÁAÁA7 ÁAÁA7 Á7BÂAC2Ã2C6Ã9C6c                 óD   — | j                              |j         ¦  «         dS )z-Copy the outbound buffer of another instance.N)r"   Úextend)r=   Úothers     r?   Úextend_bufferzEventDispatcher.extend_buffer×   s"   € àÔ×$Ò$ UÔ%;Ñ<Ô<Ð<Ð<Ð<rA   c                 óx   — | j                              ¦   «         o| j                              ¦   «          d| _        dS )zClose the event dispatcher.N)r    ÚlockedÚreleaser!   rE   s    r?   rH   zEventDispatcher.closeÛ   s2   € àŒ
×ÒÑÔÐ4 ¤
× 2Ò 2Ñ 4Ô 4øØˆŒˆˆrA   c                 ó   — | j         S rC   ©r!   rE   s    r?   Ú_get_publisherzEventDispatcher._get_publisherà   s
   € ØŒ}ÐrA   c                 ó   — || _         d S rC   rz   )r=   r!   s     r?   Ú_set_publisherzEventDispatcher._set_publisherã   s   € Ø ˆŒˆˆrA   )NNTNTNNNr	   Nr   N)TT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   r   r'   r(   r@   rF   rJ   r8   rP   r
   r^   r   rW   rk   rh   ru   rH   r{   r}   ÚpropertyÚ	publisherrD   rA   r?   r   r      sX  € € € € € ðð ð8 !˜'Ðà
€Cð €Jð €Kà?CØ>BØ=>ØFJð"ð "ð "ð "ðHð ð ðð ð ðð ð ðð ð ð  5ðOð Oð Oð Oð4 <AØ"¨iðDð Dð Dð Dð(  %°	ÀØ eð#?ð #?ð #?ð #?ðJ#ð #ð #ð #ð =ð =ð =ðð ð ð
ð ð ð!ð !ð !à˜¨Ñ8Ô8€I€I€IrA   r   )r   r:   r   r*   Úcollectionsr   r   Úkombur   Ú
celery.appr   Úcelery.utils.nodenamesr   Úcelery.utils.timer   r]   r
   r   r   Ú__all__r   rD   rA   r?   ú<module>rŠ      sè   ðØ $Ð $à 	€	€	€	Ø Ð Ð Ð Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ð Ð à %Ð %Ð %Ð %Ð %Ð %Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à
€ðR9ð R9ð R9ð R9ð R9ñ R9ô R9ð R9ð R9ð R9rA   