
    Ih9                    Z   d Z ddlm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mZ d	dlm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m Z  d	dl!m"Z" d	dl#m$Z$ dZ%dZ&dZ' ee(      Z)e)jT                  e)jV                  cZ*Z+ G d d      Z, G d d      Z-y)zGeneric process mailbox.    )annotationsN)defaultdictdeque)contextmanager)copy)count)time   )ConsumerExchangeProducerQueue)LamportClock)maybe_declareoid_from)InconsistencyError)
get_logger)match)maybe_evaluatereprcall)cached_property)uuid
   zA node named {node.hostname} is already using this process mailbox!

Maybe you forgot to shutdown the other node or did not do so properly?
Or if you meant to start multiple nodes on the same host please make sure
you give each node a unique node name!
)NodeMailboxc                  ~    e Zd ZdZdZdZdZdZdZ	 	 ddZ	ddZ
d Zd ZddZ	 	 ddZdd	Zd
 Zd ZddZeZd Zy)r   zMailbox node.Nc                    || _         || _        || _        || _        | j                  j                  j
                  | _        |i }|| _        y N)channelmailboxhostnamestateclockadjustadjust_clockhandlers)selfr!   r"   r   r&   r    s         E/var/www/html/planif/env/lib/python3.12/site-packages/kombu/pidbox.py__init__zNode.__init__8   sH     
 LL..55H     c                      j                   j                   j                        } fd}||_        t	        |xs  j
                  |gf|| j                   j                  n|d|S )Nc                ^    |r*t        j                  t        j                               y y )N)node)warningswarnW_PIDBOX_IN_USEformat)namemessages	consumersr'   s      r(   verify_exclusivez'Node.Consumer.<locals>.verify_exclusiveF   s%    o44$4?@ r*   )no_ackaccept)r    	get_queuer!   on_declaredr   r   r7   )r'   r   r6   r7   optionsqueuer5   s   `      r(   r   zNode.ConsumerC   sm    &&t}}5	A -#t||eW
5;*0.4<<&&f
 
 	
r*   c                8    || j                   |j                  <   |S r   )r&   __name__)r'   funs     r(   handlerzNode.handlerQ   s    &)cll#
r*   c                     t        d|d       y )NzCannot decode message: %rr
   exc_info)error)r'   messageexcs      r(   on_decode_errorzNode.on_decode_errorU   s    )3;r*   c                    | j                  ||xs | j                  g| j                        }|j                          |S )N)r   	callbacksrF   )r   handle_messagerF   consume)r'   r   callbackconsumers       r(   listenzNode.listenX   sE    ==,4,K8K8K+L151E1E ! G 	r*   c                \   |xs i }t        dt        |d|      ||       |xr | j                  xs | j                  }	  |||      }|r'| j                  | j                  |i|d   |d	   |
       |S # t        $ r  t
        $ r%}t        d|d       dt        |      i}Y d }~]d }~ww xY w)Nz1pidbox received method %s [reply_to:%s ticket:%s] )kwargszpidbox command error: %rr
   rA   rC   exchangerouting_key)rQ   rR   ticket)
debugr   handle_callhandle_cast
SystemExit	ExceptionrC   reprreplyr!   )	r'   method	argumentsreply_torS   rP   handlerZ   rE   s	            r(   dispatchzNode.dispatch_   s    O	Avr)4h	H.d..B$2B2B	)69-E JJu- ( 4#+M#:$  &   	 	),cA>d3i(E	)s    	A4 4B+B&&B+c                N    |si n|} | j                   |   | j                  fi |S r   )r&   r"   r'   r[   r\   s      r(   r^   zNode.handlet   s*    'BY	$t}}V$TZZ=9==r*   c                &    | j                  ||      S r   r^   ra   s      r(   rU   zNode.handle_callx       {{69--r*   c                &    | j                  ||      S r   rc   ra   s      r(   rV   zNode.handle_cast{   rd   r*   c                L   |j                  d      }|j                  d      }|j                  d      }|r.| j                  |j                  j                  d      xs d       | j                  }d}|r||v rd}n|r|rt	        |||      rd}nd}|r | j
                  di |S y )	Ndestinationpatternmatcherr#   r   FTrO   )getr%   headersr!   r   r_   )r'   bodyrD   rg   rh   ri   r!   run_dispatchs           r(   rI   zNode.handle_message~   s    hh}-((9%((9%goo11':?a@==;&#Xw0#L 4==(4(( r*   c                    | j                   j                  ||||| j                  | j                   j                         y )N)r   
serializer)r    _publish_replyr   ro   )r'   datarQ   rR   rS   rP   s         r(   rZ   z
Node.reply   s6    ##D(K,0LL/3||/F/F 	$ 	Hr*   NNNN)NTNNN)NNNr   )r=   
__module____qualname____doc__r!   r    r&   r"   r   r)   r   r?   rF   rM   r_   r^   rU   rV   rI   dispatch_from_messagerZ   rO   r*   r(   r   r   &   sv     H G H E G59(,	!
< *.'+*>..)$ +Hr*   r   c                     e Zd ZdZeZdZdZdZdZ	dZ
dZdZdgZdZ	 	 	 	 ddZd Zdd	Z	 	 dd
ZddZddZ	 	 ddZd Zed        Zd Zedd       Z	 ddZ	 	 	 ddZ	 	 	 	 d dZ	 	 ddZd Zd Z e!d        Z"ed        Z#y)!r   zProcess Mailbox.z	%s.pidboxzreply.%s.pidboxNdirectjsonc                   || _         || _        || _        |
t               n|| _        | j                  | j                   | j                        | _        | j                  | j                         | _        t        t              | _        || j                  n|| _        || j                  n|| _        || _        |	| _        |
| _        || _        || _        y r   )	namespace
connectiontyper   r#   _get_exchangerQ   _get_reply_exchangereply_exchanger   r   	unclaimedr7   ro   	queue_ttlqueue_expiresreply_queue_ttlreply_queue_expires_producer_pool)r'   r|   r~   r}   r#   r7   ro   producer_poolr   r   r   r   s               r(   r)   zMailbox.__init__   s    
 #$	',}\^%
