o
    DfN                     @   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   L/home/ubuntu/webapp/venv/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sdS d|< |d   ||j|j| d
S |dkrd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
 |rd	d|d d||g}|}d	| d|||d
 d|
|D ]}||||  }|}d	| d|||d
 qn| j
krt| _
 j
}| dkrd	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(    

: