Ë
    RPfÎ  ã                  óÀ   — d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZ g d¢Z G d„ de«      Z G d„ de	eef   «      Z G d„ d	e
«      Zeeeeef   eeeef      ef   Zy
)é    )Úannotations)
ÚAnyÚDictÚIterableÚIteratorÚListÚMappingÚMutableMappingÚProtocolÚTupleÚUnion)ÚHeadersÚHeadersLikeÚMultipleValuesErrorc                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )r   zT
    Exception raised when :class:`Headers` has more than one value for a key.

    c                ó€   •— t        | j                  «      dk(  rt        | j                  d   «      S t        ‰| �  «       S ©Né   r   )ÚlenÚargsÚreprÚsuperÚ__str__)ÚselfÚ	__class__s    €úS/var/www/fastapitest/venv/lib/python3.12/site-packages/websockets/datastructures.pyr   zMultipleValuesError.__str__   s3   ø€ äˆt�y‰y‹>˜QÒÜ˜Ÿ	™	 !™Ó%Ð%Ü‰w‰Ó Ð ó    ©ÚreturnÚstr)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__©r   s   @r   r   r      s   ø„ ñ÷
!ñ !r   r   c                  ó¤   ‡ — e Zd ZdZddgZdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
dd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdˆ fd„Zd d„Zd!d„Zˆ xZS )"r   aÈ  
    Efficient data structure for manipulating HTTP headers.

    A :class:`list` of ``(name, values)`` is inefficient for lookups.

    A :class:`dict` doesn't suffice because header names are case-insensitive
    and multiple occurrences of headers with the same name are possible.

    :class:`Headers` stores HTTP headers in a hybrid data structure to provide
    efficient insertions and lookups while preserving the original data.

    In order to account for multiple values with minimal hassle,
    :class:`Headers` follows this logic:

    - When getting a header with ``headers[name]``:
        - if there's no value, :exc:`KeyError` is raised;
        - if there's exactly one value, it's returned;
        - if there's more than one value, :exc:`MultipleValuesError` is raised.

    - When setting a header with ``headers[name] = value``, the value is
      appended to the list of values for that header.

    - When deleting a header with ``del headers[name]``, all values for that
      header are removed (this is slow).

    Other methods for manipulating headers are consistent with this logic.

    As long as no header occurs multiple times, :class:`Headers` behaves like
    :class:`dict`, except keys are lower-cased to provide case-insensitivity.

    Two methods support manipulating multiple values explicitly:

    - :meth:`get_all` returns a list of all values for a header;
    - :meth:`raw_items` returns an iterator of ``(name, values)`` pairs.

    Ú_dictÚ_listc                óD   — i | _         g | _         | j                  |i |¤Ž y ©N)r(   r)   Úupdate)r   r   Úkwargss      r   Ú__init__zHeaders.__init__J   s#   € Ø+-ˆŒ
