
    ^f                       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 n# e$ r	 dxZxZZY nw xY wdZdZdZ e
e          Z G d dej                  Z G d dej                  ZeC ej        dd            ej         ej        d           G d d                                  Z edk    r e!d            ej"                    5 Z# e!d$                    ej%        j&        ej%        j'                              ej(                    5 Z) e!d$                    ej%        j&                             e#*                    e           Z+e)*                    de+           ddd           n# 1 swxY w Y   e#,                                 ddd           dS # 1 swxY w Y   dS dS )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                  v     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                    t                                                       | j        r| j                                         d S d S N)supercloseshared_queues_pyroRelease)self	__class__s    F/var/www/html/env/lib/python3.11/site-packages/kombu/transport/pyro.pyr   zChannel.closeC   sD     	.++-----	. 	.    c                4    | j                                         S r   )r   get_queue_namesr   s    r   queueszChannel.queuesH   s    !11333r   c                j    ||                                  vr| j                            |           d S d S r   r   r   	new_queuer   queuekwargss      r   
_new_queuezChannel._new_queueK   s:    %%((///// &%r   c                6    | j                             |          S r   )r   	has_queuer    s      r   
_has_queuezChannel._has_queueO   s    !++E222r   Nc                `    |                      |          }| j                            |          S r   )
_queue_forr   get)r   r!   timeouts      r   _getzChannel._getR   s*    &&!%%e,,,r   c                f    ||                                  vr| j                            |           |S r   r   r   r!   s     r   r(   zChannel._queue_forV   s1    %%((///r   c                f    |                      |          }| j                            ||           d S r   )r(   r   put)r   r!   messager"   s       r   _putzChannel._put[   s2    &&ug.....r   c                6    | j                             |          S r   )r   sizer-   s     r   _sizezChannel._size_   s    !&&u---r   c                :    | j                             |           d S r   )r   delete)r   r!   argsr"   s       r   _deletezChannel._deleteb   s    !!%(((((r   c                6    | j                             |          S r   )r   purger-   s     r   _purgezChannel._purgee   s    !''...r   c                    d S 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   @   s        . . . . .
4 4 40 0 03 3 3- - - -  
/ / /. . .) ) )/ / /   - - _- - - - -r   r   c                  r     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                T     t                      j        |fi | | j        | _        d S r   )r   __init__global_statestate)r   clientr"   r   s      r   rK   zTransport.__init__}   s0    **6***&


r   c           	     p   t                               d           | j        }	 t          j        |j        | j                  }nb# t          $ rU t          t          t          t          
                    |                    t          j                    d                    Y nw xY w	 |                    |j                  }t          j        |          S # t          $ rV t          t          t          t           
                    |                    t          j                    d                    Y d S 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H;	'H,=,0,=? ? ?JJ 	' 	' 	'K\-@-@-J-J!K!KLNN1%' ' ' ' '	'	'##H$9::C:c??" 	' 	' 	'KX__X-F-F!G!GLNN1%' ' ' ' ' '	's%    A AB#"B#'-C AD54D5c                    t           j        S r   )rI   __version__r   s    r   driver_versionzTransport.driver_version   s    r   c                *    |                                  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   s        G '7&((LL &&K+' ' ' ' '' ' '"        _    r   rH   zqueue.Emptyc                    t                      S r   )r   )clsdatas     r   <lambda>ro      s
    EGG r   single)instance_modec                  H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )KombuBrokerzmKombu Broker used by the Pyro transport.

        You have to run this as a separate (Pyro) service.
        c                    i | _         d S r   r   r   s    r   rK   zKombuBroker.__init__   s    DKKKr   c                *    t          | j                  S r   )listr   r   s    r   r   zKombuBroker.get_queue_names   s    $$$r   c                H    || j         v rd S t                      | j         |<   d S r   )r   r   r-   s     r   r   zKombuBroker.new_queue   s*    ##!&DKr   c                    || j         v S r   ru   r-   s     r   r%   zKombuBroker.has_queue   s    DK''r   c                D    | j         |                             d          S )NF)block)r   r)   r-   s     r   r)   zKombuBroker.get   s     ;u%)))666r   c                F    | j         |                             |           d S r   )r   r/   )r   r!   r0   s      r   r/   zKombuBroker.put   s#    K""7+++++r   c                @    | j         |                                         S r   )r   qsizer-   s     r   r3   zKombuBroker.size   s    ;u%++---r   c                    | j         |= d S r   ru   r-   s     r   r6   zKombuBroker.delete   s    E"""r   c                n    	 	 | j         |                             d           n# t          $ r Y d S w xY w5)NTF)blocking)r   r)   r   r-   s     r   r:   zKombuBroker.purge   sT    K&**E*::::   EEs   !% 
33N)rA   rB   rC   rD   rK   r   r   r%   r)   r/   r3   r6   r:   r=   r   r   rs   rs      s        	 	
	 	 		% 	% 	%	) 	) 	)
	( 	( 	(	7 	7 	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 # " " " " " 



         $ $ $ $ $ $             / / / / / /      /(((((())))))) / / /*..D.;/  
H		-- -- -- -- --go -- -- --`' ' ' ' '! ' ' 'T )N)-*C*CE E E 
[T]***% % % % % % % +* [%T z	E
8999	 &7vdk)4;+>??	A 	A 	AT]__ 	-E --3VDK4G-H-HJ J J//+..CKK,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 	                  sG   ? AA,AF;/AFF;F	F;F	F;;F?F?