
    g'                        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rddlmZ 	 d dlmZ  e j,                  d      Z e j,                   ej0                  d	            Z e j,                   ej0                  d	            Z G 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       Zededed   defd       Ze	 dde	eef   de defd       Z	 dde	eef   de defdZdededee   fdZ!dededee   defdZ"ddde fdZ#y# e$ r
 d dlmZ Y w xY w)    N)AnyStrcastListoverloadSequenceTupleTYPE_CHECKINGUnion   )
field_namefield_value)bytesifyLocalProtocolErrorvalidate)Request)Literals   [0-9]+asciic                       e Zd ZdZdZdeeeeef      ddfdZde	fdZ
dede	fd	Zdefd
ZdefdZdedeeef   fdZdeeeef      fdZy)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                     || _         y Nr   )selfr   s     ?/var/www/html/venv/lib/python3.12/site-packages/h11/_headers.py__init__zHeaders.__init__f   s
    %    c                 ,    t        | j                        S r   )boolr   r   s    r   __bool__zHeaders.__bool__i   s    D$$%%r   otherc                 0    t        |       t        |      k(  S r   )list)r   r$   s     r   __eq__zHeaders.__eq__l   s    DzT%[((r   c                 ,    t        | j                        S r   )lenr   r"   s    r   __len__zHeaders.__len__o   s    4##$$r   c                 0    dt        t        |             z  S )Nz<Headers(%s)>)reprr&   r"   s    r   __repr__zHeaders.__repr__r   s    d4j!111r   idxc                 0    | j                   |   \  }}}||fS r   r   )r   r.   _namevalues        r   __getitem__zHeaders.__getitem__u   s"    ))#.4e}r   c                 X    | j                   D cg c]
  \  }}}||f c}}}S c c}}}w r   r   )r   raw_namer0   r2   s       r   	raw_itemszHeaders.raw_itemsy   s+    <@<L<LMM&8h55!MMMs   %)__name__
__module____qualname____doc__	__slots__r   r   bytesr   r!   r#   objectr'   intr*   strr-   r3   r6    r   r   r   r   K   s    0 I&4eUE.A(B#C & &&$ &)F )t )% %2# 2s uUE\': N4eUl 34 Nr   r   headers_parsedTr   c                      y r   r@   rA   rB   s     r   normalize_and_validaterE          r   Fc                      y r   r@   rD   s     r   rE   rE      rF   r   c                      y r   r@   rD   s     r   rE   rE      s     r   c                    g }d }d}| D ]p  \  }}|s:t        |      }t        |      }t        t        |d|       t        t        |d|       t	        |t
              sJ t	        |t
              sJ |}|j                         }|dk(  r|j                  d      D ch c]  }|j                          }	}t        |	      dk7  rt        d      |	j                         }t        t        |d       ||}|j                  |||f       ||k7  st        d      |d	k(  rI|rt        d
d      |j                         }|dk7  rt        dd      d}|j                  |||f       ]|j                  |||f       s t        |      S c c}w )NFzIllegal header name {!r}zIllegal header value {!r}s   content-length   ,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
isinstancer<   lowersplitstripr)   r   pop_content_length_reappendr   )
rA   rB   new_headersseen_content_lengthsaw_transfer_encodingr1   r2   r5   lengthlengthss
             r   rE   rE      s    K! -8e D>DUOE^T+EtL_e-H%P$&&&%'''zz|$$49KK4EF&v||~FGF7|q ()MNNKKME'0DE"*&+#""HdE#:;$-()MNN))
 %(8C 
 KKME
"(B&)  %)!$67$67[-8\ ;? Gs   Fr1   c                     g }| j                   D ]V  \  }}}||k(  s|j                         }|j                  d      D ]&  }|j                         }|s|j	                  |       ( X |S )NrJ   )r   rO   rP   rQ   rT   )rA   r1   outr0   
found_namefound_raw_valuefound_split_values          r   get_comma_headerr_      s}    H C*1*=*= 2&:-335O%4%:%:4%@ 2!$5$;$;$=!$JJ0122 Jr   
new_valuesc                     g }| j                   D ]  \  }}}||k7  s|j                  ||f       ! |D ]#  }|j                  |j                         |f       % t        |      S r   )r   rT   titlerE   )rA   r1   r`   rU   found_raw_namer\   r]   	new_values           r   set_comma_headerre      sw     .0K7>7J7J B3
O@AB   6	DJJL)456!+..r   requestr   c                 V    | j                   dk  ryt        | j                  d      }d|v S )Ns   1.1Fs   expects   100-continue)http_versionr_   rA   )rf   expects     r   has_expect_100_continuerj     s0     f$gooy9Ff$$r   )F)$retypingr   r   r   r   r   r   r	   r
   _abnfr   r   _utilr   r   r   _eventsr   r   ImportErrortyping_extensionscompilerS   encoderL   rM   r<   r   r?   HeaderTypesrE   r!   r_   re   rj   r@   r   r   <module>ru      s   	 V V V * 9 9 *v  RZZ
+ -J--g67"**/[//89/NhuUE\*+ /Nd ue|	ucz	sEz	sCx 
G gdm   
 
K '%. W  
 
:?7K'(37 
 ;@4 7K'(4 374 4 n,g ,U ,tE{ ,^/g /U /U /PW /&%Y %4 %G  *))*s   D< <E
E