
    `f                         d Z ddl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 ddlmZ dd	lmZ d
dlmZ dZdZ edd          Z G d de	          ZdS )zEvent receiver implementation.    N)
itemgetter)Queue)maybe_channel)ConsumerMixin)uuid)app_or_default)adjust_timestamp   )get_exchange)EventReceiver	utcoffset	timestampc                       e Zd ZdZdZ	 	 	 ddZd Zd Z	 ddZdd	Z	dd
Z
ddZdej        eeefdZeefdZed             ZdS )r   a?  Capture events.

    Arguments:
        connection (kombu.Connection): Connection to the broker.
        handlers (Mapping[Callable]): Event handlers.
            This is  a map of event type names and their handlers.
            The special handler `"*"` captures all events that don't have a
            handler.
    N#c
           	         t          |p| j                  | _        t          |          | _        |i n|| _        || _        |pt                      | _        |p| j        j        j	        | _
        t          | j        p| j                                        | j        j        j                  | _        || j        j        j        }|	| j        j        j        }	t%          d                    | j
        | j        g          | j        | j        dd||	          | _        | j        j        | _        | j        j        | _        | j        j        | _        || j        j        j        dh}|| _        d S )N)name.TF)exchangerouting_keyauto_deletedurablemessage_ttlexpiresjson)r   appr   channelhandlersr   r   node_idconfevent_queue_prefixqueue_prefixr   
connectionconnection_for_writeevent_exchanger   event_queue_ttlevent_queue_expiresr   joinqueueclockadjustadjust_clockforwardforward_clockevent_serializeraccept)
selfr   r   r   r   r   r"   r0   	queue_ttlqueue_expiress
             H/var/www/html/env/lib/python3.11/site-packages/celery/events/receiver.py__init__zEventReceiver.__init__#   sO    "#/22$W--&.H&($&&(LDHM,L$O>tx<<>>-/ / / 5I  HM=MHHd'677](e!!
 
 

 X^
 J-!Z/>hm4f=F    c                     | j                             |          p| j                             d          }|o ||           dS  dS )z3Process event by dispatching to configured handler.*N)r   get)r1   typeeventhandlers       r4   processzEventReceiver.processB   sK    -##D))CT]->->s-C-C"GGENNNNN"""r6   c                 D     || j         g| j        gd| j                  gS )NT)queues	callbacksno_ackr0   )r)   _receiver0   )r1   Consumerr   s      r4   get_consumerszEventReceiver.get_consumersG   s4    $(M?4 $- - - . 	.r6   Tc                 :    |r|                      |           d S d S )N)r   )wakeup_workers)r1   r#   r   	consumerswakeupkwargss         r4   on_consume_readyzEventReceiver.on_consume_readyL   s1     	100000	1 	1r6   c                 2    |                      |||          S )NlimittimeoutrH   consume)r1   rM   rN   rH   s       r4   itercapturezEventReceiver.itercaptureQ   s    ||%|HHHr6   c                 <    |                      |||          D ]}dS )zOpen up a consumer capturing events.

        This has to run in the main process, and it will never stop
        unless :attr:`EventDispatcher.should_stop` is set to True, or
        forced via :exc:`KeyboardInterrupt` or :exc:`SystemExit`.
        rL   NrO   )r1   rM   rN   rH   _s        r4   capturezEventReceiver.captureT   s2     E76JJ 	 	A	 	r6   c                 T    | j         j                            d| j        |           d S )N	heartbeat)r#   r   )r   control	broadcastr#   )r1   r   s     r4   rF   zEventReceiver.wakeup_workers^   s8    "";.2o+2 	# 	4 	4 	4 	4 	4r6   c                    |d         }|dk    r,| j         j        pd|z   x}|d<   |                     |           nF	 |d         }	|                     |	           n'# t          $ r |                                 |d<   Y nw xY w|r/	  ||          \  }
} |||
          |d<   n# t          $ r Y nw xY w |            |d<   ||fS )Nr:   z	task-sentr
   r*   r   local_received)r*   valuer,   KeyErrorr.   )r1   bodylocalizenowtzfieldsr	   CLIENT_CLOCK_SKEWr:   _cr*   offsetr   s               r4   event_from_messagez EventReceiver.event_from_messagec   s(    F|;"&*"2"7a;L!LLBgb!!!!)W !!%((((  5 5 5 $ 2 2 4 4W5
  	HH$,HTNN!	 %5$4Y$G$G[!!     "%Tzs#   A !A>=A>B" "
B/.B/c                      |||          r | j         | j        cfd|D              d S  | j         |                     |            d S )Nc                 ,    g | ]}  |           S  rg   ).0r;   from_messager=   s     r4   
<listcomp>z*EventReceiver._receive.<locals>.<listcomp>   s*    ===uWWll5))*===r6   )r=   rd   )r1   r]   messagelist
isinstanceri   r=   s        @@r4   rB   zEventReceiver._receive~   so    :dD!! 	9$(L$2I!G\===========DL$11$778888r6   c                 6    | j         r| j         j        j        nd S N)r   r#   client)r1   s    r4   r#   zEventReceiver.connection   s    15Gt|&--4Gr6   )Nr   NNNNNN)T)NNTro   )__name__
__module____qualname____doc__r   r5   r=   rD   rJ   rQ   rT   rF   time	_TZGETTERr	   ra   rd   rl   rm   rB   propertyr#   rg   r6   r4   r   r      s         C;>6:<@   ># # #
. . . !%1 1 1 1
I I I I   4 4 4 4
 15#y9,<->   6 ,0J 9 9 9 9 H H XH H Hr6   r   )rt   ru   operatorr   kombur   kombu.connectionr   kombu.mixinsr   celeryr   
celery.appr   celery.utils.timer	   r;   r   __all__ra   rv   r   rg   r6   r4   <module>r      s   $ $              * * * * * * & & & & & &       % % % % % % . . . . . .      
 J{K00	qH qH qH qH qHM qH qH qH qH qHr6   