
    Ih                       d Z ddlm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Zdd
lmZ ddlmZ dZdZdZ e
e      Z G d dej6                        Z G d dej8                        ZeC ej:                  dd        ej<                   ej>                  d       G d d                    Z edk(  r e!d        ejD                         5 Z# e!djI                  ejJ                  jL                  ejJ                  jN                                ejP                         5 Z) e!djI                  ejJ                  jL                               e#jU                  e       Z+e)jU                  de+       ddd       e#jY                          ddd       yy# e$ r
 dxZxZZY lw xY w# 1 sw Y   5xY w# 1 sw Y   yxY w)a  Pyro transport module for kombu.

Pyro transport, and Kombu Broker daemon.

Requires the :mod:`Pyro4` library to be installed.

Features
========
* Type: Virtual
* Supports Direct: Yes
* Supports Topic: Yes
* Supports Fanout: No
* Supports Priority: No
* Supports TTL: No

Connection String
=================

To use the Pyro transport with Kombu, use an url of the form:

.. code-block::

    pyro://localhost/kombu.broker

The hostname is where the transport will be looking for a Pyro name server,
which is used in turn to locate the kombu.broker Pyro service.
This broker can be launched by simply executing this transport module directly,
with the command: ``python -m kombu.transport.pyro``

Transport Options
=================
    )annotationsN)EmptyQueue)reraise)
get_logger)cached_property   )virtual)NamingError)SerializerBasei#  z5Unable to locate pyro nameserver on host {0.hostname}zKUnable to lookup '{0.virtual_host}' in pyro nameserver on host {0.hostname}c                  p     e Zd ZdZ fdZd Zd Zd ZddZd Z	d Z
d	 Zd
 Zd Zd Zed        Z xZS )ChannelzPyro Channel.c                p    t         |           | j                  r| j                  j                          y y N)supercloseshared_queues_pyroRelease)self	__class__s    M/var/www/html/planif/env/lib/python3.12/site-packages/kombu/transport/pyro.pyr   zChannel.closeC   s,    ++-     c                6    | j                   j                         S r   )r   get_queue_namesr   s    r   queueszChannel.queuesH   s    !!1133r   c                `    || j                         vr| j                  j                  |       y y r   r   r   	new_queuer   queuekwargss      r   
_new_queuezChannel._new_queueK   s)    %((/ &r   c                8    | j                   j                  |      S r   )r   	has_queuer    s      r   
_has_queuezChannel._has_queueO   s    !!++E22r   c                Z    | j                  |      }| j                  j                  |      S r   )
_queue_forr   get)r   r!   timeouts      r   _getzChannel._getR   s'    &!!%%e,,r   c                `    || j                         vr| j                  j                  |       |S r   r   r   r!   s     r   r(   zChannel._queue_forV   s)    %((/r   c                ^    | j                  |      }| j                  j                  ||       y r   )r(   r   put)r   r!   messager"   s       r   _putzChannel._put[   s&    &ug.r   c                8    | j                   j                  |      S r   )r   sizer-   s     r   _sizezChannel._size_   s    !!&&u--r   c                :    | j                   j                  |       y r   )r   delete)r   r!   argsr"   s       r   _deletezChannel._deleteb   s    !!%(r   c                8    | j                   j                  |      S r   )r   purger-   s     r   _purgezChannel._purgee   s    !!''..r   c                     y r    r-   s     r   after_reply_message_receivedz$Channel.after_reply_message_receivedh   s    r   c                .    | j                   j                  S r   )
connectionr   r   s    r   r   zChannel.shared_queuesk   s    ,,,r   r   )__name__
__module____qualname____doc__r   r   r#   r&   r+   r(   r1   r4   r8   r;   r>   r   r   __classcell__r   s   @r   r   r   @   sQ    .
403-
/.)/ - -r   r   c                  p     e Zd ZdZeZ ej                         ZeZ	dxZ
Z fdZd Zd Zed        Z xZS )	TransportzPyro Transport.pyroc                H    t        |   |fi | | j                  | _        y r   )r   __init__global_statestate)r   clientr"   r   s      r   rK   zTransport.__init__}   s"    *6*&&
r   c           	     B   t         j                  d       | j                  }	 t        j                  |j
                  | j                        }	 j                  |j                        }t        j                  |      S # t        $ rE t        t        t        t        j                  |            t        j                         d          Y ~w xY w# t        $ rE t        t        t        t         j                  |            t        j                         d          Y y w xY w)Nz0trying Pyro nameserver to find the broker daemon)hostport   )loggerdebugrN   rI   locateNShostnamedefault_portr   r   E_NAMESERVERformatsysexc_infolookupvirtual_hostProxyE_LOOKUP)r   conninfo
