
    hM                         S r SSKrSSKJrJr  SSKJrJr  SSKJ	r	J
r
  Sr\R                  " S5      rS	r " S
 S5      rg)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                   V    \ rS rSrSrS rSrS rS r  SS jr	S	 r
SS
 jrS r0 rSrg)r
      zSuperclass 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                     SU l         Xl        X l        XR                  U'   / U l        SU l        0 U l        0 U l        U R                  5         g )NF)	
is_closing
connection
channel_idchannelsmethod_queueauto_decode_pending
_callbacks_setup_listeners)selfr   r   s      =D:\TimeStamps\venv\Lib\site-packages\amqp/abstract_channel.py__init__AbstractChannel.__init__   sK    $$*.J'     )	r   r   r   r   r   r   r   __dict____weakref__c                     U $ N r   s    r   	__enter__AbstractChannel.__enter__7   s    r   c                 $    U R                  5         g r    )close)r   exc_infos     r   __exit__AbstractChannel.__exit__:   s    

r   Nc                 P   [        5       nU R                  n	U	c  [        S5      eU(       a  [        X#5      OSn U	R	                  SU R
                  XU5        U(       a  UR                  U5        U" 5         U(       a  U R                  XWS9$ U$ ! [         a    [        S5      ef = f)Nzconnection already closed r   )returns_tuple)	r   r   r   r   frame_writerr   StopIterationthenwait)
r   sigformatargscontentr0   callbackr,   pconns
             r   send_methodAbstractChannel.send_method=   s     I<,-HII&,uV""	Ja#WE
 FF8	99T9??  	J,-HII	Js   B B%c                     [        S5      e)z!Close this Channel or Connection.zMust be overridden in subclass)NotImplementedErrorr"   s    r   r&   AbstractChannel.closeR   s    !"BCCr   c                    [        U5      nU R                  n/ n[        U[        5      (       d  U/nU H'  nUR	                  UR                  U5      5        XVU'   M)      UR                  (       d,  U R                  R                  US9  UR                  (       d  M,  UR                  (       a^  UR                  u  pU	SS  n	U(       a  U	OU	=(       a    U	S    [        U5       H$  u  pX{   b  X{   Xh'   M  UR                  US 5        M&     $  [        U5       H$  u  pX{   b  X{   Xh'   M  UR                  US 5        M&     g ! [        U5       H$  u  pX{   b  X{   Xh'   M  UR                  US 5        M&     f = f)N)timeoutr   r   )r   r   
isinstancelistappendgetreadyr   drain_eventsvalue	enumeratepop)r   methodr5   r>   r,   r6   pendingprev_pmr3   kwargsis               r   r0   AbstractChannel.waitV   sI   8$--&$''XFAMM'++a.)AJ 	)gg,,W,= ggg ww wwABx,t43CDGD!&)9(!'GJKK4(	 * 
 "&)9(!'GJKK4(	 *	&)9(!'GJKK4(	 *s    ;E :E 5E6c                 @   U R                   (       a5  UU R                  ;  a%  [        R                  [        XR
                  5        g U(       aM  U R                  (       a<  [        US5      (       a+   UR                  R                  UR                  5      Ul         U R                  U   n U R                  U   /nS n U R                   R#                  U5      n/ nUR$                  (       a  ['        UR$                  US5      u  pxUR(                  (       a  UR+                  U5        U H  n	U	" U6   M
     U(       a
  U" U/UQ76   g g ! [         a     Nf = f! [         a    [        SU< 35      ef = f! [         a    / n Nf = f! [         a    U(       d   g  Nf = f)Ncontent_encodingzUnknown AMQP method    )r   _ALLOWED_METHODS_WHEN_CLOSINGAMQP_LOGGERwarning#IGNORED_METHOD_DURING_CHANNEL_CLOSEr   r   hasattrbodydecoderP   	Exception_METHODSKeyErrorr   r   r   rG   r3   r	   r4   rA   )
r   
method_sigpayloadr4   amqp_method	listenersone_shotr3   _listeners
             r   dispatch_methodAbstractChannel.dispatch_methodp   s   ??z.. 

 3OO   !344&||2273K3KL	7--
3K
	45I 	}}((4H
 K,,gq9GDKK !HdO " Z'$' ;  
  	7)&zn57 7	7  	I	
  	 	sB   1*E E ,E5 ?F 
EEE25FFFF)r   r   r   r   r   r   r   )NNNNNF)NNF)__name__
__module____qualname____firstlineno____doc__r   	__slots__r#   r(   r8   r&   r0   rc   rZ   __static_attributes__r!   r   r   r
   r
      sB    
 
I 59<A*D)4/(f Hr   r
   )ri   loggingviner   r   
exceptionsr   r   serializationr   r	   __all__	getLoggerrS   rU   r
   r!   r   r   <module>rr      s?    4  ( K '
'' #
O Or   