
    `fZ                     0   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mZmZmZ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 ddlmZ ddlmZ ddl m!Z! ddl"m#Z$ dZ%dZ&dZ' edd          Z(ddZ) G d de*          Z+ G d d          Z,dS )z/Sending/Receiving Messages (Kombu integration).    N)
namedtuple)Mapping)	timedelta)WeakValueDictionary)
ConnectionConsumerExchangeProducerQueuepools)	Broadcast)
maybe_list)cached_property)signals)anon_nodename)saferepr)indent)maybe_make_aware   )routes)AMQPQueuestask_messagei   zS
.> {0.name:<16} exchange={0.exchange.name}({0.exchange.type}) key={0.routing_key}
r   headers
propertiesbody
sent_eventutf-8c                 D    fd|                                  D             S )Nc                 p    i | ]2\  }}t          |t                    r|                              n||3S  )
isinstancebytesdecode).0kvencodings      A/var/www/html/env/lib/python3.11/site-packages/celery/app/amqp.py
<dictcomp>zutf8dict.<locals>.<dictcomp>%   sO     # # #1 #-Q"6"6=AHHXAq # # #    )items)dr)   s    `r*   utf8dictr/   $   s6    # # # #		# # # #r,   c                        e Zd ZdZdZ	 	 	 d fd	Z fdZ fdZd Zd Z	d	 Z
d
 Zd ZddZd Zd Zd Zd Zed             Z xZS )r   u  Queue name⇒ declaration mapping.

    Arguments:
        queues (Iterable): Initial list/tuple or dict of queues.
        create_missing (bool): By default any unknown queues will be
            added automatically, but if this flag is disabled the occurrence
            of unknown queues in `wanted` will raise :exc:`KeyError`.
        max_priority (int): Default x-max-priority for queues with none set.
    NTc                    t                                                       t                      | _        || _        || _        || _        |t          n|| _        || _	        |!t          |t                    sd |D             }|pi }|                                D ]=\  }}t          |t                    r|                     |          n | j        |fi | >d S )Nc                     i | ]
}|j         |S r"   )name)r&   qs     r*   r+   z#Queues.__init__.<locals>.<dictcomp>C   s    000Aafa000r,   )super__init__r   aliasesdefault_exchangedefault_routing_keycreate_missingr	   autoexchangemax_priorityr#   r   r-   r   add
add_compat)
selfqueuesr8   r:   r;   r<   r9   r3   r4   	__class__s
            r*   r6   zQueues.__init__8   s     	*,, 0#6 ,(4(<HH,(j&A&A00000F2||~~ 	P 	PGD!%a//ODHHQKKK_T_T5O5OQ5O5O	P 	Pr,   c                     	 | j         |         S # t          $ r$ t                                          |          cY S w xY wN)r7   KeyErrorr5   __getitem__)r?   r3   rA   s     r*   rE   zQueues.__getitem__H   sN    	-<%% 	- 	- 	-77&&t,,,,,	-s    +>>c                     | j         r|j        s| j         |_        t                                          ||           |j        r|| j        |j        <   d S d S rC   )r8   exchanger5   __setitem__aliasr7   )r?   r3   queuerA   s      r*   rH   zQueues.__setitem__N   sc      	3 	3!2END%(((; 	.(-DL%%%	. 	.r,   c                 ~    | j         r(|                     |                     |                    S t          |          rC   )r:   r=   new_missingrD   r?   r3   s     r*   __missing__zQueues.__missing__U   s9     	488D,,T22333tnnr,   c                 r    t          |t                    s | j        |fi |S |                     |          S )a  Add new queue.

        The first argument can either be a :class:`kombu.Queue` instance,
        or the name of a queue.  If the former the rest of the keyword
        arguments are ignored, and options are simply taken from the queue
        instance.

        Arguments:
            queue (kombu.Queue, str): Queue to add.
            exchange (kombu.Exchange, str):
                if queue is str, specifies exchange name.
            routing_key (str): if queue is str, specifies binding key.
            exchange_type (str): if queue is str, specifies type of exchange.
            **options (Any): Additional declaration options used when
                queue is a str.
        )r#   r   r>   _add)r?   rJ   kwargss      r*   r=   z
