
    h\                        S r SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
JrJrJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK"J#r$  Sr%Sr&Sr'\" SS5      r(SS jr) " S S\*5      r+ " S S5      r,g)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_eventc                     U R                  5        VVs0 s H.  u  p#[        U[        5      (       a  UR                  U5      OUU_M0     snn$ s  snnf N)items
isinstancebytesdecode)dencodingkvs       7D:\TimeStamps\venv\Lib\site-packages\celery/app/amqp.pyutf8dictr*   $   sK    	#! #-Q"6"6AHHXAq@!# # #s   5Ac                      ^  \ rS rSrSrSr   SU 4S jjrU 4S jrU 4S jrS r	S r
S	 rS
 rS rSS jrS rS rS rS r\S 5       rSrU =r$ )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.
Nc                   > [         T	U ]  5         [        5       U l        X l        X`l        X0l        Uc  [        OUU l        XPl	        Ub1  [        U[        5      (       d  U Vs0 s H  owR                  U_M     nnU=(       d    0 nUR                  5        H@  u  p[        U[        5      (       a  U R                  U5        M-  U R                   " U40 UD6  MB     g s  snf r    )super__init__r   aliasesdefault_exchangedefault_routing_keycreate_missingr	   autoexchangemax_priorityr"   r   namer!   r   add
add_compat)
selfqueuesr1   r3   r4   r5   r2   qr6   	__class__s
            r)   r/   Queues.__init__8   s     	*, 0#6 ,(4(<H,(j&A&A)/0AffaiF02||~GD%a//DHHQKT__T5OQ5O & 1s   #Cc                 b   >  U R                   U   $ ! [         a    [        TU ]  U5      s $ f = fr    )r0   KeyErrorr.   __getitem__)r9   r6   r<   s     r)   r@   Queues.__getitem__H   s6    	-<<%% 	-7&t,,	-s    ..c                    > U R                   (       a"  UR                  (       d  U R                   Ul        [        TU ]  X5        UR                  (       a  X R
                  UR                  '   g g r    )r1   exchanger.   __setitem__aliasr0   )r9   r6   queuer<   s      r)   rD   Queues.__setitem__N   sH      !22END(;;(-LL%     c                 z    U R                   (       a   U R                  U R                  U5      5      $ [        U5      er    )r3   r7   new_missingr?   r9   r6   s     r)   __missing__Queues.__missing__U   s/    88D,,T233tnrH   c                 t    [        U[        5      (       d  U R                  " U40 UD6$ U R                  U5      $ )aG  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   r8   _add)r9   rF   kwargss      r)   r7   
Queues.addZ   s4    " %''??53F33yyrH   c                     UR                  SUR                  S5      5        US   c  XS'   U R                  [        R                  " U40 UD65      $ )Nrouting_keybinding_key)
setdefaultgetrO   r   	from_dict)r9   r6   optionss      r)   r8   Queues.add_compato   sK    ='++m*DE=!)%)M"yy99::rH   c                 N   UR                   b  UR                   R                  S:X  a  U R                  Ul         UR                  (       d  U R                  Ul        U R
                  b/  UR                  c  0 Ul        U R                  UR                  5        XUR                  '   U$ )N )rC   r6   r1   rS   r2   r5   queue_arguments_set_max_priority)r9   rF   s     r)   rO   Queues._addv   s    >>!U^^%8%8B%>!22EN   $ 8 8E($$,(*%""5#8#89 UZZrH   c                 f    SU;  a+  U R                   b  UR                  SU R                   05      $ g g )Nzx-max-priority)r5   update)r9   argss     r)   r]   Queues._set_max_priority   s9    4'D,=,=,I;; 0$2C2CDEE -J'rH   c                 d   U R                   nU(       d  g[        UR                  5       5       VVs/ s H(  u  pE[        R	                  5       R                  U5      PM*     nnnU(       a  [        SR                  U5      U5      $ US   S-   [        SR                  USS 5      U5      -   $ s  snnf )z/Format routing table into string for log dumps.r[   
r   r   N)consume_fromsortedr!   QUEUE_FORMATstripformat
textindentjoin)r9   r   indent_firstactive_r;   infos          r)   ri   Queues.format   s    """6<<>242DA ""$++A.2 	 4diiov66Aw~
499T!"X+> GGG	4s   /B,c                 v    U R                   " U40 UD6nU R                  b  X0R                  UR                  '   U$ )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.
)r7   _consume_fromr6   )r9   rF   rP   r;   s       r)   
select_addQueues.select_add   s:     HHU%f%))*qvv&rH   c                 d    U(       a$  [        U5       Vs0 s H  o"X   _M	     snU l        ggs  snf )zSelect a subset of currently defined queues to consume from.

Arguments:
    include (Sequence[str], str): Names of queues to consume from.
N)r   rr   )r9   includer6   s      r)   selectQueues.select   s8     -7-@"-@Tdj -@"D "s   -c                    ^ T(       aY  [        T5      mU R                  c  U R                  U4S jU  5       5      $ T H  nU R                  R                  US5        M!     gg)zDeselect queues so that they won't be consumed from.

Arguments:
    exclude (Sequence[str], str): Names of queues to avoid
        consuming from.
Nc              3   6   >#    U  H  oT;  d  M
  Uv   M     g 7fr     ).0r'   excludes     r)   	<genexpr>"Queues.deselect.<locals>.<genexpr>   s     "Gdw6F11ds   		)r   rr   rw   pop)r9   r}   rF   s    ` r)   deselectQueues.deselect   sX      )G!!){{"Gd"GGG ""&&ud3 ! rH   c                 8    [        XR                  U5      U5      $ r    )r   r4   rK   s     r)   rJ   Queues.new_missing   s    T,,T2D99rH   c                 8    U R                   b  U R                   $ U $ r    )rr   r9   s    r)   re   Queues.consume_from   s    )%%%rH   )rr   r0   r4   r3   r1   r2   r5   )NNTNNN)r   T)__name__
