
    iM                         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y)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                   J    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y)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 | _        | j                          y )NF)	
is_closing
connection
channel_idchannelsmethod_queueauto_decode_pending
_callbacks_setup_listeners)selfr   r   s      S/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/amqp/abstract_channel.py__init__zAbstractChannel.__init__   sQ    $$*.
J'     )	r   r   r   r   r   r   r   __dict____weakref__c                     | S N r   s    r   	__enter__zAbstractChannel.__enter__7   s    r   c                 $    | j                          y r   )close)r   exc_infos     r   __exit__zAbstractChannel.__exit__:   s    

r   Nc                 :   t               }| j                  }	|	t        d      |rt        ||      nd}	 |	j	                  d| j
                  |||       |r|j                  |        |        |r| j                  ||      S |S # t        $ r t        d      w xY w)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     I<,-HII&,uVT""	Ja#tWE
 FF8	99T9??  	J,-HII	Js   B B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Cr   c                    t        |      }| j                  }g }t        |t              s|g}|D ]'  }|j	                  |j                  |             |||<   ) 	 |j                  s)| j                  j                  |       |j                  s)|j                  rU|j                  \  }	}
|	dd  }	|r|	n|	xr |	d   	 t        |      D ]%  \  }}||   	||   ||<   |j                  |d        ' S 	 t        |      D ]%  \  }}||   	||   ||<   |j                  |d        ' y # t        |      D ]%  \  }}||   	||   ||<   |j                  |d        ' w 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   st   8$--&$'XF 	AMM'++a.)GAJ		)gg,,W,= gg ww wwfABx,t43CDGD!&) )1!9(!'GAJKK4(	) 
 "&) )1!9(!'GAJKK4(	)	&) )1!9(!'GAJKK4(	)s   4D% ,D% %5Ec                    | j                   r4|| j                  vr&t        j                  t        || j
                         y |rC| j                  r7t        |d      r+	 |j                  j                  |j                        |_        	 | j                  |   }	 | j                  |   g}d }	 | j                   j#                  |      }g }|j$                  rt'        |j$                  |d      \  }}|j(                  r|j+                  |       |D ]  }	 |	|  	 |r
 ||g|  y y # t        $ r Y w xY w# t        $ r t        d|      w xY w# t        $ r g }Y w xY w# t        $ r |sY y Y w xY w)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DOO   !34&||2273K3KL	7--
3K
	45I 	}}((4H
 K,,gq9GD!KK ! 	HdO	 Z'$' ;  
  	7)&zn57 7	7  	I	
  	 	sB   *D# D2 E *E #	D/.D/2E
EEE.-E.)NNNNNF)NNF)__name__
__module____qualname____doc__r   	__slots__r!   r%   r4   r#   r,   r\   rS   r   r   r   r
   r
      sB    
 
I 59<A*D)4/(f Hr   r
   )r`   loggingviner   r   
exceptionsr   r   serializationr   r	   __all__	getLoggerrL   rN   r
   r   r   r   <module>rh      sA    4  ( K '
g'' #
O Or   