
     h                     <   d Z ddlZddl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 d	Zd
efdefdefdefdefdZd Zd Zd Z G d d          Z G d d          Z G d de          Z ed eg d          d          Z G d d          ZdS )zBase transport interface.    N)RecoverableConnectionError)ChannelErrorConnectionError)Message)
dictfilter)cached_property)maybe_s_to_ms)r   
StdChannel
Management	Transportz	x-expireszx-message-ttlzx-max-lengthzx-max-length-byteszx-max-priority)expiresmessage_ttl
max_lengthmax_length_bytesmax_priorityc                     t          t          d |                                D                                 }|rt          | fi |n| S )a  Convert queue arguments to RabbitMQ queue arguments.

    This is the implementation for Channel.prepare_queue_arguments
    for AMQP-based transports.  It's used by both the pyamqp and librabbitmq
    transports.

    Arguments:
        arguments (Mapping):
            User-supplied arguments (``Queue.queue_arguments``).

    Keyword Arguments:
        expires (float): Queue expiry time in seconds.
            This will be converted to ``x-expires`` in int milliseconds.
        message_ttl (float): Message TTL in seconds.
            This will be converted to ``x-message-ttl`` in int milliseconds.
        max_length (int): Max queue length (in number of messages).
            This will be converted to ``x-max-length`` int.
        max_length_bytes (int): Max queue size in bytes.
            This will be converted to ``x-max-length-bytes`` int.
        max_priority (int): Max priority steps for queue.
            This will be converted to ``x-max-priority`` int.

    Returns:
        Dict: RabbitMQ compatible queue arguments.
    c              3   <   K   | ]\  }}t          ||          V  d S N)_to_rabbitmq_queue_argument).0keyvalues      P/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/kombu/transport/base.py	<genexpr>z.to_rabbitmq_queue_arguments.<locals>.<genexpr>6   sD        C 	$C//         )r   dictitems)	argumentsoptionsprepareds      r   to_rabbitmq_queue_argumentsr!      se    6 $  !--//      H +3A4	&&X&&&	Ar   c                 D    t           |          \  }}|| ||          n|fS r   )RABBITMQ_QUEUE_ARGUMENTS)r   r   opttyps       r   r   r   =   s,    ',HCe/E


U::r   c                 R    t          d                    | j        |                    S )Nz<Transport {0.__module__}.{0.__name__} does not implement {1})NotImplementedErrorformat	__class__)objmethods     r   
_LeftBlankr,   C   s.    FMMM6	# 	#$ $ $r   c                   @    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 ZdS )
r
   zStandard channel base class.Nc                 &    ddl m}  || g|R i |S )Nr   )Consumer)kombu.messagingr/   )selfargskwargsr/   s       r   r/   zStdChannel.ConsumerN   4    ,,,,,,x.t...v...r   c                 &    ddl m}  || g|R i |S )Nr   )Producer)r0   r6   )r1   r2   r3   r6   s       r   r6   zStdChannel.ProducerR   r4   r   c                 "    t          | d          Nget_bindingsr,   r1   s    r   r9   zStdChannel.get_bindingsV       ~...r   c                     dS )zCallback called after RPC reply received.

        Notes:
           Reply queue semantics: can be used to delete the queue
           after transient reply message received.
        N )r1   queues     r   after_reply_message_receivedz'StdChannel.after_reply_message_receivedY   s      r   c                     |S r   r>   )r1   r   r3   s      r   prepare_queue_argumentsz"StdChannel.prepare_queue_argumentsa   s    r   c                     | S r   r>   r;   s    r   	__enter__zStdChannel.__enter__d   s    r   c                 .    |                                   d S r   )close)r1   exc_infos     r   __exit__zStdChannel.__exit__g   s    

r   )__name__
__module____qualname____doc__no_ack_consumersr/   r6   r9   r@   rB   rD   rH   r>   r   r   r
   r
   I   s        &&/ / // / // / /          r   r
   c                       e Zd ZdZd Zd ZdS )r   z!AMQP Management API (incomplete).c                     || _         d S r   )	transport)r1   rP   s     r   __init__zManagement.__init__n   s    "r   c                 "    t          | d          r8   r:   r;   s    r   r9   zManagement.get_bindingsq   r<   r   N)rI   rJ   rK   rL   rQ   r9   r>   r   r   r   r   k   s8        ++# # #/ / / / /r   r   c                   $    e Zd ZdZd Zd Zd ZdS )
Implementsz/Helper class used to define transport features.c                 N    	 | |         S # t           $ r t          |          w xY wr   )KeyErrorAttributeError)r1   r   s     r   __getattr__zImplements.__getattr__x   s:    	&9 	& 	& 	& %%%	&s   
 $c                     || |<   d S r   r>   )r1   r   r   s      r   __setattr__zImplements.__setattr__~   s    S			r   c                      | j         | fi |S r   )r)   )r1   r3   s     r   extendzImplements.extend   s    t~d--f---r   N)rI   rJ   rK   rL   rX   rZ   r\   r>   r   r   rT   rT   u   sG        99& & &  . . . . .r   rT   F)directtopicfanoutheaders)asynchronousexchange_type
