o
    h'                     @   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r2ddlmZ zd dlmZ W n eyI   d dlmZ Y nw 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deded defddZededed defddZe	d de	eef de defddZ	d de	eef de defddZdededee fddZ!dededee defddZ"ddde f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deeeeef  ddfddZde	fdd	Z
d
ede	fddZdefddZdefddZdedeeef fddZdeeeef  f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_items
full_itemsreturnNc                 C   s
   || _ d S Nr   )selfr    r   `/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/h11/_headers.py__init__f      
zHeaders.__init__c                 C   
   t | jS r   )boolr   r   r   r   r   __bool__i   r   zHeaders.__bool__otherc                 C   s   t | t |kS r   )list)r   r"   r   r   r   __eq__l      zHeaders.__eq__c                 C   r   r   )lenr   r    r   r   r   __len__o   r   zHeaders.__len__c                 C   s   dt t|  S )Nz<Headers(%s)>)reprr#   r    r   r   r   __repr__r   r%   zHeaders.__repr__idxc                 C   s   | j | \}}}||fS r   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   r%   zHeaders.raw_items)__name__
__module____qualname____doc__	__slots__r   r   bytesr   r   r!   objectr$   intr'   strr)   r.   r2   r   r   r   r   r   K   s     r   headers_parsedTr   c                 C      d S r   r   r<   r=   r   r   r   normalize_and_validate      r@   Fc                 C   r>   r   r   r?   r   r   r   r@      rA   c                 C   r>   r   r   r?   r   r   r   r@      s   c           	      C   sH  g }d }d}| D ]\}}|s$t |}t |}tt|d| tt|d| t|ts+J t|ts2J |}| }|dkrrdd |dD }t|dkrPt	d	|
 }tt|d
 |d u ri|}||||f q||krqt	d	q|dkr|r~t	ddd| }|dkrt	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  )error_status_hints   chunkedz,Only Transfer-Encoding: chunked is supportedT)r   r   _field_name_re_field_value_re
isinstancer8   lowersplitr&   r   pop_content_length_reappendr   )	r<   r=   new_headersseen_content_lengthsaw_transfer_encodingr,   r-   r0   lengthsr   r   r   r@      sP   r,   c                 C   sP   g }| j D ] \}}}||kr%| }|dD ]}| }|r$|| qq|S )NrE   )r   rJ   rK   rB   rN   )r<   r,   outr+   
found_namefound_raw_valuefound_split_valuer   r   r   get_comma_header   s   $
rW   
new_valuesc                 C   sP   g }| j D ]\}}}||kr|||f q|D ]}|| |f qt|S r   )r   rN   titler@   )r<   r,   rX   rO   found_raw_namerT   rU   	new_valuer   r   r   set_comma_header   s   
r\   requestr   c                 C   s"   | j dk rdS t| jd}d|v S )Ns   1.1Fs   expects   100-continue)http_versionrW   r<   )r]   expectr   r   r   has_expect_100_continue  s   
r`   )F)$retypingr   r   r   r   r   r   r   r	   _abnfr   r   _utilr   r   r   _eventsr   r   ImportErrortyping_extensionscompilerM   encoderG   rH   r8   r   r;   HeaderTypesr@   r   rW   r\   r`   r   r   r   r   <module>   s\    (
:2


7/