o
    Œ¨ÊhN  ã                   @   s®   d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ d	ZeejjejjejjgƒZd
Zeefdd„ZG dd„ dƒZeeeeeeefdd„ZdS )z5Convert between frames and higher-level AMQP methods.é    ©Údefaultdict)ÚpackÚ	pack_intoÚunpack_fromé   )Úspec)ÚMessage)ÚUnexpectedFrame)Ústr_to_bytes)Úframe_handlerÚframe_writeré(   c                    s*   t dd„ ƒ‰i ‰‡ ‡‡‡‡‡fdd„}|S )z!Create closure that reads frames.c                   S   s   dS )Nr   © r   r   r   úE/var/www/html/env/lib/python3.10/site-packages/amqp/method_framing.pyÚ<lambda>   s    zframe_handler.<locals>.<lambda>c                    s:  | \}}}ˆ j d7  _ |ˆ| dfvrtd |ˆ| ¡ƒ‚|dkrCˆd|dƒ}|ˆv r:t||d�ˆ|< dˆ|< dS ˆ |||d ƒ d
S |dkrnˆ| }| |¡ |jsYd	ˆ|< dS dˆ|< ˆ |d ¡ ˆ ||j|j|ƒ d
S |d	kr•ˆ| }| 	|¡ |js€dS dˆ|< ˆ |d ¡ ˆ ||j|j|ƒ d
S |dkr›dS d
S )Nr   é   z*Received frame {} while expecting type: {}ú>HHr   )Úframe_methodÚ
frame_argsé   Fé   T)
Ú
bytes_recvr
   Úformatr	   Úinbound_headerÚreadyÚpopr   r   Úinbound_body)ÚframeÚ
frame_typeÚchannelÚbufÚ
method_sigÚmsg©ÚcallbackÚ
connectionÚcontent_methodsÚexpected_typesÚpartial_messagesr   r   r   Úon_frame"   sP   
ÿÿ
ÿæ
ô
ýzframe_handler.<locals>.on_framer   )r&   r%   r   r'   r*   r   r$   r   r      s   1r   c                   @   s.   e Zd Zdd„ Zedd„ ƒZejdd„ ƒZdS )ÚBufferc                 C   s
   || _ d S ©N)r!   ©Úselfr!   r   r   r   Ú__init__W   s   
zBuffer.__init__c                 C   s   | j S r,   )Ú_buf)r.   r   r   r   r!   Z   s   z
Buffer.bufc                 C   s   || _ t|ƒ| _d S r,   )r0   Ú
memoryviewÚviewr-   r   r   r   r!   ^   s   N)Ú__name__Ú
__module__Ú__qualname__r/   Úpropertyr!   Úsetterr   r   r   r   r+   V   s    
r+   c	           
         s6   |j ‰ttˆjd ƒƒ‰ ‡ ‡‡‡‡‡‡‡fdd„}	|	S )z"Create closure that writes frames.r   c              	      sŒ  ˆj d }d}d }ˆ|ƒ}|r@|j}t|tƒr#|j dd¡}	| |	¡}| ¡ }ˆ|ƒ}
ˆ|ƒp0d}ˆ|ƒ| |
 t }||k}nd\}}
}|r±| dkrXd 	ˆdg|¢R Ž |g¡nd}ˆ|ƒ}ˆˆd	| | |||d
ƒƒ |r°d 	ˆd|d dˆ|ƒƒ|g¡}ˆ|ƒ}ˆˆd	| d|||d
ƒƒ ˆd|
|ƒD ]}|||| … }ˆ|ƒ}ˆˆd	| d|||d
ƒƒ q”nŒ|ˆˆ j
ƒkr½t|ƒˆ _
ˆ j
}| dkrÑd 	ˆdg|¢R Ž |g¡nd}ˆ|ƒ}ˆd	| ||| |||d
ƒ |d| 7 }|d u�r4d 	ˆd|d dˆ|ƒƒ|g¡}ˆ|ƒ}ˆd	| ||d|||d
ƒ |d| 7 }ˆ|ƒ}
|
dk�r4|
}ˆd	| ||d|||d
ƒ |d| 7 }ˆˆ jd |… ƒ ˆ jd7  _d S )Nr   r   Úcontent_encodingzutf-8)Nr   r   r   ó    r   z>BHI%dsBéÎ   z>HHQr   r   )Ú	frame_maxÚbodyÚ
isinstanceÚstrÚ
propertiesÚ
setdefaultÚencodeÚ_serialize_propertiesÚFRAME_OVERHEADÚjoinr!   Ú	bytearrayr2   Ú
bytes_sent)Útype_r    r"   ÚargsÚcontentÚ
chunk_sizeÚoffsetr?   r<   ÚencodingÚbodylenÚproperties_lenÚframelenÚbigbodyr   Úir!   ©Úbuffer_storer&   Úlenr   r   Úranger   Úwriter   r   Úwrite_frameo   s”   

ÿ


ÿÿ

ÿþ

ÿ
þ€
ÿÿ
ÿ
þ
ÿ

ÿz!frame_writer.<locals>.write_frame)rV   r+   rE   r;   )
r&   Ú	transportr   r   rU   rT   Úbytesr   Útext_trW   r   rR   r   r   g   s   Nr   N)Ú__doc__Úcollectionsr   Ústructr   r   r   Ú r   Úbasic_messager	   Ú
exceptionsr
   Úutilsr   Ú__all__Ú	frozensetÚBasicÚReturnÚDeliverÚGetOkÚ_CONTENT_METHODSrC   r   r+   rU   rT   rY   r>   r   r   r   r   r   Ú<module>   s(    ý

ÿ:þ