o
    D“hK  ã                   @   sö   d dl Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZ dgZde j  kr.dk r5n nd	d
„ Zndd
„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeefee	efee	efeeeeedœiZdS )é    Né   )ÚDataÚEndOfMessage)ÚCLIENTÚIDLEÚ	SEND_BODYÚSEND_RESPONSEÚSERVER©ÚLocalProtocolErrorÚWRITERS)é   r   )r   é   c                 C   sL   g }|D ]}t |tƒr| | d¡¡ q| |¡ q|  d¡t|ƒ  d¡S )NÚascii)Ú
isinstanceÚbytesÚappendÚdecodeÚtupleÚencode)ÚbstrÚvaluesÚdecoded_valuesÚvalue© r   úG/var/www/html/env_mimamsha/lib/python3.10/site-packages/h11/_writers.pyÚbytesmod   s   
r   c                 C   s   | | S ©Nr   )r   r   r   r   r   r   !   s   c                 C   s\   | D ]\}}|dkr|t d||fƒƒ q| D ]\}}|dkr'|t d||fƒƒ q|dƒ d S )Ns   hosts   %s: %s
ó   
)r   )ÚheadersÚwriteÚnamer   r   r   r   Úwrite_headers%   s   €€r"   c                 C   s8   | j dkr	tdƒ‚|td| j| jfƒƒ t| j|ƒ d S )Nó   1.1úI only send HTTP/1.1s   %s %s HTTP/1.1
)Úhttp_versionr   r   ÚmethodÚtargetr"   r   )Úrequestr    r   r   r   Úwrite_request2   s   
r)   c                 C   sF   | j dkr	tdƒ‚t| jƒ d¡}|td|| jfƒƒ t| j|ƒ d S )Nr#   r$   r   s   HTTP/1.1 %s %s
)	r%   r   ÚstrÚstatus_coder   r   Úreasonr"   r   )Úresponser    Ústatus_bytesr   r   r   Úwrite_any_response:   s
   
	r/   c                   @   s   e Zd Zdd„ ZdS )Ú
BodyWriterc                 C   s@   t |ƒtu r|  |j|¡ d S t |ƒtu r|  |j|¡ d S J ‚r   )Útyper   Ú	send_dataÚdatar   Úsend_eomr   )ÚselfÚeventr    r   r   r   Ú__call__K   s
   zBodyWriter.__call__N)Ú__name__Ú
__module__Ú__qualname__r7   r   r   r   r   r0   J   s    r0   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚContentLengthWriterc                 C   s
   || _ d S r   )Ú_length)r5   Úlengthr   r   r   Ú__init__[   s   
zContentLengthWriter.__init__c                 C   s0   |  j t|ƒ8  _ | j dk rtdƒ‚||ƒ d S )Nr   z)Too much data for declared Content-Length)r<   Úlenr   ©r5   r3   r    r   r   r   r2   ^   s   
zContentLengthWriter.send_datac                 C   s"   | j dkr	tdƒ‚|rtdƒ‚d S )Nr   z+Too little data for declared Content-Lengthz%Content-Length and trailers don't mix)r<   r   ©r5   r   r    r   r   r   r4   d   s
   
ÿzContentLengthWriter.send_eomN)r8   r9   r:   r>   r2   r4   r   r   r   r   r;   Z   s    r;   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚChunkedWriterc                 C   s0   |sd S |t dt|ƒfƒƒ ||ƒ |dƒ d S )Ns   %x
r   )r   r?   r@   r   r   r   r2   l   s
   zChunkedWriter.send_datac                 C   s   |dƒ t ||ƒ d S )Ns   0
)r"   rA   r   r   r   r4   u   s   zChunkedWriter.send_eomN©r8   r9   r:   r2   r4   r   r   r   r   rC   k   s    	rC   c                   @   rB   )ÚHttp10Writerc                 C   s   ||ƒ d S r   r   r@   r   r   r   r2   {   s   zHttp10Writer.send_datac                 C   s   |rt dƒ‚d S )Nz&can't send trailers to HTTP/1.0 clientr
   rA   r   r   r   r4   ~   s   ÿzHttp10Writer.send_eomNrD   r   r   r   r   rE   z   s    rE   )Úchunkedzcontent-lengthzhttp/1.0)ÚsysÚ_eventsr   r   Ú_stater   r   r   r   r	   Ú_utilr   Ú__all__Úversion_infor   r"   r)   r/   Úobjectr0   r;   rC   rE   r   r   r   r   r   Ú<module>   s0   	
ýü