o
    €Ýhr  ã                   @   sö   d dl Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
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é   ©ÚLocalProtocolError)ÚDataÚEndOfMessage)ÚCLIENTÚSERVERÚIDLEÚSEND_RESPONSEÚ	SEND_BODYÚ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ÚvaluesZdecoded_valuesÚvalue© r   úT/var/www/html/magazine_api/magazine_env/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_request,   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   Zstatus_bytesr   r   r   Úwrite_any_response3   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__C   s
   zBodyWriter.__call__N)Ú__name__Ú
__module__Ú__qualname__r5   r   r   r   r   r.   B   s    r.   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚContentLengthWriterc                 C   s
   || _ d S r   )Ú_length)r3   Úlengthr   r   r   Ú__init__R   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   ©r3   r1   r   r   r   r   r0   U   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   ©r3   r   r   r   r   r   r2   \   s   
ÿÿzContentLengthWriter.send_eomN)r6   r7   r8   r<   r0   r2   r   r   r   r   r9   Q   s    r9   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   r0   d   s
   zChunkedWriter.send_datac                 C   s   |dƒ t ||ƒ d S )Ns   0
)r!   r?   r   r   r   r2   m   s   zChunkedWriter.send_eomN©r6   r7   r8   r0   r2   r   r   r   r   rA   c   s    	rA   c                   @   r@   )ÚHttp10Writerc                 C   s   ||ƒ d S r   r   r>   r   r   r   r0   r   s   zHttp10Writer.send_datac                 C   s   |rt dƒ‚d S )Nz&can't send trailers to HTTP/1.0 clientr   r?   r   r   r   r2   u   s
   ÿÿzHttp10Writer.send_eomNrB   r   r   r   r   rC   q   s    rC   )Úchunkedzcontent-lengthzhttp/1.0)ÚsysZ_utilr   Z_eventsr   r   Ú_stater   r   r	   r
   r   Ú__all__Úversion_infor   r!   r(   r-   Úobjectr.   r9   rA   rC   r   r   r   r   r   Ú<module>   s0   	
	ýü