heartbeatsc                   b   e Zd ZdZeZdZdZdZefZ	e
fZdZdZdZe                                Zd Zd Zd Zd Zd	 Zd
 ZddZd Zd Zd Zd Zd Zej        ej         e!j"        e!j#        ffdZ$d Z%d Z&dde'de'fdZ(e)d             Z*d Z+e,d             Z-e)d             Z.e)d             Z/dS ) r   zBase class for transports.NFN/Ac                     || _         d S r   )client)r1   rg   r3   s      r   rQ   zTransport.__init__   s    r   c                 "    t          | d          )Nestablish_connectionr:   r;   s    r   ri   zTransport.establish_connection   s    5666r   c                 "    t          | d          )Nclose_connectionr:   r1   
connections     r   rk   zTransport.close_connection   s    1222r   c                 "    t          | d          )Ncreate_channelr:   rl   s     r   ro   zTransport.create_channel   s    /000r   c                 "    t          | d          )Nclose_channelr:   rl   s     r   rq   zTransport.close_channel   s    ///r   c                 "    t          | d          )Ndrain_eventsr:   )r1   rm   r3   s      r   rs   zTransport.drain_events   r<   r      c                     d S r   r>   )r1   rm   rates      r   heartbeat_checkzTransport.heartbeat_check       r   c                     dS )Nre   r>   r;   s    r   driver_versionzTransport.driver_version   s    ur   c                     dS )Nr   r>   rl   s     r   get_heartbeat_intervalz Transport.get_heartbeat_interval   s    qr   c                     d S r   r>   r1   rm   loops      r   register_with_event_loopz"Transport.register_with_event_loop   rx   r   c                     d S r   r>   r~   s      r   unregister_from_event_loopz$Transport.unregister_from_event_loop   rx   r   c                     dS NTr>   rl   s     r   verify_connectionzTransport.verify_connection       tr   c                 4    j         fdS )Nc                     j         st          d          	  d           n$# $ r Y d S $ r}|j        v rY d }~d S  d }~ww xY w|                     |            d S )NzSocket was disconnectedr   )timeout)	connectedr   errno	call_soon)r   exc_read_unavailrm   rs   errorr   s     r   r   z%Transport._make_reader.<locals>._read   s    ' L01JKKKQ'''''      9((FFFFF NN5$'''''s   & AA	AAA)rs   )r1   rm   r   r   r   r   rs   s    ````@@r   _make_readerzTransport._make_reader   sI    !.	( 	( 	( 	( 	( 	( 	( 	( 	( 	( r   c                     dS r   r>   rl   s     r   qos_semantics_matches_specz$Transport.qos_semantics_matches_spec   r   r   c                 f    | j         }||                     |          x}| _          ||           d S r   )_Transport__readerr   )r1   rm   r   readers       r   on_readablezTransport.on_readable   s9    >%)%6%6z%B%BBFT]tr   **urireturnc                     t                      )z(Customise the display format of the URI.)r'   )r1   r   include_passwordmasks       r   as_urizTransport.as_uri   s    !###r   c                     i S r   r>   r;   s    r   default_connection_paramsz#Transport.default_connection_params   s    	r   c                 ,    |                      |           S r   )r   )r1   r2   r3   s      r   get_managerzTransport.get_manager   s    t$$$r   c                 *    |                                  S r   )r   r;   s    r   managerzTransport.manager   s    !!!r   c                     | j         j        S r   )
implementsrc   r;   s    r   supports_heartbeatszTransport.supports_heartbeats   s    ))r   c                     | j         j        S r   )r   ra   r;   s    r   supports_evzTransport.supports_ev   s    ++r   )rt   )Fr   )0rI   rJ   rK   rL   r   rg   can_parse_urldefault_portr   connection_errorsr   channel_errorsdriver_typedriver_namer   default_transport_capabilitiesr\   r   rQ   ri   rk   ro   rq   rs   rw   rz   r|   r   r   r   socketr   r   r   EAGAINEINTRr   r   r   strr   propertyr   r   r   r   r   r   r>   r   r   r   r      s       $$J F M L )* #_N
 K KH/6688J  7 7 73 3 31 1 10 0 0/ / /              06~!<5<2M   &    $ $# $S $ $ $ $   X% % % " " _" * * X* , , X, , ,r   r   )rL   r   r   amqp.exceptionsr   kombu.exceptionsr   r   kombu.messager   kombu.utils.functionalr   kombu.utils.objectsr   kombu.utils.timer	   __all__intr#   r!   r   r,   r
   r   r   rT   	frozensetr   r   r>   r   r   <module>r      s       6 6 6 6 6 6 : : : : : : : : ! ! ! ! ! ! - - - - - - / / / / / / * * * * * *
> ]+#]3!3'-s3%s+  B B BD; ; ;$ $ $       D/ / / / / / / /. . . . . . . .  ",)DDDEE" " " v, v, v, v, v, v, v, v, v, v,r   