**4>>499E"66t~~F$U+%+^dkk-7-?$//Z"*.#6 +r*   c                *    t        |       }||_        |S r   )r   r}   )r'   r}   bounds      r(   __call__zMailbox.__call__   s    T
%r*   c                ^    |xs t        j                         }| j                  |||||       S )N)r    )socketgethostnamenode_cls)r'   r!   r"   r   r&   s        r(   r   zMailbox.Node   s.    3v113}}Xugx}NNr*   c           	     >    |si n|}| j                  |||d|||      S )NT)rZ   timeoutrK   r   
_broadcast)r'   rg   commandrP   r   rK   r   s          r(   callzMailbox.call   s2    !vw%)7(0'.  0 	0r*   c                8    |si n|}| j                  |||d      S NF)rZ   r   )r'   rg   r   rP   s       r(   castzMailbox.cast   s"    !vw5IIr*   c                6    |si n|}| j                  ||d      S r   r   )r'   r   rP   s      r(   abcastzMailbox.abcast   s     !vwe<<r*   c           	     >    |si n|}| j                  ||d||||      S )NT)rZ   r   limitrK   r   r   )r'   r   rP   r   r   rK   r   s          r(   
multi_callzMailbox.multi_call   s2    !vwd'.e(0'.  0 	0r*   c           	         | j                   }t        | d| j                  j                   | j                  |dd| j                  | j
                        S )N.FT)rQ   rR   durableauto_deleteexpiresmessage_ttl)oidr   r   r2   r   r   )r'   r   s     r(   get_reply_queuezMailbox.get_reply_queue   sW    hhe1T((--./((,,,,
 	
r*   c                "    | j                         S r   )r   r'   s    r(   reply_queuezMailbox.reply_queue   s    ##%%r*   c                    t        | d| j                   d| j                  dd| j                  | j                        S )Nr   z.pidboxFT)rQ   r   r   r   r   )r   r|   rQ   r   r   )r'   r!   s     r(   r8   zMailbox.get_queue   sA    j$..)1]]&&
 	
r*   c              #     K   |r| y | j                   r(| j                   j                         5 }| d d d        y t        |d       y # 1 sw Y   y xY ww)NF)auto_declare)r   acquirer   )r'   producerr   s      r(   producer_or_acquirezMailbox.producer_or_acquire  sX     N##++-   777 s   .AAAAAc           
     .   |xs | j                   j                  }t        |ddd      }| j                  ||      5 }	  |j                  |f|||g|| j
                  j                         ddd| d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)Nry   	transientF)exchange_typedelivery_moder   )rS   r#   T)rQ   rR   declarerk   retry)r}   default_channelr   r   publishr#   forwardr   )	r'   rZ   rQ   rR   rS   r   r   optschans	            r(   rp   zMailbox._publish_reply  s    9$//99HH*5$)+ %%h5 	
   $,+%J"(4::3E3E3G1!	
 	 	 & 	 	s(   B5A<<	BBBBBc           	        ||||	|
d}|xs | j                   j                  }| j                  }|rNt        | j	                  |             |j                  || j                  j                  | j                  d       |xs | j                  }| j                  ||      5 }|j                  ||j                  |g| j                  j                         |rt               |z   ndd|d       d d d        y # 1 sw Y   y xY w)N)r[   r\   rg   rh   ri   )rQ   rR   )rS   r]   r   )r#   r   T)rQ   r   rk   ro   r   )r}   r   rQ   r   r   updater   r2   r   ro   r   r   r#   r   r	   )r'   r~   r\   rg   reply_ticketr   r   ro   r   rh   ri   rD   r   rQ   s                 r(   _publishzMailbox._publish   s     " )"-%%	'
 9$//99==$**401NN,151D1D1I1I48HH%>  ?  24??