nameserveruris       r   _openzTransport._open   s    GH;;	'H,=,=,0,=,=?J
	'##H$9$9:C::c?"  	'K\-@-@-J!KLLN1%'	'  	'KX__X-F!GLLN1%'	's%   +A? /C ?ACCADDc                "    t         j                  S r   )rI   __version__r   s    r   driver_versionzTransport.driver_version   s    r   c                "    | j                         S r   )rc   r   s    r   r   zTransport.shared_queues   s    zz|r   )rA   rB   rC   rD   r   r
   BrokerStaterL   DEFAULT_PORTrW   driver_typedriver_namerK   rc   rf   r   r   rE   rF   s   @r   rH   rH   p   sO    G '7&&(LL &&K+''"   r   rH   zqueue.Emptyc                    t               S r   )r   )clsdatas     r   <lambda>ro      s    EG r   single)instance_modec                  F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)KombuBrokerzmKombu Broker used by the Pyro transport.

        You have to run this as a separate (Pyro) service.
        c                    i | _         y r   r   r   s    r   rK   zKombuBroker.__init__   s	    DKr   c                ,    t        | j                        S r   )listr   r   s    r   r   zKombuBroker.get_queue_names   s    $$r   c                P    || j                   v ry t               | j                   |<   y r   )r   r   r-   s     r   r   zKombuBroker.new_queue   s!    #!&DKKr   c                    || j                   v S r   ru   r-   s     r   r%   zKombuBroker.has_queue   s    DKK''r   c                @    | j                   |   j                  d      S )NF)block)r   r)   r-   s     r   r)   zKombuBroker.get   s    ;;u%)))66r   c                @    | j                   |   j                  |       y r   )r   r/   )r   r!   r0   s      r   r/   zKombuBroker.put   s    KK""7+r   c                <    | j                   |   j                         S r   )r   qsizer-   s     r   r3   zKombuBroker.size   s    ;;u%++--r   c                    | j                   |= y r   ru   r-   s     r   r6   zKombuBroker.delete   s    E"r   c                d    	 	 | j                   |   j                  d       !# t        $ r Y y w xY w)NF)blocking)r   r)   r   r-   s     r   r:   zKombuBroker.purge   s=    KK&**E*:   s   # 	//N)rA   rB   rC   rD   rK   r   r   r%   r)   r/   r3   r6   r:   r=   r   r   rs   rs      s4    	
		%	)
	(	7	,	.	#	r   rs   __main__z,Launching Broker for Kombu's Pyro transport.z'(Expecting a Pyro name server at {}:{})zAYou can connect with Kombu using the url 'pyro://{}/kombu.broker'zkombu.broker)-rD   
__future__r   rZ   r!   r   r   kombu.exceptionsr   	kombu.logr   kombu.utils.objectsr    r
   Pyro4rI   Pyro4.errorsr   
Pyro4.utilr   ImportErrorri   rX   r_   rA   rS   r   rH   register_dict_to_classexposebehaviorrs   printDaemondaemonrY   configNS_HOSTNS_PORTrU   nsregisterrb   requestLoopr=   r   r   <module>r      s  D # 
  $   / /()  
H	--goo --`'!! 'T )N))-*CE 
[[T]]*% % + %T z	
89	 &7vdkk))4;;+>+>?	AT]]_ 	- --3VDKK4G4G-HJ//+.CKK,		-
 	  q  /*..D.;/z	- 	- s7   F AF:+AF.:F:F+*F+.F7	3F::G