
    YfM                         d Z ddlZddlmZmZ ddlmZmZ ddlm	Z	m
Z
 dZ ej        d          Zd	Z G d
 d          ZdS )z.Code common to Connection and Channel objects.    N)ensure_promisepromise   )AMQPNotImplementedErrorRecoverableConnectionError)dumpsloads)AbstractChannelamqpzIReceived method %s during closing channel %s. This method will be ignoredc                   L    e Zd ZdZd ZdZd Zd Z	 	 ddZd	 Z	dd
Z
d Zi ZdS )r
   a   Superclass for Connection and Channel.

    The connection is treated as channel 0, then comes
    user-created channel objects.

    The subclasses must have a _METHOD_MAP class property, mapping
    between AMQP method signatures and Python methods.
    c                     d| _         || _        || _        | |j        |<   g | _        d| _        i | _        i | _        |                                  d S )NF)	
is_closing
connection
channel_idchannelsmethod_queueauto_decode_pending
_callbacks_setup_listeners)selfr   r   s      G/var/www/html/env/lib/python3.11/site-packages/amqp/abstract_channel.py__init__zAbstractChannel.__init__   sZ    $$*.
J'     )	r   r   r   r   r   r   r   __dict____weakref__c                     | S N r   s    r   	__enter__zAbstractChannel.__enter__7   s    r   c                 .    |                                   d S r   )close)r   exc_infos     r   __exit__zAbstractChannel.__exit__:   s    

r   NFc                 h   t                      }| j        }	|	t          d          |rt          ||          nd}	 |	                    d| j        |||           n# t          $ r t          d          w xY w|r|                    |            |             |r|                     ||          S |S )Nzconnection already closed r   )returns_tuple)	r   r   r   r   frame_writerr   StopIterationthenwait)
r   sigformatargscontentr,   callbackr(   pconns
             r   send_methodzAbstractChannel.send_method=   s     II<,-HIII&,4uVT""""	Ja#tWEEEE 	J 	J 	J,-HIII	J  	FF8	 	@99T9???s   A A5c                      t          d          )z!Close this Channel or Connection.zMust be overridden in subclass)NotImplementedErrorr    s    r   r#   zAbstractChannel.closeR   s    !"BCCCr   c                    t          |          }| j        }g }t          |t                    s|g}|D ]/}|                    |                    |                     |||<   0	 |j        s"| j                            |           |j        "|j	        rb|j	        \  }	}
|	dd          }	|r|	n	|	o|	d         	 t          |          D ]/\  }}||         ||         ||<   |                    |d            0S 	 t          |          D ]/\  }}||         ||         ||<   |                    |d            0d S # t          |          D ]/\  }}||         ||         ||<   |                    |d            0w xY w)N)timeoutr   r   )r   r   
isinstancelistappendgetreadyr   drain_eventsvalue	enumeratepop)r   methodr1   r8   r(   r2   pendingprev_pmr/   kwargsis               r   r,   zAbstractChannel.waitV   s   8$$-&$'' 	XF 	 	AMM'++a..)))GAJJ	)g >,,W,=== g > w E wfABBx,Dtt43CDGD!&)) ) )1!9(!'GAJJKK4((((	)E
 "&)) ) )1!9(!'GAJJKK4((((	) )	&)) ) )1!9(!'GAJJKK4((((	)s   $AD8 8AE9c                    | j         r1|| j        vr(t                              t          || j                   d S |rM| j        rFt          |d          r6	 |j        	                    |j
                  |_        n# t          $ r Y nw xY w	 | j        |         }n # t          $ r t          d|          w xY w	 | j        |         g}n# t          $ r g }Y nw xY wd }	 | j                            |          }n# t          $ r |sY d S Y nw xY wg }|j        rt'          |j        |d          \  }}|j        r|                    |           |D ]}	 |	|  |r ||g|R   d S d S )Ncontent_encodingzUnknown AMQP method    )r   _ALLOWED_METHODS_WHEN_CLOSINGAMQP_LOGGERwarning#IGNORED_METHOD_DURING_CHANNEL_CLOSEr   r   hasattrbodydecoderI   	Exception_METHODSKeyErrorr   r   r   rA   r/   r	   r0   r;   )
r   
method_sigpayloadr0   amqp_method	listenersone_shotr/   _listeners
             r   dispatch_methodzAbstractChannel.dispatch_methodp   s   ? 		z. 
  

 3DO   F 	 	!344	&|2273KLL   	7-
3KK 	7 	7 	7)5z557 7 7	7	45II 	 	 	III		}((44HH 	 	 	  	  	:K,gq99GD! 	!KK   ! 	 	HHdOOO 	(HZ'$''''''	( 	(sB   $A8 8
BB	B B48C CCC7 7D	D	)NNNNNF)NNF)__name__
__module____qualname____doc__r   	__slots__r!   r%   r4   r#   r,   r\   rS   r   r   r   r
   r
      s         
  
  
 
I     59<A   *D D D) ) ) )4/( /( /(f HHHr   r
   )r`   loggingviner   r   
exceptionsr   r   serializationr   r	   __all__	getLoggerrL   rN   r
   r   r   r   <module>rh      s    4 4  ( ( ( ( ( ( ( ( K K K K K K K K ' ' ' ' ' ' ' '
g''' #
O O O O O O O O O Or   