
    leJi%d                     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      U/var/www/html/movieo_spanner_bot/venv/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`.
        create_missing_queue_type (str): Type of queue to create for missing queues.
            Must be either 'classic' (default) or 'quorum'. If set to 'quorum',
            the broker will declare new queues using the quorum type.
        create_missing_queue_exchange_type (str): Type of exchange to use
            when creating missing queues. If not set, the default exchange type
            will be used. If set, the exchange type will be set to this value
            when creating missing queues.
        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>O   s    000Aafa000r,   )super__init__r   aliasesdefault_exchangedefault_routing_keycreate_missingcreate_missing_queue_type"create_missing_queue_exchange_typer	   autoexchangemax_priorityr#   r   r-   r   add
add_compat)selfqueuesr8   r:   r;   r<   r=   r>   r9   r3   r4   	__class__s              r*   r6   zQueues.__init__?   s     	*,, 0#6 ,)B&2T/(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__)rA   r3   rC   s     r*   rG   zQueues.__getitem__T   sN    	-<%% 	- 	- 	-77&&t,,,,,	-s    +>>c                     | j         r|j        s| j         |_        t                                          ||           |j        r|| j        |j        <   d S d S rE   )r8   exchanger5   __setitem__aliasr7   )rA   r3   queuerC   s      r*   rJ   zQueues.__setitem__Z   sc      	3 	3!2END%(((; 	.(-DL%%%	. 	.r,   c                 ~    | j         r(|                     |                     |                    S t          |          rE   )r:   r?   new_missingrF   )rA   r3   s     r*   __missing__zQueues.__missing__a   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)rA   rL   kwargss      r*   r?   z
Queues.addf   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getrQ   r   	from_dict)rA   r3   optionss      r*   r@   zQueues.add_compat{   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 )rI   r3   r8   rT   r9   r>   queue_arguments_set_max_priority)rA   rL   s     r*   rQ   zQueues._add   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)rA   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.r[   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)rA   r   indent_firstactiveinfos        r*   re   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   )rA   rL   rR   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   rA   s     r*   r+   z!Queues.select.<locals>.<dictcomp>   s,     " " "%)d4j" " "r,   N)r   rq   )rA   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 rE   r"   )r&   r'   excludes     r*   	<genexpr>z"Queues.deselect.<locals>.<genexpr>   s-      "G"Gaw6F6F16F6F6F6F"G"Gr,   )r   rq   rv   pop)rA   ry   rL   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                    d }| j         r5| j         dk    r*| j         dvrt          d| j          d          d| j         i}| j        rt          || j                  }n|                     |          }t          ||||          S )Nclassic)r~   quorumzInvalid queue type 'z*'. Valid types are 'classic' and 'quorum'.x-queue-type)r\   )r;   
ValueErrorr<   r	   r=   r   )rA   r3   r\   rI   s       r*   rN   zQueues.new_missing   s    ) 	Od.LPY.Y.Y-5JJJ >4+I > > >    .t/MNO2 	/d&MNNHH((..HT8T?KKKKr,   c                 "    | j         | j         S | S rE   )rq   rA   s    r*   ri   zQueues.consume_from   s    )%%r,   )NNTNNNNN)r   T)__name__
__module____qualname____doc__rq   r6   rG   rJ   rO   r?   r@   rQ   r]   re   rr   rv   r|   rN   propertyri   __classcell__)rC   s   @r*   r   r   )   sT        & M 15;?BF37	P P P P P P*- - - - -. . . . .  
     *; ; ;
 
 
F F F	H 	H 	H 	H	 	 		 	 	4 4 4 L L L"   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)rA   r   s     r*   r6   zAMQP.__init__   sE    
 
 	t788888r,   c                 :    | j         | j        j        j                 S rE   )r   r   conftask_protocolr   s    r*   create_task_messagezAMQP.create_task_message  s    "48=#>??r,   c                 *    |                                  S rE   )_create_task_senderr   s    r*   send_task_messagezAMQP.send_task_message  s    '')))r,   c           
      :   | j         j        }|j        }||j        }||j        }||j        }||j        }|s6|j        r/d }	|j        dk    rddi}	t          |j        | j
        ||	          f}|| j        n|}|                     || j
        ||||||          S )Nr   r   )rI   rT   r\   )r8   r:   r;   r<   r=   r>   r9   )r   r   task_default_routing_keytask_create_missing_queuestask_create_missing_queue_type'task_create_missing_queue_exchange_typetask_queue_max_prioritytask_default_queuetask_default_queue_typer   r8   r=   
queues_cls)
rA   rB   r:   r;   r<   r=   r>   r   r9   r\   s
             r*   r   zAMQP.Queues  s     x}";!!<N$,(,(K%-5151].7L 	?$1 	?"O+x77#18"<D3%)%:(;,;= = = ?F .:-A))) 	!2)&?/Q%% 3  	
 	
 		
r,   c                     t          j        | j        |p| j        | j                            d|          | j                  S )zReturn the current task router.r   )r   )_routesRouterr   rB   r   either)rA   rB   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 rE   )r   preparer   r   task_routes_rtabler   s    r*   flush_routeszAMQP.flush_routes4  s    tx}'@AAr,   c                     || j         j        j        } | j        |f||p*t	          | j        j                                                  d|S )N)acceptrB   )r   r   accept_contentr   listrB   ri   values)rA   channelrB   r   kws        r*   TaskConsumerzAMQP.TaskConsumer7  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&   headerrY   s     r*   r+   z#AMQP.as_task_v2.<locals>.<dictcomp>l  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stampsr[   correlation_idreply_to)	callbackserrbackschainchord)	uuidr   r   r3   r`   rR   r   r   r   r   )r#   r   tuple	TypeErrorr   _verify_secondsr   nowtimezoner   r   numbersRealstr	isoformatr   argsrepr_maxsizekwargsrepr_maxsizer   r   )!rA   task_idr3   r`   rR   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   rY   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   r[   r   )r   r   r`   rR   r   r   r   r   r   utcr   r   r   tasksetr   )r   r3   r`   rR   r   r   r   r   )r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   )rA   r   r3   r`   rR   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_v1  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_MINr   )rA   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                 N   |#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directr[   )senderr   rI   rT   declarer   r   retry_policy)rI   rT   
serializercompressionretryr   delivery_moder   r   timeoutconfirm_timeout)r   r   r   rI   rT   r   r   r   r   r   )r   r   r   r`   rR   r   r   r`   rR   r   )rL   rI   rT   z	task-sent)r   r   )r_   r#   r   r3   rI   r   AttributeErrortyperT   r   dictpublishr   r	   )+producerr3   messagerI   rT   rL   event_dispatcherr   r   r   r   r   r   r   exchange_typer   r   rR   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_serializerrB   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)NNNNNNNNNNNNNN)r   r   task_publish_retrytask_publish_retry_policytask_default_delivery_moder  rB   r   before_task_publishsend	receiversafter_task_publish	task_sent_event_dispatcherr8   r   task_serializertask_compression)rA   r   r  r  r  r  r  r8   r  r  r  r  r  rB   r  r  r  r  s     @@@@@@@@@@@@@@@@r*   r   zAMQP._create_task_sender  sb   8@ $ H*%9>"6@$7<!4> */ *4,0x}=!X]:!X]; FJ/37;=A8<:><@c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	 c	H ! r,   c                 :    | j         | j        j        j                 S rE   )rB   r   r   r   r   s    r*   r  zAMQP.default_queueZ  s    {48=;<<r,   c                 J    |                      | j        j        j                  S )u"   Queue name⇒ declaration mapping.)r   r   r   task_queuesr   s    r*   rB   zAMQP.queues^  s     {{48=4555r,   c                 ,    |                      |          S rE   )r   )rA   rB   s     r*   rB   zAMQP.queuesc  s    {{6"""r,   c                 F    | j         |                                  | j         S rE   )r   r   r   s    r*   r   zAMQP.routesg  s$    <|r,   c                 *    |                                  S rE   )r   r   s    r*   routerzAMQP.routerm  s    {{}}r,   c                     |S rE   r"   )rA   values     r*   r+  zAMQP.routerq  s    r,   c                     | j         It          j        | j                                                 | _         | j        j        j        | j         _        | j         S rE   )_producer_poolr   	producersr   connection_for_writepoollimitr   s    r*   producer_poolzAMQP.producer_poolu  sF    &"'/--//#1D(,(;D%""r,   c                 ^    t          | j        j        j        | j        j        j                  S rE   )r	   r   r   task_default_exchangetask_default_exchange_typer   s    r*   r8   zAMQP.default_exchange~  s*    ;@B B 	Br,   c                 $    | j         j        j        S rE   )r   r   
enable_utcr   s    r*   r   zAMQP.utc  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+  )rA   r`   rR   s      r*   r   zAMQP._handle_conf_update  s=    V##}'<'<++--DKr,   )NNNNN)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  rB   setterr   r   r+  r4  publisher_poolr8   r   r"  r   r"   r,   r*   r   r      s       !!JHH "J G N L  9 9 9 @ @ _@ * * _* MQX\!
 !
 !
 !
FM M M MB B B
 
 
 
 ;?HL26;?48DH?Cei)*\
 \
 \
 \
| ;?HL)*GK48DH37:
 :
 :
 :
x  
y! y! y!v = = _= 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   rk   celery.utils.timer   r[   r   r   __all__r   rc   r   r/   r   r   r   r"   r,   r*   <module>rP     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# # # #
o o o o oT o o odv v v v v v v v v vr,   