Queues.addZ   sB    " %'' 	4"4?533F333yyr,   c                     |                     d|                    d                     |d         ||d<   |                     t          j        |fi |          S )Nrouting_keybinding_key)
setdefaultgetrP   r   	from_dict)r?   r3   optionss      r*   r>   zQueues.add_compato   s]    ='++m*D*DEEE=!)%)GM"yy9999:::r,   c                     |j         |j         j        dk    r| j        |_         |j        s| j        |_        | j        (|j        i |_        |                     |j                   || |j        <   |S )N )rG   r3   r8   rS   r9   r<   queue_arguments_set_max_priority)r?   rJ   s     r*   rP   zQueues._addv   s{    >!U^%8B%>%>!2EN  	9 $ 8E($,(*%""5#8999 UZr,   c                 X    d|vr#| j         |                    d| j         i          S d S d S )Nzx-max-priority)r<   update)r?   argss     r*   r\   zQueues._set_max_priority   s>    4''D,=,I;; 0$2CDEEE (',I,Ir,   r   c                 &   | j         }|sdS d t          |                                          D             }|r#t          d                    |          |          S |d         dz   t          d                    |dd                   |          z   S )z/Format routing table into string for log dumps.rZ   c                 l    g | ]1\  }}t                                                               |          2S r"   )QUEUE_FORMATstripformat)r&   _r4   s      r*   
<listcomp>z!Queues.format.<locals>.<listcomp>   sF     4 4 4Aq ""$$++A.. 4 4 4r,   
r   r   N)consume_fromsortedr-   
textindentjoin)r?   r   indent_firstactiveinfos        r*   rd   zQueues.format   s    " 	24 4"6<<>>224 4 4 	7diioov666Aw~
499T!""X+>+> G GGGr,   c                 N     | j         |fi |}| j        || j        |j        <   |S )zAdd new task queue that'll be consumed from.

        The queue will be active even when a subset has been selected
        using the :option:`celery worker -Q` option.
        )r=   _consume_fromr3   )r?   rJ   rQ   r4   s       r*   
