Ë
    ÙqjŽ  ã                  ó¼   — d dl mZ d dlmZmZmZmZ d dl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f   z  eeeef      z  ez  Zy)é    )Úannotations)ÚIterableÚIteratorÚMappingÚMutableMapping)ÚAnyÚProtocol)ÚHeadersÚHeadersLikeÚMultipleValuesErrorc                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )r   zP
    Exception raised when :class:`Headers` has multiple values 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    €úZ/var/www/html/kelly-backend/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__D   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>J   s"   è ø€ ÐJ¹z±°°e˜#˜˜b   tÔ,¹zùs   ‚r.   )Újoinr%   ©r   s    r   r   zHeaders.__str__I   s    € Ø�w‰wÑJ¸t¿zºzÓJÓJÈVÑSÐSr   c                óN   — | j                   j                  › d| j                  ›d�S )NÚ(Ú))r   r   r%   r5   s    r   Ú__repr__zHeaders.__repr__L   s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯J©J¨>¸Ð;Ð;r   c                ó¢   — | j                  «       }| j                  j                  «       |_        | j                  j                  «       |_        |S r'   )r   r$   Úcopyr%   )r   r;   s     r   r;   zHeaders.copyO   s7   € Ø�~‰~ÓˆØ—Z‘Z—_‘_Ó&ˆŒ
Ø—Z‘Z—_‘_Ó&ˆŒ
Øˆr   c                ó4   — t        | «      j                  «       S r'   )r   Úencoder5   s    r   Ú	serializezHeaders.serializeU   s   € ä�4‹y×ÑÓ!Ð!r   c                ó^   — t        |t        «      xr |j                  «       | j                  v S r'   )Ú
isinstancer   Úlowerr$   ©r   r1   s     r   Ú__contains__zHeaders.__contains__[   s#   € Ü˜#œsÓ#ÒA¨¯	©	«°t·z±zÐ(AÐAr   c                ó,   — t        | j                  «      S r'   )Úiterr$   r5   s    r   Ú__iter__zHeaders.__iter__^   s   € Ü�D—J‘JÓÐr   c                ó,   — t        | j                  «      S r'   )r   r$   r5   s    r   Ú__len__zHeaders.__len__a   s   € Ü�4—:‘:‹Ðr   c                óx   — | j                   |j                  «          }t        |«      dk(  r|d   S t        |«      ‚r   )r$   rA   r   r   ©r   r1   r2   s      r   Ú__getitem__zHeaders.__getitem__f   s5   € Ø—
‘
˜3Ÿ9™9›;Ñ'ˆÜˆu‹:˜Š?Ø˜‘8ˆOä% cÓ*Ð*r   c                ó°   — | j                   j                  |j                  «       g «      j                  |«       | j                  j                  ||f«       y r'   )r$   Ú
setdefaultrA   Úappendr%   rJ   s      r   Ú__setitem__zHeaders.__setitem__m   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'   )rA   r$   Ú__delitem__r%   )r   r1   Ú	key_lowerÚkÚvs        r   rQ   zHeaders.__delitem__q   sQ   € Ø—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'   )r@   r
   ÚNotImplementedr$   )r   Úothers     r   Ú__eq__zHeaders.__eq__w   s%   € Ü˜%¤Ô)Ü!Ð!Ø�z‰z˜UŸ[™[Ñ(Ð(r   c                ó    — i | _         g | _        y)z&
        Remove all headers.

        N)r$   r%   r5   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'   )r@   r
   Ú	raw_items)r0   Úargs     r   r3   z!Headers.update.<locals>.<genexpr>‰   s(   è ø€ ð 
ÙLPÀSœz¨#¬wÔ7ˆC�M‰MŒO¸SÓ@ÉDù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$   ÚgetrA   rB   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.

        )rE   r%   r5   s    r   r]   zHeaders.raw_itemsš   s   € ô
 �D—J‘JÓÐr   )r   r   r)   r   r   ÚNoner   )r   r
   )r   Úbytes)r1   Úobjectr   Úbool)r   zIterator[str])r   Úint©r1   r   r   r   )r1   r   r2   r   r   rd   )r1   r   r   rd   )rW   r   r   rg   )r   rd   )r1   r   r   z	list[str])r   zIterator[tuple[str, str]])r   r   r   r    Ú	__slots__r*   r   r9   r;   r>   rC   rF   rH   rK   rO   rQ   rX   rZ   r(   rb   r]   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'   r/   r5   s    r   ÚkeyszSupportsKeysAndGetItem.keys©   s   €  Sr   c                 ó   — y r'   r/   rB   s     r   rK   z"SupportsKeysAndGetItem.__getitem__«   s   € ¨Cr   N)r   zIterable[str]ri   )r   r   r   r    rn   rK   r/   r   r   rl   rl   £   s   „ ñó
 )ä/r   rl   N)Ú
__future__r   Úcollections.abcr   r   r   r   Útypingr   r	   Ú__all__ÚLookupErrorr   r   r
   rl   r_   r   r/   r   r   Ú<module>ru      s}   ðÝ "ç GÓ Gß  ò€ô
!˜+ô 
!ôD ˆn˜S #˜XÑ&ô D ôP0˜Xô 0ð ˆg�c˜3�hÑÑ (¨5°°c°©?Ñ";Ñ;Ð>TÑTð ðr   