%%h5 	(--("&**"4"4"68?DFW$4QH%T	  	 	 	s   !AC77D c                2   |9t        |t        t        f      s#t        dj	                  t        |                  |
Ot        |
t              s?|=t        |t              s-t        dj	                  t        |
      t        |                  |xs i }|xr
 t               xs d }|xs | j                  j                  }||r|xr t        |      xs d }|	xs | j                  }	| j                  |||||||	|
|	       |r| j                  |||||      S y )Nz'destination must be a list/tuple not {}z.pattern and matcher must be strings not {}, {})rg   r   r   r   ro   rh   ri   )r   r   rK   r   )
isinstancelisttuple
ValueErrorr1   r~   strr   r}   r   lenro   r   _collect)r'   r   r\   rg   rZ   r   r   rK   r   ro   rh   ri   r   r   s                 r(   r   zMailbox._broadcast8  s2    "{T5M:9@@%'( ( 
7C(@#Jw,D%%+VDM4=%I 
 O	'/49$//99 =[4C$4<E24??
gyk#/"%!+%% 	 	' ==U)0*2)- ! / / r*   c                   || j                   }|xs | j                  j                  }| j                  }t	        ||g|d      }	g | j
                  | j                  j                  	 j                        S # t        $ r Y nw xY wfd}
|	j                  |
       	 |	5  |xr t        |      xs
 t               D ]9  }	 | j                  j                  |       !# t        j                  $ r Y  nw xY w cd d d        |j!                  |j"                         S # 1 sw Y   nxY w	 |j!                  |j"                         y # |j!                  |j"                         w xY w)NT)r7   r6   c                   |j                   j                  }  |d      xs d        |d      }|rt               |kD  ry  |d      }|k(  rr |        j                  |        y 	|   j                  |        y )Nr#   r   r   rS   )rk   rj   r	   append)
rl   rD   headerr   this_idr%   rK   	responsesrS   r   s
        r(   
on_messagez$Mailbox._collect.<locals>.on_messagep  s{    __((F-A.Y'G46G+Xv.G& TN  &'"))$/r*   )r   )r7   r}   r   r   r   r   r#   r$   popKeyErrorregister_callbackranger   drain_eventsr   r   after_reply_message_receivedr2   )r'   rS   r   r   rK   r   r7   r   r;   rL   r   ir%   r   r   s    `  `       @@@r(   r   zMailbox._collect_  sW    >[[F9$//99  D5'&F	NN	zz((	==(( 			0 	0 	"":.		: !/5<:57 A44W4E!>> 
 !! ! --ejj9! ! ! --ejj9D--ejj9sZ   /B   	BB*E ,D*C)(D*)D <D*?D  D*	E *D3/E E0c                :    t        | j                  |z  |dd      S )NFr   r~   r   r   )r   exchange_fmt)r'   r|   r~   s      r(   r   zMailbox._get_exchange  s%    ))I5! %&13 	3r*   c                :    t        | j                  |z  ddd      S )Nry   Fr   r   )r   reply_exchange_fmt)r'   r|   s     r(   r   zMailbox._get_reply_exchange  s%    //);% %&13 	3r*   c                    t        |       S r   )r   r   s    r(   r   zMailbox.oid  s    ~r*   c                ,    t        | j                        S r   )r   r   r   s    r(   r   zMailbox.producer_pool  s    d1122r*   )
ry   NNNNNNNNg      $@rr   r   )Nr
   NNNrs   )NNNNNNNN)
NNFr
   NNNNNN)$r=   rt   ru   rv   r   r   r   r   r|   r}   r~   rQ   r   r7   ro   r)   r   r   r   r   r   r   r   r   r8   r   r   rp   r   r   r   r   r   propertyr   r   rO   r*   r(   r   r      s,   HL* I J D H N XF J 8<=A/3;?	,(
O 15260J= 896:0

 & &
 8 8 /3& 59:>GK0 ?C15;?)-%/P 26&**:X33   3 3r*   r   ).rv   
__future__r   r   r.   collectionsr   r   
contextlibr   r   	itertoolsr   r	    r   r   r   r   clocksr   commonr   r   
exceptionsr   logr   ri   r   utils.functionalr   r   utils.objectsr   
utils.uuidr   REPLY_QUEUE_EXPIRESr0   __all__r=   loggerrT   rC   r   r   rO   r*   r(   <module>r      s     "   * %    1 1   + *   6 *   	H	||V\\uoH oHdE3 E3r*   