B
    Ce'                 @   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 yd dlmZ W n  ek
r   d dlmZ Y nX 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)Literals   [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   `/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/h11/_headers.py__init__f   s    zHeaders.__init__)r   c             C   s
   t | jS )N)boolr   )r   r   r   r   __bool__i   s    zHeaders.__bool__)otherr   c             C   s   t | t |kS )N)list)r   r   r   r   r   __eq__l   s    zHeaders.__eq__c             C   s
   t | jS )N)lenr   )r   r   r   r   __len__o   s    zHeaders.__len__c             C   s   dt t|  S )Nz<Headers(%s)>)reprr   )r   r   r   r   __repr__r   s    zHeaders.__repr__)idxr   c             C   s   | j | \}}}||fS )N)r   )r   r$   _namevaluer   r   r   __getitem__u   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>z   s    z%Headers.raw_items.<locals>.<listcomp>)r   )r   r   r   r   	raw_itemsy   s    zHeaders.raw_items)__name__
__module____qualname____doc__	__slots__r   r   bytesr   r   r   objectr   intr!   strr#   r(   r,   r   r   r   r   r   K   s   r   T)headers_parsedr   c             C   s   d S )Nr   )r6   r7   r   r   r   normalize_and_validate   s    r8   Fc             C   s   d S )Nr   )r6   r7   r   r   r   r8      s    c             C   s   d S )Nr   )r6   r7   r   r   r   r8      s    c       	      C   sV  g }d }d}x>| D ]4\}}|sNt |}t |}tt|d| tt|d| t|ts\tt|tsjt|}| }|dkrdd |dD }t	|dkrt
d	| }tt|d
 |d kr|}||||f n||krt
d	q|dkr:|rt
ddd| }|dkr$t
dddd}||||f q||||f qW 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
isinstancer2   AssertionErrorlowersplitr    r   pop_content_length_reappendr   )	r6   r7   new_headersZseen_content_lengthZsaw_transfer_encodingr&   r'   r*   lengthsr   r   r   r8      sJ    



)r6   r&   r   c             C   sX   g }xN| j D ]D\}}}||kr| }x(|dD ]}| }|r2|| q2W qW |S )Nr<   )r   rA   rB   r9   rE   )r6   r&   outr%   
found_namefound_raw_valueZfound_split_valuer   r   r   get_comma_header   s    $rK   )r6   r&   
new_valuesr   c             C   sX   g }x*| j D ] \}}}||kr|||f qW x|D ]}|| |f q6W t|S )N)r   rE   titler8   )r6   r&   rL   rF   Zfound_raw_namerI   rJ   	new_valuer   r   r   set_comma_header   s    

rO   r   )requestr   c             C   s"   | j dk rdS t| jd}d|kS )Ns   1.1Fs   expects   100-continue)http_versionrK   r6   )rP   expectr   r   r   has_expect_100_continue  s    
rS   )F)F)$retypingr   r   r   r   r   r   r   r	   Z_abnfr   r   Z_utilr   r   r   Z_eventsr   r   ImportErrortyping_extensionscompilerD   encoder=   r>   r2   r   r5   ZHeaderTypesr8   r   rK   rO   rS   r   r   r   r   <module>   s<   (9
25/