o
    MK&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 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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)Literal   s   [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/venv/lib/python3.10/site-packages/h11/_headers.py__init__h      
zHeaders.__init__c                 C   
   t | jS r   )boolr   r   r   r   r   __bool__k   r   zHeaders.__bool__otherc                 C   s   t | t |kS r   )list)r   r#   r   r   r   __eq__n      zHeaders.__eq__c                 C   r   r   )lenr   r!   r   r   r   __len__q   r   zHeaders.__len__c                 C   s   dt t|  S )Nz<Headers(%s)>)reprr$   r!   r   r   r   __repr__t   r&   zHeaders.__repr__idxc                 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{   r&   zHeaders.raw_items)__name__
__module____qualname____doc__	__slots__r   r   bytesr   r    r"   objectr%   intr(   strr*   r/   r3   r   r   r   r   r   M   s     r   headers_parsedTr   c                 C      d S r   r   r=   r>   r   r   r   normalize_and_validate      rA   Fc                 C   r?   r   r   r@   r   r   r   rA      rB   c                 C   r?   r   r   r@   r   r   r   rA      s   c           	      C   s\  g }d }d}| D ]\}}|s$t |}t |}tt|d| tt|d| t|ts+J t|ts2J |}| }|dkr|dd |dD }t|dkrPt	d	|
 }tt|d
 t|tkrdt	d
|d u rs|}||||f q||kr{t	d	q|dkr|rt	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)r0   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
isinstancer9   lowersplitr'   r   pop_content_length_reCONTENT_LENGTH_MAX_DIGITSappendr   )	r=   r>   new_headersseen_content_lengthsaw_transfer_encodingr-   r.   r1   lengthsr   r   r   rA      sT   r-   c                 C   sP   g }| j D ] \}}}||kr%| }|dD ]}| }|r$|| qq|S )NrF   )r   rK   rL   rC   rP   )r=   r-   outr,   
found_namefound_raw_valuefound_split_valuer   r   r   get_comma_header   s   $
rY   
new_valuesc                 C   sP   g }| j D ]\}}}||kr|||f q|D ]}|| |f qt|S r   )r   rP   titlerA   )r=   r-   rZ   rQ   found_raw_namerV   rW   	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_versionrY   r=   )r_   expectr   r   r   has_expect_100_continue  s   
rb   )F)%retypingr   r   r   r   r   r   r   r	   _abnfr   r   _utilr   r   r   _eventsr   r   ImportErrortyping_extensionsrO   compilerN   encoderH   rI   r9   r   r<   HeaderTypesrA   r    rY   r^   rb   r   r   r   r   <module>   s^    (
92


9/