o
    h                     @   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ded	ed
dfddZded	ed
dfddZdeeef d	ed
df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WRITERSheaderswritereturnNc                 C   sb   | j }|D ]\}}}|dkr|d||f  q|D ]\}}}|dkr*|d||f  q|d d S )Ns   hosts   %s: %s
   
)_full_items)r   r   	raw_itemsraw_namenamevalue r"   ?/var/www/html/venv/lib/python3.10/site-packages/h11/_writers.pywrite_headers   s   r$   requestc                 C   s6   | j dkr	td|d| j| jf  t| j| d S )N   1.1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+   responsec                 C   sD   | j dkr	tdt| jd}|d|| jf  t| j| d S )Nr&   r'   asciis   HTTP/1.1 %s %s
)r(   r   strstatus_codeencodereasonr$   r   )r,   r   status_bytesr"   r"   r#   write_any_response,   s
   
	r3   c                   @   sN   e Zd ZdededdfddZdededdfdd	Zd
ededdfddZ	dS )
BodyWritereventr   r   Nc                 C   s@   t |tu r| |j| d S t |tu r| |j| d S J N)typer
   	send_datadatar   send_eomr   )selfr5   r   r"   r"   r#   __call__?   s
   zBodyWriter.__call__r9   c                 C      d S r6   r"   r;   r9   r   r"   r"   r#   r8   G      zBodyWriter.send_datar   c                 C   r=   r6   r"   r;   r   r   r"   r"   r#   r:   J   r?   zBodyWriter.send_eom)
__name__
__module____qualname__r   Writerr<   bytesr8   r   r:   r"   r"   r"   r#   r4   >   s    r4   c                   @   sJ   e Zd ZdeddfddZdededdfdd	Zd
ededdfddZ	dS )ContentLengthWriterlengthr   Nc                 C   s
   || _ d S r6   )_length)r;   rG   r"   r"   r#   __init__U   s   
zContentLengthWriter.__init__r9   r   c                 C   s0   |  j t|8  _ | j dk rtd|| d S )Nr   z)Too much data for declared Content-Length)rH   lenr   r>   r"   r"   r#   r8   X   s   
zContentLengthWriter.send_datar   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)rH   r   r@   r"   r"   r#   r:   ^   s
   
zContentLengthWriter.send_eom)
rA   rB   rC   intrI   rE   rD   r8   r   r:   r"   r"   r"   r#   rF   T   s    rF   c                   @   8   e Zd ZdededdfddZdededdfdd	ZdS )
ChunkedWriterr9   r   r   Nc                 C   s,   |sd S |dt |  || |d d S )Ns   %x
r   )rJ   r>   r"   r"   r#   r8   f   s
   zChunkedWriter.send_datar   c                 C   s   |d t || d S )Ns   0
)r$   r@   r"   r"   r#   r:   o   s   zChunkedWriter.send_eomrA   rB   rC   rE   rD   r8   r   r:   r"   r"   r"   r#   rM   e   s    	rM   c                   @   rL   )
Http10Writerr9   r   r   Nc                 C   s   || d S r6   r"   r>   r"   r"   r#   r8   u   s   zHttp10Writer.send_datar   c                 C   s   |rt dd S )Nz&can't send trailers to HTTP/1.0 client)r   r@   r"   r"   r#   r:   x   s   zHttp10Writer.send_eomrN   r"   r"   r"   r#   rO   t   s    rO   )chunkedzcontent-lengthzhttp/1.0)(typingr   r   r   r   r   r   r   _eventsr
   r   r   r   r   r   _headersr   _stater   r   r   r   r   _utilr   r   __all__rE   rD   r$   r+   r3   r4   rF   rM   rO   r.   WritersTyper   __annotations__r"   r"   r"   r#   <module>   sN   &	 


