
    h
C                         S r SSKrSSKJr  SSKJr  SSKJr  SSKJrJ	r	  SSK
Jr  SS	KJr  SS
KJr  SSKJr  SrSrSrS rS rS rS rS rS rS rS r\R:                  \0r " S S5      rg)zeConvert between bytestreams and higher-level AMQP types.

2007-11-05 Barry Pederson <bp@barryp.org>

    N)datetime)Decimal)BytesIO)packunpack_from   )FrameSyntaxError)Basic)bytes_to_str)str_to_bytesz*    Table type {0!r} not handled by amqp.
zCTable type {0!r} for key {1!r} not handled by amqp. [value: {2!r}]
z9    Table type {0!r} not handled by amqp. [value: {1!r}]
c                    [        X   5      nUS-  nUS:X  a*  [        SX5      u  nUS-  n [        XX-    5      nX-  nXA4$ US:X  a)  [        SX5      u  nUS-  n[        XX-    5      nX-  nXA4$ US:X  a   [        SX5      u  nUS-  nXX-    nX-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US	:X  a  [        S
X5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  a  [        SX5      u  nUS-  nXA4$ US:X  aC  [        SX5      u  nUS-  n[        SX5      u  nUS-  n[	        U5      [	        SU-  5      -  nXA4$ US:X  a^  [        SX5      u  nUS-  nX-   n	0 nX:  a=  [        SX5      u  n
US-  n[        XX-    5      nX-  n[        X5      u  XK'   nX:  a  M=  XA4$ US:X  aF  [        SX5      u  nUS-  nX-   n	/ nX:  a%  [        X5      u  pUR                  U5        X:  a  M%  XA4$ US :X  a!  [        SX5      u  n[        U5      nUS-  nXA4$ US!:X  a,  [        SX5      u  nUS-  n[        R                  " U5      nXA4$ US":X  a  S nXA4$ [        S#R                  U[        U5      5      5      e! [         a
    XX-    n GNf = f)$Nr   S>I   s>BxbBz>bUz>h   u>HIz>iiLz>q   l>Qf>fdz>dD
   FAtTVz#Unknown value in table: {!r} ({!r}))chrr   pstr_tUnicodeDecodeErrorr   
_read_itemappendboolr   utcfromtimestampr	   formattype)bufoffsetftypeslenvalblenr"   ntlenlimitkeylenkeyalenvs                 :D:\TimeStamps\venv\Lib\site-packages\amqp/serialization.pyr-   r-       s   E
aKF |D#.!	,FM23C 	D ;A 
#D#.!S./x ;u 
#D#.!'l ;i 
#4-!d ;a 
#4-!\ ;Y 
#4-!T ;Q 
#4-!L ;I 
#4-!D ;A 
#4-!| ;y 
#4-!t ;q 
#4-!l ;i 
#4-!d ;a 
#4-!\ ;Y 
#s+!s+!aj727++N ;K 
#D#.!n!$4GFaKFFO45CF)#6CHf n@ ;3 
#D#.!n"3/IAJJqM n( ;! 
#4-3i! ; 
#4-!'', ; 
#
 ; 188tE{$% 	%E " 	,V]+C	,s   L1 1MMc                 4   S=p4/ nUR                   n[        U 5      n U  GHs  nUS:X  a2  U(       d  [        XUS-    5      nUS-  nSnUS-  S:H  nUS-  nUS-  nGO/US:X  a  S=p4[        SX5      u  nUS-  nGOUS:X  a  S=p4[        SX5      u  nUS	-  nGOUS
:X  a  S=p4[        SX5      u  nUS-  nGOUS:X  a  S=p4[        SX5      u  nUS-  nGOUS:X  a  S=p4[        SX5      u  nUS-  nGOUS:X  a2  S=p4[        SX5      u  n	US-  nXX)-    R	                  SS5      nX)-  nGOaUS:X  a2  S=p4[        SX5      u  n	US-  nXX)-    R	                  SS5      nX)-  nGO)US:X  a  [        SX5      u  n
US-  nXX*-    nX*-  nGOUS:X  a_  S=p4[        SX5      u  nUS-  nX+-   n0 nX,:  a=  [        SX5      u  nUS-  n[        XX--    5      nX--  n[        X5      u  X'   nX,:  a  M=  OUS:X  aH  S=p4[        SX5      u  nUS-  nX/-   n/ nX,:  a&  [        X5      u  nnUR                  U5        X,:  a  M&  OQUS:X  a-  S=p4[        SX5      u  nUS-  n[        R                  " U5      nO[        [        R                  U5      5      eU" U5        GMv     XR4$ )zDeserialize amqp format.

bit = b
octet = o
short = B
long = l
long long = L
float = f
shortstr = s
longstr = S
table = F
array = A
timestamp = T
r   r   r   r   or   r   r   r   r   r   r   r   r   r    r!   r   utf-8surrogatepassr   r   r%   r&   r(   )r.   r+   ordr   decoder-   r   r0   r	   ILLEGAL_TABLE_TYPEr1   )r1   r3   r4   bitcountbitsvaluesr.   pr7   r6   r8   r:   r;   r<   r=   r>   avals                    r@   loadsrM      s/    HF]]FF^F83fqj12!!8/CQJDMH#XHtS1DCaKF#XHtS1DCaKF#XHtS1DCaKF#XHtS1DCaKF#XHtS1DCaKF#XHS1EDaKFV]+227OLCNF#XHc2EDaKFV]+227OLCNF#Xc2EDaKFV]+CNF#XHc2EDaKFMEC.%dC8!S89 #-c#: & . #XHc2EDaKFMEC.)#6f

4  . #XHtS1DCaKF++C0C"#5#<#<Q#?@@sU V >    c                 X    U (       a#  U" [        S[        U 5      -  /U Q76 5        / U S S & g)Nr   r   )r   len)rI   writes     r@   
_flushbitsrR      s+    d3T?*T*+QrN   c                    Sn/ n[        5       nUR                  n[        U 5      n [        U5       GH  u  pgX   nUS:X  a=  U(       a  SOSnUS-  n	U	S:X  a  UR	                  S5        US==   Xy-  -  ss'   US-  nMM  US:X  a  [        X55      nU" [        SU5      5        Mr  US:X  a(  [        X55      nU" [        S[        U5      5      5        M  US	:X  a  [        X55      nU" [        S
U5      5        M  US:X  a  [        X55      nU" [        SU5      5        M  US:X  a   [        X55      nU" [        SU5      5        GM  US:X  ac  U=(       d    Sn[        X55      n[        U[        5      (       a  UR                  SS5      nU" [        S[        U5      5      5        U" U5        GMy  US:X  d  US:X  ac  U=(       d    Sn[        X55      n[        U[        5      (       a  UR                  SS5      nU" [        S
[        U5      5      5        U" U5        GM  US:X  a#  [        X55      n[        U=(       d    0 XS5        GM  US:X  a#  [        X55      n[        U=(       d    / XS5        GM:  US:X  d  GMC  U" [        S[        [        R                  " UR!                  5       5      5      5      5        GM     [        X55        UR#                  5       $ )zSerialize AMQP arguments.

Notes:
    bit = b
    octet = o
    short = B
    long = l
    long long = L
    shortstr = s
    longstr = S
    byte array = x
    table = F
    array = A
r   r   r   r   rB   r   r   r   r   r   r   r    r!   r    rC   rD   r   r   r%   r&   r(   )r   rQ   r+   	enumerater.   rR   r   int
isinstancestrencoderP   _write_table_write_arraycalendartimegmutctimetuplegetvalue)
r1   rJ   rH   rI   outrQ   r   r7   rK   shifts
             r@   dumpsrc      sN    HD
)CIIEF^FF#I8!CqLEzAH&HMH#X!$.H$sC.!#X!$.H$tSX&'#X!$.H$tS/"#X!$.H$tS/"#X!$.H$tS/"#X)C!$.H#s##jj/:$sCH%&#J#Xc)C!$.H#s##jj/:$tSX&'#J#X!$.HE0#X!$.HE0#X$tS1A1A1C!DEFG[ $\ t<<>rN   c           	         [        5       nUR                  nU R                  5        H\  u  pV[        U[        5      (       a  UR                  SS5      nU" [        S[        U5      5      5        U" U5         [        XdU5        M^     UR                  5       nU" [        S[        U5      5      5        U" U5        g ! [         a)    [        [        R                  [        U5      XV5      5      ef = f)NrC   rD   r   r   )r   rQ   itemsrX   rY   rZ   r   rP   _write_item
ValueErrorr	   ILLEGAL_TABLE_TYPE_WITH_KEYr1   r2   r`   )r"   rQ   rI   ra   twritekr?   
table_datas           r@   r[   r[   E  s    
)CYYF	a/2AtCQ !q		C4(  J	$tS_
%&	*  	C"+2247AAC C	Cs   7B;;3C.c           	      .   [        5       nUR                  nU  H  n [        XTU5        M     UR                  5       nU" [        S[        U5      5      5        U" U5        g ! [         a)    [	        [
        R                  [        U5      U5      5      ef = f)Nr   )r   rQ   rf   rg   r	   ILLEGAL_TABLE_TYPE_WITH_VALUEr1   r2   r`   r   rP   )list_rQ   rI   ra   awriter?   
array_datas          r@   r\   r\   W  s    
)CYYF	B4(  J	$tS_
%&	*  	B"-44T!Wa@B B	Bs   A!!3Bc                 V   [        U [        [        45      (       aL  [        U [        5      (       a  U R                  SS5      n U" [	        SS[        U 5      5      5        U" U 5        g [        U [        5      (       a  U" [	        SS[        U 5      5      5        g [        U [        5      (       a  U" [	        SSU 5      5        g [        U [        5      (       a4  U S	:  d  U S
:  a  U" [	        SSU 5      5        g U" [	        SSU 5      5        g [        U [        5      (       aF  U R                  5       u  p4nSn U H  nU S-  U-   n M     U(       a  U * n U" [	        SSU* U 5      5        g [        U [        5      (       a?  U" [	        SS[        [        R                  " U R                  5       5      5      5      5        g [        U [        5      (       a  U" S5        [!        XU5        g [        U ["        [$        45      (       a  U" S5        ['        XU5        g U c	  U" S5        g [)        5       e)NrC   rD   z>cI   Sz>cB   tz>cd   dii  z>cq   Lz>ci   Ir   r$   z>cBi   Dz>cQ   T   F   A   V)rX   rY   bytesrZ   r   rP   r/   rW   floatr   as_tupler   r]   r^   r_   dictr[   listtupler\   rg   )r?   rQ   rI   signdigitsexponentr"   s          r@   rf   rf   e  s   !c5\""a/2Ad5$A'(a	At		d5$A'(	Au		d5$"#	As		z>Q_$udA&'$udA&'	Aw		!"hAR1A Ad64(A./	Ax	 	 c(//!..2B"CDE	G	At		dQt$	Ae}	%	%dQt$	
dlrN   c                 ,   0 n[        SX5      u  nUS-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS	-  (       a  [        S
X5      u  pQUu  US'   US-  (       a  [        SX5      u  US'   US-  nUS-  (       a  [        SX5      u  US'   US-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a  [        SX5      u  US'   US-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US'   X-  nUS-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US '   X-  nUS!-  (       a)  [        SX5      u  nUS-  n[        XX-    5      US"'   X-  nX!4$ )#zDecode basic properties.r   r   i   r   r   content_typei @  content_encodingi    r%   application_headersi   delivery_modei   priorityi   correlation_idi   reply_to   
expiration   
message_id@   r   	timestampr       r2      user_idapp_idr   
cluster_id)r   r+   rM   )r3   r4   
propertiesflagsr6   _fs         r@   decode_properties_basicr     s   Js+FE
aKFv~D#.!%+Cv},E%F
>"v~D#.!)/6=0I)J
%&v~3,
-/*
()v~'24'E$
?#!v~"-dC"@
:!v~D#.!'-c.G'H
#$v~D#.!!'6=(A!B
:v~D#.!#)#V]*C#D
< v~D#.!#)#V]*C#D
< v~#.tS#A 
;!v~D#.!#Cv}$=>
6v~D#.! &s&-'@ A
9v~D#.!%c&?@
8v~D#.!#)#V]*C#D
< rN   c                   R    \ rS rSrSrSrS/rSS jrSrS r	S r
S	 rSS
 jrS rSrg)GenericContenti  z\Abstract base class for AMQP content.

Subclasses should override the PROPERTIES attribute.
N)dummyr   c                 `    Xl         X l        X0l        / U l        SU l        SU l        SU l        g )Nr   F)frame_method
frame_argsr   _pending_chunksbody_received	body_sizeready)selfr   r   propss       r@   __init__GenericContent.__init__  s0    ($!
rN   )	r   r   r   r   r   r   r   __dict____weakref__c                 v    US:X  a  [        S5      eXR                  ;   a  U R                  U   $ [        U5      e)N__setstate__)AttributeErrorr   )r   names     r@   __getattr__GenericContent.__getattr__  s;     >! 00??"??4((T""rN   c                 4    [         U   " X#5      u  pCX@l        U$ )zLoad AMQP properties.

Given the raw bytes containing the property-flags and property-list
from a content-frame-header, parse and insert into a dictionary
stored in this object as an attribute named 'properties'.
)PROPERTY_CLASSESr   )r   class_idr3   r4   r   s        r@   _load_propertiesGenericContent._load_properties  s     )23?rN   c                    SnSn/ n/ / pTU R                   nU R                   Hs  u  pxUR                  US5      n	U	bT  US:X  a  UR                  U5        SnSnUSU-  -  nUS:w  a+  UR                  [	        U5      5        UR                  U	5        US-  nMu     UR                  U5        [        5       n
U
R                  nU H  nU" [        SU5      5        M     U" [        SR                  U5      U5      5        U
R                  5       $ )zSerialize AMQP properties.

Serialize the 'properties' attribute (a dictionary) into
the raw bytes making up a set of property flags and a
property list, suitable for putting into a content frame header.
   r   Nr   bitr   rN   )r   
PROPERTIESgetr.   r   r   rQ   r   rc   joinr`   )r   rb   	flag_bitsr   sformatsvaluesr   r=   proptyper7   resultrQ   s               r@   _serialize_properties$GenericContent._serialize_properties  s     	r!__MC))C&CA:LL+ !IEa5j)	u$NN<#9:NN3'QJE - 	YI$tY'( eCHHW%w/0  rN   c                     [        SX5      u  o0l        US-  nU R                  X1U5        U R                  (       d  SU l        U$ )Nz>HxxQ   T)r   r   r   r   )r   r3   r4   r   s       r@   inbound_headerGenericContent.inbound_header2  s?    #.w#D ."hV4~~DJrN   c                 B   U R                   nU =R                  [        U5      -  sl        U R                  U R                  :  aJ  U(       a5  UR	                  U5        [        5       R                  U5      U l        / US S & OXl        SU l        g UR	                  U5        g )NT)	r   r   rP   r   r.   r|   r   bodyr   )r   r3   chunkss      r@   inbound_bodyGenericContent.inbound_body:  sv    %%c#h&/c"!GLL0	q		DJMM#rN   )r   r   r   r   r   r   r   r   )NN)r   )__name__
__module____qualname____firstlineno____doc__CLASS_IDr   r   	__slots__r   r   r   r   r   __static_attributes__ rN   r@   r   r     s<    
 H !J
I	#
!!FrN   r   ) r   r]   r   decimalr   ior   structr   r   
exceptionsr	   specr
   utilsr   r+   r   rG   rh   rm   r-   rM   rR   rc   r[   r\   rf   r   r   r   r   r   rN   r@   <module>r      s        $ (  )   ! 
od`FFR$#LER 
NN+ 
n nrN   