
    ^f                    d   d Z ddlmZ ddlZddl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d	lmZ dd
lmZ er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.    )annotationsN)TYPE_CHECKING)RecoverableConnectionError)ChannelErrorConnectionError)Message)
dictfilter)cached_property)maybe_s_to_ms)TracebackType)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      F/var/www/html/env/lib/python3.11/site-packages/kombu/transport/base.py	<genexpr>z.to_rabbitmq_queue_arguments.<locals>.<genexpr>=   sD        C 	$C//         )r	   dictitems)	argumentsoptionsprepareds      r   to_rabbitmq_queue_argumentsr$   !   se    8 $  !--//      H +3A4	&&X&&&	Ar   c                D    t           |          \  }}|| ||          n|fS r   )RABBITMQ_QUEUE_ARGUMENTS)r   r   opttyps       r   r   r   D   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/   J   s.    FMMM6	# 	#$ $ $r   c                  B    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
ddZdS )r   zStandard channel base class.Nc                &    ddl m}  || g|R i |S )Nr   )Consumer)kombu.messagingr2   )selfargskwargsr2   s       r   r2   zStdChannel.ConsumerU   4    ,,,,,,x.t...v...r   c                &    ddl m}  || g|R i |S )Nr   )Producer)r3   r9   )r4   r5   r6   r9   s       r   r9   zStdChannel.ProducerY   r7   r   c                "    t          | d          Nget_bindingsr/   r4   s    r   r<   zStdChannel.get_bindings]       ~...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 )r4   queues     r   after_reply_message_receivedz'StdChannel.after_reply_message_received`   s      r   c                    |S r   rA   )r4   r!   r6   s      r   prepare_queue_argumentsz"StdChannel.prepare_queue_argumentsi   s    r   c                    | S r   rA   r>   s    r   	__enter__zStdChannel.__enter__l   s    r   exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | NonereturnNonec                .    |                                   d S r   )close)r4   rH   rJ   rL   s       r   __exit__zStdChannel.__exit__o   s     	

r   )rH   rI   rJ   rK   rL   rM   rN   rO   )__name__
__module____qualname____doc__no_ack_consumersr2   r9   r<   rC   rE   rG   rR   rA   r   r   r   r   P   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)r4   rZ   s     r   __init__zManagement.__init__{   s    "r   c                "    t          | d          r;   r=   r>   s    r   r<   zManagement.get_bindings~   r?   r   N)rS   rT   rU   rV   r[   r<   rA   r   r   r   r   x   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)r4   r   s     r   __getattr__zImplements.__getattr__   s:    	&9 	& 	& 	& %%%	&s   
 $c                    || |<   d S r   rA   )r4   r   r   s      r   __setattr__zImplements.__setattr__   s    S			r   c                     | j         | fi |S r   )r,   )r4   r6   s     r   extendzImplements.extend   s    t~d--f---r   N)rS   rT   rU   rV   rb   rd   rf   rA   r   r   r^   r^      sG        99& & &  . . . . .r   r^   F)directtopicfanoutheaders)asynchronousexchange_type
heartbeatsc                  Z   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!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)r4   rq   r6   s      r   r[   zTransport.__init__   s    r   c                "    t          | d          )Nestablish_connectionr=   r>   s    r   rs   zTransport.establish_connection   s    5666r   c                "    t          | d          )Nclose_connectionr=   r4   
connections     r   ru   zTransport.close_connection   s    1222r   c                "    t          | d          )Ncreate_channelr=   rv   s     r   ry   zTransport.create_channel   s    /000r   c                "    t          | d          )Nclose_channelr=   rv   s     r   r{   zTransport.close_channel   s    ///r   c                "    t          | d          )Ndrain_eventsr=   )r4   rw   r6   s      r   r}   zTransport.drain_events   r?   r      c                    d S r   rA   )r4   rw   rates      r   heartbeat_checkzTransport.heartbeat_check       r   c                    dS )Nro   rA   r>   s    r   driver_versionzTransport.driver_version   s    ur   c                    dS )Nr   rA   rv   s     r   get_heartbeat_intervalz Transport.get_heartbeat_interval   s    qr   c                    d S r   rA   r4   rw   loops      r   register_with_event_loopz"Transport.register_with_event_loop   r   r   c                    d S r   rA   r   s      r   unregister_from_event_loopz$Transport.unregister_from_event_loop   r   r   c                    dS NTrA   rv   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_unavailrw   r}   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)r}   )r4   rw   r   r   r   r   r}   s    ````@@r   _make_readerzTransport._make_reader   sI    !.	( 	( 	( 	( 	( 	( 	( 	( 	( 	( r   c                    dS r   rA   rv   s     r   qos_semantics_matches_specz$Transport.qos_semantics_matches_spec   r   r   c                f    | j         }||                     |          x}| _          ||           d S r   )_Transport__readerr   )r4   rw   r   readers       r   on_readablezTransport.on_readable   s9    >%)%6%6z%B%BBFT]tr   **uristrrN   c                    t                      )z(Customise the display format of the URI.)r*   )r4   r   include_passwordmasks       r   as_urizTransport.as_uri   s    !###r   c                    i S r   rA   r>   s    r   default_connection_paramsz#Transport.default_connection_params   s    	r   c                ,    |                      |           S r   )r   )r4   r5   r6   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   )
implementsrm   r>   s    r   supports_heartbeatszTransport.supports_heartbeats	  s    ))r   c                    | j         j        S r   )r   rk   r>   s    r   supports_evzTransport.supports_ev  s    ++r   )r~   )Fr   )r   r   rN   r   )/rS   rT   rU   rV   r   rq   can_parse_urldefault_portr   connection_errorsr   channel_errorsdriver_typedriver_namer   default_transport_capabilitiesrf   r   r[   rs   ru   ry   r{   r}   r   r   r   r   r   r   socketr   r   r   EAGAINEINTRr   r   r   r   propertyr   r   r
   r   r   r   rA   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   &    $ $ $ $ $   X% % % " " _" * * X* , , X, , ,r   r   )#rV   
__future__r   r   r   typingr   amqp.exceptionsr   kombu.exceptionsr   r   kombu.messager   kombu.utils.functionalr	   kombu.utils.objectsr
   kombu.utils.timer   typesr   __all__intr&   r$   r   r/   r   r   r   r^   	frozensetr   r   rA   r   r   <module>r      s&     # " " " " "               6 6 6 6 6 6 : : : : : : : : ! ! ! ! ! ! - - - - - - / / / / / / * * * * * * $######
> ]+#]3!3'-s3%s+   B  B  BF; ; ;$ $ $% % % % % % % %P/ / / / / / / /. . . . . . . .  ",)DDDEE" " " v, v, v, v, v, v, v, v, v, v,r   