select_addzQueues.select_add   s:     DHU%%f%%))*Dqv&r,   c                 P     |r" fdt          |          D              _        dS dS )zSelect a subset of currently defined queues to consume from.

        Arguments:
            include (Sequence[str], str): Names of queues to consume from.
        c                 "    i | ]}||         S r"   r"   )r&   r3   r?   s     r*   r+   z!Queues.select.<locals>.<dictcomp>   s,     " " "%)d4j" " "r,   N)r   rp   )r?   includes   ` r*   selectzQueues.select   sP      	" " " "-7-@-@" " "D	 	r,   c                     rWt                    | j        !|                     fd| D                       S D ]}| j                            |d           dS dS )zDeselect queues so that they won't be consumed from.

        Arguments:
            exclude (Sequence[str], str): Names of queues to avoid
                consuming from.
        Nc              3   $   K   | ]
}|v|V  d S rC   r"   )r&   r'   excludes     r*   	<genexpr>z"Queues.deselect.<locals>.<genexpr>   s-      "G"Gaw6F6F16F6F6F6F"G"Gr,   )r   rp   ru   pop)r?   rx   rJ   s    ` r*   deselectzQueues.deselect   s      	4 ))G!){{"G"G"G"Gd"G"G"GGGG  4 4"&&ud3333	4 	44 4r,   c                 J    t          ||                     |          |          S rC   )r   r;   rM   s     r*   rL   zQueues.new_missing   s"    T4,,T22D999r,   c                 "    | j         | j         S | S rC   )rp   r?   s    r*   rh   zQueues.consume_from   s    )%%r,   )NNTNNN)r   T)__name__
__module____qualname____doc__rp   r6   rE   rH   rN   r=   r>   rP   r\   rd   rq   ru   r{   rL   propertyrh   __classcell__)rA   s   @r*   r   r   )   sL         M59378<P P P P P P - - - - -. . . . .  
     *; ; ;
 
 
F F F	H 	H 	H 	H	 	 		 	 	4 4 4 : : :   X    r,   r   c                      e Zd ZdZeZeZeZeZeZ	dZ
dZdZdZdZd Zed             Zed             Z	 	 ddZddZd	 Zdd
Z	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 ddZd Zd Zed             Zed             Zej        d             Zed             Zed             Zej        d             Zed             Z e Z!ed             Z"ed             Z#ed             Z$d Z%dS ) r   zApp AMQP API: app.amqp.Ni   c                     || _         | j        | j        d| _        | j         j                            | j                   d S )N)r      )app
as_task_v1
as_task_v2task_protocols_confbind_to_handle_conf_update)r?   r   s     r*   r6   zAMQP.__init__   sE    
 
 	t788888r,   c                 :    | j         | j        j        j                 S rC   )r   r   conftask_protocolr~   s    r*   create_task_messagezAMQP.create_task_message   s    "48=#>??r,   c                 *    |                                  S rC   )_create_task_senderr~   s    r*   send_task_messagezAMQP.send_task_message   s    '')))r,   c                     | j         j        }|j        }||j        }||j        }|s$|j        rt          |j        | j        |          f}|| j        n|}| 	                    || j        ||||          S )N)rG   rS   )
r   r   task_default_routing_keytask_create_missing_queuestask_queue_max_prioritytask_default_queuer   r8   r;   
queues_cls)r?   r@   r:   r;   r<   r   r9   s          r*   r   zAMQP.Queues   s     x}";!!<N7L 	?$1 	?D3%)%:(;= = = ?F .:-A))) 	D)>,(;
 
 	
r,   c                     t          j        | j        |p| j        | j                            d|          | j                  S )zReturn the current task router.r   )r   )_routesRouterr   r@   r   either)r?   r@   r:   s      r*   r   zAMQP.Router  sJ    ~dk6+@T["hoo.J.<> >CG8M M M 	Mr,   c                 V    t          j        | j        j        j                  | _        d S rC   )r   preparer   r   task_routes_rtabler~   s    r*   flush_routeszAMQP.flush_routes  s    tx}'@AAr,   c                     || j         j        j        } | j        |f||p*t	          | j        j                                                  d|S )N)acceptr@   )r   r   accept_contentr   listr@   rh   values)r?   channelr@   r   kws        r*   TaskConsumerzAMQP.TaskConsumer  sd    >X]1Ft}
"DT$+":"A"A"C"CDD
 
 
 
 	
r,   r   Fc                    |pd}|pi }t          |t          t          f          st          d          t          |t                    st          d          |ra|                     |d           |p| j                                        }|p| j        j        }t          |t          |          z   |          }t          |	t          j                  ra|                     |	d           |p| j                                        }|p| j        j        }t          |t          |	          z   |          }	t          |t                    s|o|                                }t          |	t                    s|	o|	                                }	|t          || j                  }|t          || j                  }|s|}fd|pg D             }i d	d
d|d|d|d|d|	d|d|d|
d||gd|d|d|d|d|pt%                      d|d|||d} t'          | ||pdd||||||df|r|||||||
||	d	nd           S ) Nr"   !task args must be a list or tuple(task keyword arguments must be a mapping	countdownseconds)tzexpiresc                 "    i | ]}||         S r"   r"   )r&   headerrX   s     r*   r+   z#AMQP.as_task_v2.<locals>.<dictcomp>D  s    NNNf&'&/NNNr,   langpytaskidshadowetagroupgroup_indexretries	timelimitroot_id	parent_idargsrepr
kwargsreproriginignore_resultreplaced_task_nesting)stamped_headersstampsrZ   correlation_idreply_to)	callbackserrbackschainchord)	uuidr   r   r3   r_   rQ   r   r   r   r   )r#   r   tuple	TypeErrorr   _verify_secondsr   nowtimezoner   r   numbersRealstr	isoformatr   argsrepr_maxsizekwargsrepr_maxsizer   r   )!r?   task_idr3   r_   rQ   r   r   group_idr   r   r   r   r   r   r   
time_limitsoft_time_limitcreate_sent_eventr   r   r   r   r   r   r   r   r   r   r   r   rX   r   r   s!                                 `  r*   r   zAMQP.as_task_v2  sj    zr2$u.. 	A?@@@&'** 	HFGGG 	  K888'C448#4H"i	2222x  C gw|,, 	  )444'C448#4H&i0000X  G #s## 	*)#--//C'3'' 	65'"3"3"5"5Gd&;<<H!&$*ABBJ 	GNNNN8M2NNN
D
D
 '
 f	

 3
 w
 X
 ;
 w
 *o6
 w
 
 
 *
 f/
  ]!