__module____qualname____firstlineno____doc__rr   r/   r@   rD   rL   r7   r8   rO   r]   ri   rs   rw   r   rJ   propertyre   __static_attributes____classcell__)r<   s   @r)   r   r   )   sp     M59378<P -.
 *;
F	H		4 :  rH   r   c                      \ rS rSrSr\r\r\r\r\	r
SrSrSrSrSrS r\S 5       r\S 5       r  SS jr	SS	 jrS
 rSS jr         SS jr       SS jrS rS r\S 5       r\S 5       r\R:                  S 5       r\S 5       r\S 5       r \ R:                  S 5       r \S 5       r!\!r"\S 5       r#\S 5       r$\S 5       r%S r&Sr'g) r      zApp AMQP API: app.amqp.Ni   c                     Xl         U R                  U R                  S.U l        U R                   R                  R                  U R                  5        g )N)r      )app
as_task_v1
as_task_v2task_protocols_confbind_to_handle_conf_update)r9   r   s     r)   r/   AMQP.__init__   s=    
 	t778rH   c                 \    U R                   U R                  R                  R                     $ r    )r   r   conftask_protocolr   s    r)   create_task_messageAMQP.create_task_message   s!    ""488==#>#>??rH   c                 "    U R                  5       $ r    )_create_task_senderr   s    r)   send_task_messageAMQP.send_task_message   s    ''))rH   c                 ~   U R                   R                  nUR                  nUc  UR                  nUc  UR                  nU(       dH  UR
                  (       a7  S nUR                  S:X  a  SS0n[        UR
                  U R                  UUS94nUc  U R                  OUnU R                  XR                  UX4U5      $ )Nquorumzx-queue-type)rC   rS   r\   )r   r   task_default_routing_keytask_create_missing_queuestask_queue_max_prioritytask_default_queuetask_default_queue_typer   r1   r4   
queues_cls)r9   r:   r3   r4   r5   r   r2   r\   s           r)   r   AMQP.Queues   s     xx}}";;!!<<N77L$11"O++x7#18"<D33%)%:%:(;,;= ?F .:-A))) 	))>(;
 	
