Ë
    Õ±1hï  ã                  ó¼   — d dl mZ d dlmZmZmZmZ d dl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)ÚIterableÚIteratorÚMappingÚMutableMapping)ÚAnyÚProtocolÚ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    €úW/var/www/skyplay_api_hub/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±°°e˜#˜˜b   tÔ,ÑJù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&   r6   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   Úencoder6   s    r   Ú	serializezHeaders.serializeU   s   € ä�4‹y×ÑÓ!Ð!r   c                ó^   — t        |t        «      xr |j                  «       | j                  v S r(   )Ú
isinstancer   Úlowerr%   ©r   r2   s     r   Ú__contains__zHeaders.__contains__[   s#   € Ü˜#œsÓ#ÒA¨¯	©	«°t·z±zÐ(AÐAr   c                ó,   — t        | j                  «      S r(   )Úiterr%   r6   s    r   Ú__iter__zHeaders.__iter__^   s   € Ü�D—J‘JÓÐr   c                ó,   — t        | j                  «      S r(   )r   r%   r6   s    r   Ú__len__zHeaders.__len__a   s   € Ü�4—:‘:‹Ðr   c                óx   — | j                   |j                  «          }t        |«      dk(  r|d   S t        |«      ‚r   )r%   rB   r   r   ©r   r2   r3   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%   Ú
setdefaultrB   Úappendr&   rK   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(   )rB   r%   Ú__delitem__r&   )r   r2   Ú	key_lowerÚkÚvs        r   rR   zHeaders.__delitem__q   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(   )rA   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&   r6   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(   )rA   r   Ú	raw_items)r1   Úargs     r   r4   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%   ÚgetrB   rC   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.

        )rF   r&   r6   s    r   r^   zHeaders.raw_itemsš   s   € ô
 �D—J‘JÓÐr   )r   r   r*   r   r   ÚNoner   )r   r   )r   Úbytes)r2   Úobjectr   Úbool)r   zIterator[str])r   Úint©r2   r   r   r   )r2   r   r3   r   r   re   )r2   r   r   re   )rX   r   r   rh   )r   re   )r2   r   r   z	list[str])r   zIterator[tuple[str, str]])r   r   r    r!   Ú	__slots__r+   r   r:   r<   r?   rD   rG   rI   rL   rP   rR   rY   r[   r)   rc   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(   r0   r6   s    r   ÚkeyszSupportsKeysAndGetItem.keys©   ó   � r   c                 ó   — y r(   r0   rC   s     r   rL   z"SupportsKeysAndGetItem.__getitem__«   rp   r   N)r   zIterable[str]rj   )r   r   r    r!   ro   rL   r0   r   r   rm   rm   £   s   „ ñó
 )ä/r   rm   N)Ú
__future__r   Úcollections.abcr   r   r   r   Útypingr   r	   r
   Ú__all__ÚLookupErrorr   r   r   rm   r`   r   r0   r   r   ú<module>rw      sƒ   ðÝ "ç GÓ Gß 'Ñ 'ò€ô
!˜+ô 
!ôD ˆn˜S #˜XÑ&ô D ôP0˜Xô 0ð ØØˆC�ˆHÑØˆU�3˜�8‰_ÑØðñ€ðr   