" $%:#
$  /'
 
 
, ")$N 
 f!* (""	 $ #
-"& $""
 
 
 )-1
 
 
 	
r,   c                    |pd}|pi }| j         }t          |t          t          f          st	          d          t          |t
                    st	          d          |rD|                     |d           |p| j                                        }|t          |          z   }t          |	t          j                  rD|                     |	d           |p| j                                        }|t          |	          z   }	|o|                                }|	o|	                                }	t          i ||pdd|||||||
||	|||||f||d	|r$||t          |          t          |          |
||	d
nd           S )Nr"   r   r   r   r   r   rZ   r   )r   r   r_   rQ   r   r   r   r   r   utcr   r   r   tasksetr   )r   r3   r_   rQ   r   r   r   r   )r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   )r?   r   r3   r_   rQ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   compat_kwargsr   s                            r*   r   zAMQP.as_task_v1v  s    zr2h$u.. 	A?@@@&'** 	HFGGG 	5  K888'C	)4444Cgw|,, 	7  )444'CIg6666G%cmmoo1g//11")$N 
  !*""&$(/:# 2 #- "6**""   )-? 
  
  
  	
r,   c                 D    |t           k     rt          | d|          |S )Nz is out of range: )INT_MIN
ValueError)r?   swhats      r*   r   zAMQP._verify_seconds  s,    w;;====>>>r,   c                 ,  	
 | j         j        j        
| j         j        j        | j         j        j        | j        	| j        t          j        j	        t          j        j
        t          j        j	        t          j        j
        t          j        j	        t          j        j
        | j        | j        | j         j        j        | j         j        j        | j         j        j        	 	 	 	 	 	 d	
fd	}|S )Nc                 J   |!n|}|\  }}}}|r|                     |           |r|                     |           |}|| }|'t          |t                    r|$|         }}n|j        }|
"	 |j        j        }
n# t          $ r Y nw xY w|
p}
| 	 |j        j        }n# t          $ r d}Y nw xY w|r|s|dk    rd|}}n||j        j        p}|p|j        p"}||rt          |t                    s|g}|!n|}|rt          fi |n}r &||||||||            | j        |f|||	p#|p|||
||d	|}r %|||||           (rvt          |t                    r1 '||d         ||d         |d         |d	         |d
                    n0 '||d         ||d         |d         |d	         |d                    |rU|p}|}t          |t                    r|j        }|                     |||d           |                    d|| ||           |S )NdirectrZ   )senderr   rG   rS   declarer   r   retry_policy)	rG   rS   
serializercompressionretryr   delivery_moder   r   )r   r   r   rG   rS   r   r   r   r   r   )r   r   r   r_   rQ   r   r   r_   rQ   r   )rJ   rG   rS   z	task-sent)r   r   )r^   r#   r   r3   rG   r   AttributeErrortyperS   r   dictpublishr   r	   ))producerr3   messagerG   rS   rJ   event_dispatcherr   r   r   r   r   r   r   exchange_typerQ   headers2r   r   r   qname_rpretevdexnameafter_receiversbefore_receiversdefault_compressordefault_delivery_modedefault_evdr8   default_policydefault_queuedefault_retrydefault_rkeydefault_serializerr@   send_after_publishsend_before_publishsend_task_sentsent_receiverss)                            r*   r   z3AMQP._create_task_sender.<locals>.send_task_message  s    &+]MME5<2Hj$
 )((( *!!&)))E}!1% eS)) '#(&-5EE!JE$$)N$@MM%   D - F1F$-$)N$7MM% - - -$,MMM-  OK O]h5N5N(*E+! >.B2B)NU->N,5E91M1M ' &+]MME;G '477,777&    ##d%;#X)	    #("
!'%;);'=+=#+W 
 
 
 
C  O""$T8,4+O O O O dE** "N#Xd^$!!WT!W$UOXg5F     #N#T$Zd!&\$x. Ki   
  N&5+!fh// )#[F!!" &#.# #   
 K$E  N N NJs$   1A> >
