U
    EZh(                     @   s  d dl Z d dlmZmZmZmZmZmZmZm	Z	 ddl
mZmZ ddlmZmZmZ erdddlmZ zd dlmZ W n  ek
r   d dlmZ Y nX dZe d	Ze ed
Ze ed
ZG dd deeeef  Ze	eeeef  eeeef  eeeef  eeeef  f Zeeed edddZ eeed edddZ ede	eef e!edddZ d e	eef e!edddZ eeee dddZ"eeee edddZ#de!dddZ$dS )!    N)AnyStrcastListoverloadSequenceTupleTYPE_CHECKINGUnion   )
field_namefield_value)bytesifyLocalProtocolErrorvalidate)Request)Literal   s   [0-9]+asciic                   @   s   e Zd ZdZdZeeeeef  ddddZe	ddd	Z
ee	d
ddZedddZedddZeeeef dddZeeeef  dddZdS )Headersa  
    A list-like interface that allows iterating over headers as byte-pairs
    of (lowercased-name, value).

    Internally we actually store the representation as three-tuples,
    including both the raw original casing, in order to preserve casing
    over-the-wire, and the lowercased name, for case-insensitive comparisions.

    r = Request(
        method="GET",
        target="/",
        headers=[("Host", "example.org"), ("Connection", "keep-alive")],
        http_version="1.1",
    )
    assert r.headers == [
        (b"host", b"example.org"),
        (b"connection", b"keep-alive")
    ]
    assert r.headers.raw_items() == [
        (b"Host", b"example.org"),
        (b"Connection", b"keep-alive")
    ]
    _full_itemsN)
full_itemsreturnc                 C   s
   || _ d S Nr   )selfr    r   S/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/h11/_headers.py__init__h   s    zHeaders.__init__)r   c                 C   s
   t | jS r   )boolr   r   r   r   r   __bool__k   s    zHeaders.__bool__)otherr   c                 C   s   t | t |kS r   )list)r   r!   r   r   r   __eq__n   s    zHeaders.__eq__c                 C   s
   t | jS r   )lenr   r   r   r   r   __len__q   s    zHeaders.__len__c                 C   s   dt t|  S )Nz<Headers(%s)>)reprr"   r   r   r   r   __repr__t   s    zHeaders.__repr__)idxr   c                 C   s   | j | \}}}||fS r   r   )r   r(   _namevaluer   r   r   __getitem__w   s    zHeaders.__getitem__c                 C   s   dd | j D S )Nc                 S   s   g | ]\}}}||fqS r   r   ).0raw_namer)   r+   r   r   r   
<listcomp>|   s     z%Headers.raw_items.<locals>.<listcomp>r   r   r   r   r   	raw_items{   s    zHeaders.raw_items)__name__
__module____qualname____doc__	__slots__r   r   bytesr   r   r    objectr#   intr%   strr'   r,   r0   r   r   r   r   r   M   s   r   T)headers_parsedr   c                 C   s   d S r   r   r:   r;   r   r   r   normalize_and_validate   s    r=   Fc                 C   s   d S r   r   r<   r   r   r   r=      s    c                 C   s   d S r   r   r<   r   r   r   r=      s    c           	      C   sd  g }d }d}| D ]H\}}|sJt |}t |}tt|d| tt|d| t|tsXtt|tsft|}| }|dkrdd |dD }t	|dkrt
d	| }tt|d
 t	|tkrt
d
|d kr|}||||f n||krt
d	q|dkrJ|rt
ddd| }|dkr4t
dddd}||||f q||||f qt|S )NFzIllegal header name {!r}zIllegal header value {!r}s   content-lengthc                 S   s   h | ]}|  qS r   )strip)r-   lengthr   r   r   	<setcomp>   s     z)normalize_and_validate.<locals>.<setcomp>   ,r
   z"conflicting Content-Length headerszbad Content-Lengths   transfer-encodingz"multiple Transfer-Encoding headersi  )Zerror_status_hints   chunkedz,Only Transfer-Encoding: chunked is supportedT)r   r   _field_name_re_field_value_re
isinstancer6   AssertionErrorlowersplitr$   r   pop_content_length_reCONTENT_LENGTH_MAX_DIGITSappendr   )	r:   r;   new_headersZseen_content_lengthZsaw_transfer_encodingr*   r+   r.   lengthsr   r   r   r=      sT    

 
)r:   r*   r   c                 C   sP   g }| j D ]@\}}}||kr
| }|dD ]}| }|r.|| q.q
|S )NrA   )r   rF   rG   r>   rK   )r:   r*   outr)   
found_namefound_raw_valueZfound_split_valuer   r   r   get_comma_header   s    $rQ   )r:   r*   
new_valuesr   c                 C   sP   g }| j D ] \}}}||kr
|||f q
|D ]}|| |f q0t|S r   )r   rK   titler=   )r:   r*   rR   rL   Zfound_raw_namerO   rP   	new_valuer   r   r   set_comma_header   s    
rU   r   )requestr   c                 C   s"   | j dk rdS t| jd}d|kS )Ns   1.1Fs   expects   100-continue)http_versionrQ   r:   )rV   expectr   r   r   has_expect_100_continue  s    
rY   )F)F)%retypingr   r   r   r   r   r   r   r	   Z_abnfr   r   Z_utilr   r   r   Z_eventsr   r   ImportErrortyping_extensionsrJ   compilerI   encoderB   rC   r6   r   r9   ZHeaderTypesr=   r   rQ   rU   rY   r   r   r   r   <module>   sR   (9
2 
  
 9/