Ë
    Ûvžj-  ã                  ó¸   — d dl mZ d dl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ÚIterableÚIteratorÚMappingÚMutableMappingÚProtocolÚTupleÚUnion)Ú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    €új/workspace/moltex-experiments/.pixi/envs/default/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__H   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>N   s"   è ø€ ÐJ¹z±°°e˜#˜˜b   tÔ,¹zùs   ‚r0   )Újoinr'   ©r   s    r   r   zHeaders.__str__M   s    € Ø�w‰wÑJ¸t¿zºzÓJÓJÈVÑSÐSr   c                óN   — | j                   j                  › d| j                  ›d�S )NÚ(Ú))r   r   r'   r7   s    r   Ú__repr__zHeaders.__repr__P   s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯J©J¨>¸Ð;Ð;r   c                ó¢   — | j                  «       }| j                  j                  «       |_        | j                  j                  «       |_        |S r)   )r   r&   Úcopyr'   )r   r=   s     r   r=   zHeaders.copyS   s7   € Ø�~‰~ÓˆØ—Z‘Z—_‘_Ó&ˆŒ
Ø—Z‘Z—_‘_Ó&ˆŒ
Øˆr   c                ó4   — t        | «      j                  «       S r)   )r   Úencoder7   s    r   Ú	serializezHeaders.serializeY   s   € ä�4‹y×ÑÓ!Ð!r   c                ó^   — t        |t        «      xr |j                  «       | j                  v S r)   )Ú
isinstancer   Úlowerr&   ©r   r3   s     r   Ú__contains__zHeaders.__contains___   s#   € Ü˜#œsÓ#ÒA¨¯	©	«°t·z±zÐ(AÐAr   c                ó,   — t        | j                  «      S r)   )Úiterr&   r7   s    r   Ú__iter__zHeaders.__iter__b   s   € Ü�D—J‘JÓÐr   c                ó,   — t        | j                  «      S r)   )r   r&   r7   s    r   Ú__len__zHeaders.__len__e   s   € Ü�4—:‘:‹Ðr   c                óx   — | j                   |j                  «          }t        |«      dk(  r|d   S t        |«      ‚r   )r&   rC   r   r   ©r   r3   r4   s      r   Ú__getitem__zHeaders.__getitem__j   s5   € Ø—
‘
˜3Ÿ9™9›;Ñ'ˆÜˆu‹:˜Š?Ø˜‘8ˆOä% cÓ*Ð*r   c                ó°   — | j                   j                  |j                  «       g «      j                  |«       | j                  j                  ||f«       y r)   )r&   Ú
setdefaultrC   Úappendr'   rL   s      r   Ú__setitem__zHeaders.__setitem__q   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)   )rC   r&   Ú__delitem__r'   )r   r3   Ú	key_lowerÚkÚvs        r   rS   zHeaders.__delitem__u   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)   )rB   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'   r7   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)   )rB   r   Ú	raw_items)r2   Úargs     r   r5   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&   ÚgetrC   rD   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.

        )rG   r'   r7   s    r   r_   zHeaders.raw_itemsž   s   € ô
 �D—J‘JÓÐr   )r   r   r+   r   r   ÚNoner   )r   r   )r   Úbytes)r3   Úobjectr   Úbool)r   zIterator[str])r   Úint©r3   r   r   r   )r3   r   r4   r   r   rf   )r3   r   r   rf   )rY   r   r   ri   )r   rf   )r3   r   r   z	list[str])r   zIterator[tuple[str, str]])r   r    r!   r"   Ú	__slots__r,   r   r;   r=   r@   rE   rH   rJ   rM   rQ   rS   rZ   r\   r*   rd   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)   r1   r7   s    r   ÚkeyszSupportsKeysAndGetItem.keys­   s   €  Sr   c                 ó   — y r)   r1   rD   s     r   rM   z"SupportsKeysAndGetItem.__getitem__¯   s   € ¨Cr   N)r   zIterable[str]rk   )r   r    r!   r"   rp   rM   r1   r   r   rn   rn   §   s   „ ñó
 )ä/r   rn   N)Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   Ú__all__ÚLookupErrorr   r   r   rn   r   r1   r   r   Ú<module>rv      s†   ðÝ "÷	÷ 	ó 	ò <€ô
!˜+ô 
!ôD ˆn˜S #˜XÑ&ô D ôP0˜Xô 0ð ØØˆC�ˆHÑàˆU�3˜�8‰_ÑØð	ñ€ðr   