Ø,.ˆŒ
Øˆ�‰�TÐ$˜VÓ$r   c                óL   — dj                  d„ | j                  D «       «      dz   S )NÚ c              3  ó2   K  — | ]  \  }}|› d |› d�–— Œ y­w)z: ú
N© )Ú.0ÚkeyÚvalues      r   ú	<genexpr>z"Headers.__str__.<locals>.<genexpr>P   s!   è ø€ ÒJ±°°e˜#˜˜b   tÔ,ÑJùs   ‚r2   )Újoinr)   ©r   s    r   r   zHeaders.__str__O   s    € Ø�w‰wÑJ¸t¿z¹zÔJÓJÈVÑSÐSr   c                óN   — | j                   j                  › d| j                  ›d�S )Nú(ú))r   r!   r)   r9   s    r   Ú__repr__zHeaders.__repr__R   s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯J©J¨>¸Ð;Ð;r   c                ó¢   — | j                  «       }| j                  j                  «       |_        | j                  j                  «       |_        |S r+   )r   r(   Úcopyr)   )r   r?   s     r   r?   zHeaders.copyU   s7   € Ø�~‰~ÓˆØ—Z‘Z—_‘_Ó&ˆŒ
Ø—Z‘Z—_‘_Ó&ˆŒ
Øˆr   c                ó4   — t        | «      j                  «       S r+   )r    Úencoder9   s    r   Ú	serializezHeaders.serialize[   s   € ä�4‹y×ÑÓ!Ð!r   c                ó^   — t        |t        «      xr |j                  «       | j                  v S r+   )Ú
isinstancer    Úlowerr(   ©r   r5   s     r   Ú__contains__zHeaders.__contains__a   s#   € Ü˜#œsÓ#ÒA¨¯	©	«°t·z±zÐ(AÐAr   c                ó,   — t        | j                  «      S r+   )Úiterr(   r9   s    r   Ú__iter__zHeaders.__iter__d   s   € Ü�D—J‘JÓÐr   c                ó,   — t        | j                  «      S r+   )r   r(   r9   s    r   Ú__len__zHeaders.__len__g   s   € Ü�4—:‘:‹Ðr   c                óx   — | j                   |j                  «          }t        |«      dk(  r|d   S t        |«      ‚r   )r(   rE   r   r   ©r   r5   r6   s      r   Ú__getitem__zHeaders.__getitem__l   s5   € Ø—
‘
˜3Ÿ9™9›;Ñ'ˆÜˆu‹:˜Š?Ø˜‘8ˆOä% cÓ*Ð*r   c                ó°   — | j                   j                  |j                  «       g «      j                  |«       | j                  j                  ||f«       y r+   )r(   Ú
setdefaultrE   Úappendr)   rN   s      r   Ú__setitem__zHeaders.__setitem__s   s=   € Ø�
‰
×Ñ˜cŸi™i›k¨2Ó.×5Ñ5°eÔ<Ø�
‰
×Ñ˜3 ˜,Õ'r   c                óÚ   — |j                  «       }| j                  j                  |«       | j                  D ��cg c]  \  }}|j                  «       |k7  sŒ||f‘Œ c}}| _        y c c}}w r+   )rE   r(   Ú__delitem__r)   )r   r5   Ú	key_lowerÚkÚvs        r   rU   zHeaders.__delitem__w   sM   € Ø—I‘I“Kˆ	Ø�
‰
×Ñ˜yÔ)à)-¯©×N¡  A°q·w±w³yÀIÓ7M�q˜!’fÓNˆ�
ùÓNs   »A'ÁA'c                ó`   — t        |t        «      st        S | j                  |j                  k(  S r+   )rD   r   ÚNotImplementedr(   )r   Úothers     r   Ú__eq__zHeaders.__eq__}   s%   € Ü˜%¤Ô)Ü!Ð!Ø�z‰z˜UŸ[™[Ñ(Ð(r   c                ó    — i | _         g | _        y)z&
        Remove all headers.

        N)r(   r)   r9   s    r   ÚclearzHeaders.clear‚   s   € ð
 ˆŒ
Øˆ�
r   c                óH   •— t        d„ |D «       «      }t        ‰| �  |i |¤Ž y)zT
        Update from a :class:`Headers` instance and/or keyword arguments.

        c              3  ó`   K  — | ]&  }t        |t        «      r|j                  «       n|–— Œ( y ­wr+   )rD   r   Ú	raw_items)r4   Úargs     r   r7   z!Headers.update.<locals>.<genexpr>�   s)   è ø€ ò 
ØEHœz¨#¬wÔ7ˆC�M‰MŒO¸SÓ@ñ
ùs   ‚,.N)Útupler   r,   )r   r   r-   r   s      €r   r,   zHeaders.updateŠ   s/   ø€ ô
 ñ 
ØLPô
ó 
ˆô 	‰‰˜Ð' Ó'r   c                óV   — | j                   j                  |j                  «       g «      S )z|
        Return the (possibly empty) list of all values for a header.

        Args:
            key: header name.

        )r(   ÚgetrE   rF   s     r   Úget_allzHeaders.get_all–   s   € ð �z‰z�~‰~˜cŸi™i›k¨2Ó.Ð.r   c                ó,   — t        | j                  «      S )zO
        Return an iterator of all values as ``(name, value)`` pairs.

        )rI   r)   r9   s    r   ra   zHeaders.raw_items    s   € ô
 �D—J‘JÓÐr   )r   r   r-   r    r   ÚNoner   )r   r   )r   Úbytes)r5   Úobjectr   Úbool)r   zIterator[str])r   Úint©r5   r    r   r    )r5   r    r6   r    r   rh   )r5   r    r   rh   )r[   r   r   rk   )r   rh   )r5   r    r   z	List[str])r   zIterator[Tuple[str, str]])r!   r"   r#   r$   Ú	__slots__r.   r   r=   r?   rB   rG   rJ   rL   rO   rS   rU   r\   r^   r,   rf   ra   r%   r&   s   @r   r   r   !   sh   ø„ ñ#ðJ ˜'Ð"€Ió%ó
Tó<óó"óBó óó
+ó(óOó)ó
õ(ó/÷ r   r   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚSupportsKeysAndGetItemz_
    Dict-like types with ``keys() -> str`` and ``__getitem__(key: str) -> str`` methods.

    c                 ó   — y r+   r3   r9   s    r   ÚkeyszSupportsKeysAndGetItem.keys¯   ó   € Ør   c                 ó   — y r+   r3   rF   s     r   rO   z"SupportsKeysAndGetItem.__getitem__²   rs   r   N)r   zIterable[str]rm   )r!   r"   r#   r$   rr   rO   r3   r   r   rp   rp   ©   s   „ ñó
ôr   rp   N)Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   r   Ú__all__ÚLookupErrorr   r    r   rp   r   r3   r   r   ú<module>ry      s†   ðÝ "÷÷ ÷ ò <€ô
!˜+ô 
!ôD ˆn˜S #˜XÑ&ô D ôP
˜Xô 
ð ØØˆC�ˆHÑØˆU�3˜�8‰_ÑØðñ€ðr   