B
BB" "B10B1)NNNNNNNNNNNN)r   r   task_publish_retrytask_publish_retry_policytask_default_delivery_moder	  r@   r   before_task_publishsend	receiversafter_task_publish	task_sent_event_dispatcherr8   r   task_serializertask_compression)r?   r   r  r  r  r  r  r8   r  r	  r
  r  r  r@   r  r  r  r  s     @@@@@@@@@@@@@@@@r*   r   zAMQP._create_task_sender  s_   8@ $ H*%9>"6@$7<!4> */ *4,0x}=!X]:!X]; FJ/37;=A8<:>a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	 a	D ! r,   c                 :    | j         | j        j        j                 S rC   )r@   r   r   r   r~   s    r*   r	  zAMQP.default_queue0  s    {48=;<<r,   c                 J    |                      | j        j        j                  S )u"   Queue name⇒ declaration mapping.)r   r   r   task_queuesr~   s    r*   r@   zAMQP.queues4  s     {{48=4555r,   c                 ,    |                      |          S rC   )r   )r?   r@   s     r*   r@   zAMQP.queues9  s    {{6"""r,   c                 F    | j         |                                  | j         S rC   )r   r   r~   s    r*   r   zAMQP.routes=  s$    <|r,   c                 *    |                                  S rC   )r   r~   s    r*   routerzAMQP.routerC  s    {{}}r,   c                     |S rC   r"   )r?   values     r*   r"  zAMQP.routerG  s    r,   c                     | j         It          j        | j                                                 | _         | j        j        j        | j         _        | j         S rC   )_producer_poolr   	producersr   connection_for_writepoollimitr~   s    r*   producer_poolzAMQP.producer_poolK  sF    &"'/--//#1D(,(;D%""r,   c                 ^    t          | j        j        j        | j        j        j                  S rC   )r	   r   r   task_default_exchangetask_default_exchange_typer~   s    r*   r8   zAMQP.default_exchangeT  s*    ;@B B 	Br,   c                 $    | j         j        j        S rC   )r   r   
enable_utcr~   s    r*   r   zAMQP.utcY  s    x}''r,   c                 B    | j         j                            d          S )NF)enabled)r   events
Dispatcherr~   s    r*   r  zAMQP._event_dispatcher]  s     x))%)888r,   c                 p    d|v sd|v r-|                                   |                                 | _        d S )Nr   )r   r   r"  )r?   r_   rQ   s      r*   r   zAMQP._handle_conf_updatec  s=    V##}'<'<++--DKr,   )NNN)NN)NNNNNNNr   NNNNNNFNNNNNNNFNNNr   )NNNNNNNr   NNNNNNFNNNNN)&r   r   r   r   r   r   r
   BrokerConnectionr   r   r   r&  r;   r   r   r6   r   r   r   r   r   r   r   r   r   r   r	  r@   setterr   r   r"  r+  publisher_poolr8   r   r  r   r"   r,   r*   r   r      s       !!JHH "J G N L  9 9 9 @ @ _@ * * _* -1/3
 
 
 
*M M M MB B B
 
 
 
 ;?HL26;?48DH?Cei)*\
 \
 \
 \
| ;?HL)*GK48DH37:
 :
 :
 :
x  
w! w! w!r = = _= 6 6 _6 ]# # ]#   X
   _ ]  ] # # X# #NB B _B ( ( _( 9 9 _9
    r,   r   )r   )-r   r   collectionsr   collections.abcr   datetimer   weakrefr   kombur   r   r	   r
   r   r   kombu.commonr   kombu.utils.functionalr   kombu.utils.objectsr   celeryr   celery.utils.nodenamesr   celery.utils.safereprr   celery.utils.textr   rj   celery.utils.timer   rZ   r   r   __all__r   rb   r   r/   r   r   r   r"   r,   r*   <module>rG     s   5 5  " " " " " " # # # # # #       ' ' ' ' ' ' H H H H H H H H H H H H H H H H " " " " " " - - - - - - / / / / / /       0 0 0 0 0 0 * * * * * * 2 2 2 2 2 2 . . . . . .      
, 
 z.IK K# # # #
U U U U UT U U Upf f f f f f f f f fr,   