rH   c                     [         R                  " U R                  U=(       d    U R                  U R                  R                  SU5      U R                  S9$ )zReturn the current task router.r   )r   )_routesRouterr   r:   r   either)r9   r:   r3   s      r)   r   AMQP.Router
  sC    ~~dkk6+@T[["hhoo.J.<>CG88M 	MrH   c                 v    [         R                  " U R                  R                  R                  5      U l        g r    )r   preparer   r   task_routes_rtabler   s    r)   flush_routesAMQP.flush_routes  s     txx}}'@'@ArH   c                     Uc   U R                   R                  R                  nU R                  " U4UU=(       d-    [	        U R
                  R                  R                  5       5      S.UD6$ )N)acceptr:   )r   r   accept_contentr   listr:   re   values)r9   channelr:   r   kws        r)   TaskConsumerAMQP.TaskConsumer  s`    >XX]]11F}}
"DT$++":":"A"A"CD
 
 	
rH   c                    U=(       d    SnU=(       d    0 n[        U[        [        45      (       d  [        S5      e[        U[        5      (       d  [        S5      eU(       ah  U R                  US5        U=(       d    U R                  R                  5       nU=(       d    U R                  R                  n[        U[        US9-   US9n[        U	[        R                  5      (       ah  U R                  U	S5        U=(       d    U R                  R                  5       nU=(       d    U R                  R                  n[        U[        U	S9-   US9n	[        U[        5      (       d  U=(       a    UR                  5       n[        U	[        5      (       d  U	=(       a    U	R                  5       n	Uc  [        X0R                   5      nUc  [        X@R"                  5      nU(       d  UnU=(       d    /  Vs0 s H	  nUUU   _M     n n0 SS	_S
U_SU_SU_SU_SU	_SU_SU_SU
_SUU/_SU_SU_SU_SU_SU=(       d
    [%        5       _SU_SU_UU S.En!['        U!UU=(       d    SS.X4UUUUS.4U(       a  UUUUUUU
UU	S.	S9$ S S9$ s  snf )Nr{   !task args must be a list or tuple(task keyword arguments must be a mapping	countdownseconds)tzexpires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   r6   ra   rP   r   r   r   r   )r"   r   tuple	TypeErrorr   _verify_secondsr   nowtimezoner   r   numbersRealstr	isoformatr   argsrepr_maxsizekwargsrepr_maxsizer   r   )"r9   task_idr6   ra   rP   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   headerr   r   s"                                     r)   r   AMQP.as_task_v2  s    zr2$u..?@@&'**FGG  K8'C4488#4#4H"i	22xC gw||,,  )4'C4488#4#4H&i00XG #s##)#--/C'3''5'"3"3"5G&;&;<H!&*A*ABJG8G8M28MN8Mf&'&/)8MN
D
D
 '
 f	

 3
 w
 X
 ;
 w
 *o6
 w
 
 
 *
 f/
  ]!
" $%:#
$  /'
, ")$N
 !* (""	$ #  "& $""

 	
0 )-1
 	
/ Os   5Jc                 $   U=(       d    SnU=(       d    0 nU R                   n[        U[        [        45      (       d  [	        S5      e[        U[
        5      (       d  [	        S5      eU(       aA  U R                  US5        U=(       d    U R                  R                  5       nU[        US9-   n[        U	[        R                  5      (       aA  U R                  U	S5        U=(       d    U R                  R                  5       nU[        U	S9-   n	U=(       a    UR                  5       nU	=(       a    U	R                  5       n	[        0 UU=(       d    SS.UUUUUUU
UU	UUUUU4UUS	.U(       a  UU[        U5      [        U5      U
UU	S
.S9$ S S9$ )Nr{   r   r   r   r   r   r[   r   )r   r   ra   rP   r   r   r   r   r   utcr   r   r   tasksetr   )r   r6   ra   rP   r   r   r   r   )r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   )r9   r   r6   ra   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   compat_kwargsr   s                            r)   r   AMQP.as_task_v1z  s    zr2hh$u..?@@&'**FGG  K8'C	)44Cgw||,,  )4'CIg66G%cmmo1g//1")$N
  !*""&$(/:#2 #   "6*""/ 
  	
> )-? 
  	
rH   c                 <    U[         :  a  [        U SU< 35      eU$ )Nz is out of range: )INT_MIN
ValueError)r9   swhats      r)   r   AMQP._verify_seconds  s%    w;v%7u=>>rH   c                 z  ^^^^^^^^	^
^^^^^^^ U R                   R                  R                  m
U R                   R                  R                  mU R                   R                  R                  mU R
                  m	U R                  m[        R                  R                  m[        R                  R                  m[        R                  R                  m[        R                  R                  m[        R                  R                  m[        R                  R                  mU R                  mU R                  mU R                   R                  R                  mU R                   R                  R                   mU R                   R                  R"                  m       SUUUUUUUU	U
UUUUUUU4S jjnU$ )Nc                   > Uc  T#OUnUu  nnnnU(       a  UR                  U5        U(       a  UR                  U5        UnUc  Uc  T"nUb)  [        U[        5      (       a  UT&U   nnOUR                  nU
c"   UR                  R
                  n
U
=(       d    Tn
Uc   UR                  R                  nU(       a  U(       d
  US:X  a  SUpCO@Uc=  UR                  R                  =(       d    T nU=(       d    UR                  =(       d    T$nUc  U(       a  [        U[        5      (       d  U/nUc  T#OUnU(       a  [        T!40 UD6OT!nT(       a  T(" UUX4UUUUS9  U R                  " U4UUU	=(       d    T%U=(       d    TUUXUUUS.UD6nT(       a	  T'" UUUX4S9  T*(       aL  [        U[        5      (       a  T)" UUS   UUS   US   US	   US
   S9  OT)" UUS   UUS   US   US	   US   S9  U(       aU  U=(       d    TnUn[        U[        5      (       a  UR                  nUR                  UUUS.5        UR                  SUXUS9  U$ ! [         a     GNf = f! [         a    Sn GNf = f)Ndirectr[   )senderr   rC   rS   declarer   r   retry_policy)rC   rS   
serializercompressionretryr  delivery_moder  r   timeoutconfirm_timeout)r  r   r   rC   rS   r   r   r   r   r   )r  r   r   ra   rP   r   r   ra   rP   r   )rF   rC   rS   z	task-sent)r
  r  )r`   r"   r   r6   rC   r  AttributeErrortyperS   r   dictpublishr   r	   )+producerr6   messagerC   rS   rF   event_dispatcherr
  r  r  r  r	  r  r   exchange_typer  r  rP   headers2r   r   r   qname_rpretevdexnameafter_receiversbefore_receiversdefault_compressordefault_delivery_modedefault_evdr1   default_policydefault_queuedefault_retrydefault_rkeydefault_serializerr:   send_after_publishsend_before_publishsend_task_sentsent_receiverss+                              r)   r   3AMQP._create_task_sender.<locals>.send_task_message  s    &+]ME5<2Hj$
