o
    �õ±j¬(  ã                   @   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   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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¡|rˆt	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)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/