U
    Ê¼µb•  ã                   @   s|   d dl Z ddlmZmZmZ ddlmZmZ e  d¡Z	e  e 
d¡¡Ze  e 
d¡¡Zddd	„Zd
d„ Zdd„ Zdd„ ZdS )é    Né   )ÚLocalProtocolErrorÚbytesifyÚvalidate)Ú
field_nameÚfield_values   [0-9]+ÚasciiFc                 C   sÀ   g }d}d}| D ]ª\}}|sHt |ƒ}t |ƒ}tt|d|ƒ tt|d|ƒ | ¡ }|dkrt|rdtdƒ‚tt|dƒ d}|dkr¬|rŒtd	d
d�‚| ¡ }|dkr¨tdd
d�‚d}| ||f¡ q|S )NFzIllegal header name {!r}zIllegal header value {!r}s   content-lengthzmultiple Content-Length headerszbad Content-LengthTs   transfer-encodingz"multiple Transfer-Encoding headersiõ  )Zerror_status_hints   chunkedz,Only Transfer-Encoding: chunked is supported)r   r   Ú_field_name_reÚ_field_value_reÚlowerr   Ú_content_length_reÚappend)ÚheadersZ_parsedÚnew_headersZsaw_content_lengthZsaw_transfer_encodingÚnameÚvalue© r   ú0/tmp/pip-unpacked-wheel-rko__zic/h11/_headers.pyÚnormalize_and_validate?   s:    ÿþr   c                 C   sL   g }| D ]>\}}||kr|  ¡ }| d¡D ]}| ¡ }|r*| |¡ q*q|S )Nó   ,)r   ÚsplitÚstripr   )r   r   ÚoutÚ
found_nameÚfound_raw_valueZfound_split_valuer   r   r   Úget_comma_headere   s    $r   c                 C   sT   g }| D ]\}}||kr|  ||f¡ q|D ]}|  ||f¡ q,t|ƒ| d d …< d S )N)r   r   )r   r   Z
new_valuesr   r   r   Ú	new_valuer   r   r   Úset_comma_header“   s    r   c                 C   s"   | j dk rdS t| jdƒ}d|kS )Ns   1.1Fs   expects   100-continue)Úhttp_versionr   r   )ÚrequestÚexpectr   r   r   Úhas_expect_100_continue�   s    
r!   )F)ÚreZ_utilr   r   r   Z_abnfr   r   Úcompiler   Úencoder	   r
   r   r   r   r!   r   r   r   r   Ú<module>   s   8

&.
