B
    åCeÙ  ã               @   s   U d dl mZmZmZmZmZmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZ dgZeegef Zeedd	œd
d„Zeeddœdd„Zeeef eddœdd„ZG dd„ dƒZ G dd„ de ƒZ!G dd„ de ƒZ"G dd„ de ƒZ#eeeee ee f ee f eee$ee  f eeeef egdf eeegdf f f Z%eefeeefeeefeee"e!e#dœiZ&e%e'd< dS )é    )ÚAnyÚCallableÚDictÚListÚTupleÚTypeÚUnioné   )ÚDataÚEndOfMessageÚEventÚInformationalResponseÚRequestÚResponse)ÚHeaders)ÚCLIENTÚIDLEÚ	SEND_BODYÚSEND_RESPONSEÚSERVER)ÚLocalProtocolErrorÚSentinelÚWRITERSN)ÚheadersÚwriteÚreturnc             C   sj   | j }x*|D ]"\}}}|dkr|d||f ƒ qW x*|D ]"\}}}|dkr8|d||f ƒ q8W |dƒ d S )Ns   hosts   %s: %s
s   
)Z_full_items)r   r   Ú	raw_itemsÚraw_nameÚnameÚvalue© r    ú`/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/h11/_writers.pyÚwrite_headers   s    r"   )Úrequestr   r   c             C   s6   | j dkrtdƒ‚|d| j| jf ƒ t| j|ƒ d S )Ns   1.1zI only send HTTP/1.1s   %s %s HTTP/1.1
)Úhttp_versionr   ÚmethodÚtargetr"   r   )r#   r   r    r    r!   Úwrite_request$   s    
r'   )Úresponser   r   c             C   sD   | j dkrtdƒ‚t| jƒ d¡}|d|| jf ƒ t| j|ƒ d S )Ns   1.1zI only send HTTP/1.1Úasciis   HTTP/1.1 %s %s
)r$   r   ÚstrÚstatus_codeÚencodeÚreasonr"   r   )r(   r   Zstatus_bytesr    r    r!   Úwrite_any_response,   s
    
	r.   c               @   sB   e Zd Zeeddœdd„Zeeddœdd„Zeeddœd	d
„Z	dS )Ú
BodyWriterN)Úeventr   r   c             C   sD   t |ƒtkr|  |j|¡ n$t |ƒtkr8|  |j|¡ nds@t‚d S )NF)Útyper
   Ú	send_dataÚdatar   Úsend_eomr   ÚAssertionError)Úselfr0   r   r    r    r!   Ú__call__?   s
    zBodyWriter.__call__)r3   r   r   c             C   s   d S )Nr    )r6   r3   r   r    r    r!   r2   G   s    zBodyWriter.send_data)r   r   r   c             C   s   d S )Nr    )r6   r   r   r    r    r!   r4   J   s    zBodyWriter.send_eom)
Ú__name__Ú
__module__Ú__qualname__r   ÚWriterr7   Úbytesr2   r   r4   r    r    r    r!   r/   >   s   r/   c               @   s@   e Zd Zeddœdd„Zeeddœdd„Zeeddœd	d
„Z	dS )ÚContentLengthWriterN)Úlengthr   c             C   s
   || _ d S )N)Ú_length)r6   r>   r    r    r!   Ú__init__U   s    zContentLengthWriter.__init__)r3   r   r   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   )r6   r3   r   r    r    r!   r2   X   s    
zContentLengthWriter.send_data)r   r   r   c             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   )r6   r   r   r    r    r!   r4   ^   s    
zContentLengthWriter.send_eom)
r8   r9   r:   Úintr@   r<   r;   r2   r   r4   r    r    r    r!   r=   T   s   r=   c               @   s0   e Zd Zeeddœdd„Zeeddœdd„ZdS )ÚChunkedWriterN)r3   r   r   c             C   s,   |sd S |dt |ƒ ƒ ||ƒ |dƒ d S )Ns   %x
s   
)rA   )r6   r3   r   r    r    r!   r2   f   s
    zChunkedWriter.send_data)r   r   r   c             C   s   |dƒ t ||ƒ d S )Ns   0
)r"   )r6   r   r   r    r    r!   r4   o   s    zChunkedWriter.send_eom)r8   r9   r:   r<   r;   r2   r   r4   r    r    r    r!   rC   e   s   	rC   c               @   s0   e Zd Zeeddœdd„Zeeddœdd„ZdS )ÚHttp10WriterN)r3   r   r   c             C   s   ||ƒ d S )Nr    )r6   r3   r   r    r    r!   r2   u   s    zHttp10Writer.send_data)r   r   r   c             C   s   |rt dƒ‚d S )Nz&can't send trailers to HTTP/1.0 client)r   )r6   r   r   r    r    r!   r4   x   s    zHttp10Writer.send_eom)r8   r9   r:   r<   r;   r2   r   r4   r    r    r    r!   rD   t   s   rD   )Úchunkedzcontent-lengthzhttp/1.0)(Útypingr   r   r   r   r   r   r   Z_eventsr
   r   r   r   r   r   Ú_headersr   Ú_stater   r   r   r   r   Z_utilr   r   Ú__all__r<   r;   r"   r'   r.   r/   r=   rC   rD   r*   ZWritersTyper   Ú__annotations__r    r    r    r!   Ú<module>
   s8    $ 	