a
    
d#                     @   s   d dl Z ddlmZmZ ddlmZmZmZ e dZ	e e
dZe e
dZG dd dZdd
dZdd Zdd Zdd ZdS )    N   )
field_namefield_value)bytesifyLocalProtocolErrorvalidates   [0-9]+asciic                   @   sT   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Z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_itemsc                 C   s
   || _ d S Nr
   )selfZ
full_items r   U/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/h11/_headers.py__init__\   s    zHeaders.__init__c                 c   s    | j D ]\}}}||fV  qd S r   r   )r   _namevaluer   r   r   __iter___   s    zHeaders.__iter__c                 C   s
   t | jS r   )boolr
   r   r   r   r   __bool__c   s    zHeaders.__bool__c                 C   s   t | t |kS r   )list)r   otherr   r   r   __eq__f   s    zHeaders.__eq__c                 C   s
   t | jS r   )lenr
   r   r   r   r   __len__i   s    zHeaders.__len__c                 C   s   dt t|  S )Nz<Headers(%s)>)reprr   r   r   r   r   __repr__l   s    zHeaders.__repr__c                 C   s   | j | \}}}||fS r   r   )r   idxr   r   r   r   r   r   __getitem__o   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>t       z%Headers.raw_items.<locals>.<listcomp>r   r   r   r   r   	raw_itemss   s    zHeaders.raw_itemsN)__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r    r%   r   r   r   r   r	   A   s   r	   Fc           	      C   s2  g }d }d}| D ]\}}|sJt |}t |}tt|d| tt|d| |}| }|dkrdd |dD }t|dkrtd	| }tt	|d
 |d u r|}|
|||f n||krtd	q|dkr|rtddd| }|dkrt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>   r$   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lowersplitr   r   pop_content_length_reappendr	   )	headersZ_parsednew_headersZseen_content_lengthZsaw_transfer_encodingr   r   r"   lengthsr   r   r   normalize_and_validatew   sJ    


r9   c                 C   sP   g }| j D ]@\}}}||kr
| }|dD ]}| }|r.|| q.q
|S )Nr.   )r
   r1   r2   r+   r5   )r6   r   outr   
found_namefound_raw_valueZfound_split_valuer   r   r   get_comma_header   s    $r=   c                 C   sP   g }| j D ] \}}}||kr
|||f q
|D ]}|| |f q0t|S r   )r
   r5   titler9   )r6   r   
new_valuesr7   Zfound_raw_namer;   r<   	new_valuer   r   r   set_comma_header   s    
rA   c                 C   s"   | j dk rdS t| jd}d|v S )Ns   1.1Fs   expects   100-continue)http_versionr=   r6   )requestexpectr   r   r   has_expect_100_continue   s    
rE   )F)reZ_abnfr   r   Z_utilr   r   r   compiler4   encoder/   r0   r	   r9   r=   rA   rE   r   r   r   r   <module>   s   8
6
2/