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   úBC:\Users\shubh\Videos\agent\nova\Lib\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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>«   s    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Ú
isinstancer8   ÚlowerÚsplitr&   r   ÚpopÚ_content_length_reÚappendr   )	r<   r=   Únew_headersZseen_content_lengthZ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   rI   rJ   rB   rM   )r<   r,   Úoutr+   Ú
found_nameÚfound_raw_valueZfound_split_valuer   r   r   Úget_comma_headerÍ   s   $
€rS   Ú
new_valuesc                 C   sP   g }| j D ]\}}}||kr| ||f¡ q|D ]}| | ¡ |f¡ qt|ƒS r   )r   rM   Útitler@   )r<   r,   rT   rN   Zfound_raw_namerQ   rR   Ú	new_valuer   r   r   Úset_comma_headerü   s   
€rW   Úrequestr   c                 C   s"   | j dk rdS t| jdƒ}d|v S )Ns   1.1Fs   expects   100-continue)Úhttp_versionrS   r<   )rX   Úexpectr   r   r   Úhas_expect_100_continue  s   
r[   )F)$ÚreÚtypingr   r   r   r   r   r   r   r	   Z_abnfr   r   Z_utilr   r   r   Z_eventsr   r   ÚImportErrorZtyping_extensionsÚcompilerL   ÚencoderF   rG   r8   r   r;   ZHeaderTypesr@   r   rS   rW   r[   r   r   r   r   Ú<module>   s\    (ÿ
:2ýÿÿ
ÿÿþÿ
ÿÿ
þ7/