(!!&)E}!1% eS))#(&-5E5!JJE$$)NN$@$@M !. F1F$-$)NN$7$7M
 K]h5N(*E+! >>..B2B)NU->->N,5E91M1M ' &+]ME;G47,7&   #d%#X)	 ""!'%;);'=+=#+  C "$T8,4OdE**"#Xd^$!!WT!W$UOXg5F ##T$Zd!&\$x. Ki
 &5+!fh//#[[F!!" &#.# 
 K$  NJQ &  & -$,M-s$   :I I  
II I0/I0)NNNNNNNNNNNNNN)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_dispatcherr1   r   task_serializertask_compression)r9   r   r  r  r  r  r   r1   r!  r"  r#  r$  r%  r:   r&  r'  r(  r)  s     @@@@@@@@@@@@@@@@r)   r   AMQP._create_task_sender  sA   88@@ $ H H**%99>>"66@@$77<<!44>> **// **44,,00xx}}==!XX]]::!XX]];; FJ/37;=A8<:><@c	 c	 c	H ! rH   c                 \    U R                   U R                  R                  R                     $ r    )r:   r   r   r   r   s    r)   r"  AMQP.default_queue6  s    {{488==;;<<rH   c                 `    U R                  U R                  R                  R                  5      $ )u"   Queue name⇒ declaration mapping.)r   r   r   task_queuesr   s    r)   r:   AMQP.queues:  s!     {{488==4455rH   c                 $    U R                  U5      $ r    )r   )r9   r:   s     r)   r:   r;  ?  s    {{6""rH   c                 T    U R                   c  U R                  5         U R                   $ r    )r   r   r   s    r)   r   AMQP.routesC  s"    <<||rH   c                 "    U R                  5       $ r    )r   r   s    r)   routerAMQP.routerI  s    {{}rH   c                     U$ r    r{   )r9   values     r)   r@  rA  M  s    rH   c                     U R                   c_  [        R                  U R                  R	                  5          U l         U R                  R
                  R                  U R                   l        U R                   $ r    )_producer_poolr   	producersr   connection_for_writepoollimitr   s    r)   producer_poolAMQP.producer_poolQ  sW    &"'//--/#1D(,(;(;D%"""rH   c                     [        U R                  R                  R                  U R                  R                  R                  5      $ r    )r	   r   r   task_default_exchangetask_default_exchange_typer   s    r)   r1   AMQP.default_exchangeZ  s2    ;;@@B 	BrH   c                 B    U R                   R                  R                  $ r    )r   r   
enable_utcr   s    r)   r   AMQP.utc_  s    xx}}'''rH   c                 H    U R                   R                  R                  SS9$ )NF)enabled)r   events
Dispatcherr   s    r)   r3  AMQP._event_dispatcherc  s      xx))%)88rH   c                 f    SU;   d  SU;   a%  U R                  5         U R                  5       U l        g )Nr   )r   r   r@  )r9   ra   rP   s      r)   r   AMQP._handle_conf_updatei  s-    V#}'<++-DKrH   )rE  r   r   r@  r   )NNN)NN)NNNNNNNr   NNNNNNFNNNNNNNFNNNr   )NNNNNNNr   NNNNNNFNNNNN)(r   r   r   r   r   r   r   r
   BrokerConnectionr   r   r   rE  r4   r   r   r/   r   r   r   r   r   r   r   r   r   r   r"  r:   setterr   r   r@  rJ  publisher_poolr1   r   r3  r   r   r{   rH   r)   r   r      s   !JHH "J G N L  9 @ @ * * -1/3
2MB
 ;?HL26;?48DH?Cei)*\
| ;?HL)*GK48DH37:
x
y!v = = 6 6 ]]# #  
   ]]  # # #NB B ( ( 9 9
rH   r   )zutf-8)-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   r[   r   r   __all__r   rg   r   r*   r  r   r   r{   rH   r)   <module>rk     s}    5  " #  ' H H " - /  0 * 2 . 
, 
 .IK#
UT Upl lrH   