ó
    ÖÁ“iŽ  ã                  ó¼   • S SK Jr  S SKJrJrJrJr  S SKJrJ	r	  / SQr
 " S S\5      r " S S\\\4   5      r " S	 S
\	5      r\\\\4   -  \\\\4      -  \-  rg)é    )Úannotations)ÚIterableÚIteratorÚMappingÚMutableMapping)ÚAnyÚProtocol)ÚHeadersÚHeadersLikeÚMultipleValuesErrorc                  ó0   ^ • \ rS rSrSrSU 4S jjrSrU =r$ )r   é   zH
Exception raised when :class:`Headers` has multiple values for a key.

c                ó‚   >• [        U R                  5      S:X  a  [        U R                  S   5      $ [        TU ]  5       $ ©Né   r   )ÚlenÚargsÚreprÚsuperÚ__str__)ÚselfÚ	__class__s    €ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/websockets/datastructures.pyr   ÚMultipleValuesError.__str__   s3   ø€ äˆt�y‰y‹>˜QÓÜ˜Ÿ	™	 !™Ó%Ð%Ü‰w‰Ó Ð ó    © ©ÚreturnÚstr)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      s   ø† ñ÷
!õ !r   r   c                  óÎ   ^ • \ rS rSrSrSS/rSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSS jrSS jrS S jrS!S jrSU 4S jjrS"S jrS#S jrSrU =r$ )$r
   é   al  
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   • 0 U l         / U l        U R                  " U0 UD6  g ©N)r*   r+   Úupdate)r   r   Úkwargss      r   Ú__init__ÚHeaders.__init__D   s!   € Ø+-ˆŒ
Ø,.ˆŒ
Ø�Š�TÐ$˜VÓ$r   c                óL   • SR                  S U R                   5       5      S-   $ )NÚ c              3  ó6   #   • U  H  u  pU S U S3v •  M     g7f)z: ú
Nr   )Ú.0ÚkeyÚvalues      r   Ú	<genexpr>Ú"Headers.__str__.<locals>.<genexpr>J   s   é € ÐJºz±°˜#˜˜b   tÕ,ºzùs   ‚r5   )Újoinr+   ©r   s    r   r   ÚHeaders.__str__I   s    € Ø�w‰wÑJ¸t¿zºzÓJÓJÈVÑSÐSr   c                óP   • U R                   R                   SU R                  < S3$ )NÚ(Ú))r   r    r+   r<   s    r   Ú__repr__ÚHeaders.__repr__L   s$   € Ø—.‘.×)Ñ)Ð*¨!¨D¯J©J©>¸Ð;Ð;r   c                ó¢   • U R                  5       nU R                  R                  5       Ul        U R                  R                  5       Ul        U$ r-   )r   r*   Úcopyr+   )r   rD   s     r   rD   ÚHeaders.copyO   s7   € Ø�~‰~ÓˆØ—Z‘Z—_‘_Ó&ˆŒ
Ø—Z‘Z—_‘_Ó&ˆŒ
Øˆr   c                ó4   • [        U 5      R                  5       $ r-   )r   Úencoder<   s    r   Ú	serializeÚHeaders.serializeU   s   € ä�4‹y×ÑÓ!Ð!r   c                ój   • [        U[        5      =(       a    UR                  5       U R                  ;   $ r-   )Ú
isinstancer   Úlowerr*   ©r   r7   s     r   Ú__contains__ÚHeaders.__contains__[   s#   € Ü˜#œsÓ#×A¨¯	©	«°t·z±zÑ(AÐAr   c                ó,   • [        U R                  5      $ r-   )Úiterr*   r<   s    r   Ú__iter__ÚHeaders.__iter__^   s   € Ü�D—J‘JÓÐr   c                ó,   • [        U R                  5      $ r-   )r   r*   r<   s    r   Ú__len__ÚHeaders.__len__a   s   € Ü�4—:‘:‹Ðr   c                óz   • U R                   UR                  5          n[        U5      S:X  a  US   $ [        U5      er   )r*   rL   r   r   ©r   r7   r8   s      r   Ú__getitem__ÚHeaders.__getitem__f   s5   € Ø—
‘
˜3Ÿ9™9›;Ñ'ˆÜˆu‹:˜‹?Ø˜‘8ˆOä% cÓ*Ð*r   c                ó®   • U R                   R                  UR                  5       / 5      R                  U5        U R                  R                  X45        g r-   )r*   Ú
setdefaultrL   Úappendr+   rX   s      r   Ú__setitem__ÚHeaders.__setitem__m   s;   € Ø�
‰
×Ñ˜cŸi™i›k¨2Ó.×5Ñ5°eÔ<Ø�
‰
×Ñ˜3˜,Õ'r   c                óà   • UR                  5       nU R                  R                  U5        U R                   VVs/ s H  u  p4UR                  5       U:w  d  M  X44PM      snnU l        g s  snnf r-   )rL   r*   Ú__delitem__r+   )r   r7   Ú	key_lowerÚkÚvs        r   ra   ÚHeaders.__delitem__q   sO   € Ø—I‘I“Kˆ	Ø�
‰
×Ñ˜yÔ)à)-¯ªÔNª¡ °q·w±w³yÀIÑ7M“f�q“f©ÒNˆ�
ùÓNs   »A*ÁA*c                ój   • [        U[        5      (       d  [        $ U R                  UR                  :H  $ r-   )rK   r
   ÚNotImplementedr*   )r   Úothers     r   Ú__eq__ÚHeaders.__eq__w   s(   € Ü˜%¤×)Ñ)Ü!Ð!Ø�z‰z˜UŸ[™[Ñ(Ð(r   c                ó    • 0 U l         / U l        g)z
Remove all headers.

N©r*   r+   r<   s    r   ÚclearÚHeaders.clear|   s   € ð
 ˆŒ
Øˆ�
r   c                óJ   >• [        S U 5       5      n[        TU ]  " U0 UD6  g)zD
Update from a :class:`Headers` instance and/or keyword arguments.

c              3  óp   #   • U  H,  n[        U[        5      (       a  UR                  5       OUv •  M.     g 7fr-   )rK   r
   Ú	raw_items)r6   Úargs     r   r9   Ú!Headers.update.<locals>.<genexpr>‰   s*   é € ð 
ÚLPÀSœz¨#¬w×7Ñ7ˆC�M‰MŒO¸SÔ@ÊDùs   ‚46N)Útupler   r.   )r   r   r/   r   s      €r   r.   ÚHeaders.update„   s/   ø€ ô
 ñ 
ÙLPó
ó 
ˆô 	‰Š˜Ð' Ó'r   c                óV   • U R                   R                  UR                  5       / 5      $ )z\
Return the (possibly empty) list of all values for a header.

Args:
    key: Header name.

)r*   ÚgetrL   rM   s     r   Úget_allÚHeaders.get_all�   s   € ð �z‰z�~‰~˜cŸi™i›k¨2Ó.Ð.r   c                ó,   • [        U R                  5      $ )z?
Return an iterator of all values as ``(name, value)`` pairs.

)rQ   r+   r<   s    r   rq   ÚHeaders.raw_itemsš   s   € ô
 �D—J‘JÓÐr   rl   )r   r   r/   r   r   ÚNoner   )r   r
   )r   Úbytes)r7   Úobjectr   Úbool)r   zIterator[str])r   Úint©r7   r   r   r   )r7   r   r8   r   r   r|   )r7   r   r   r|   )rh   r   r   r   )r   r|   )r7   r   r   z	list[str])r   zIterator[tuple[str, str]])r    r!   r"   r#   r$   Ú	__slots__r0   r   rA   rD   rH   rN   rR   rU   rY   r^   ra   ri   rm   r.   rx   rq   r%   r&   r'   s   @r   r
   r
      sm   ø† ñ#ðJ ˜'Ð"€Iô%ô
Tô<ôô"ôBô ôô
+ô(ôOô)ô
÷(ô/÷ ò  r   r
   c                  ó,   • \ rS rSrSrSS jrSS jrSrg)	ÚSupportsKeysAndGetItemé£   zW
Dict-like types with ``keys() -> str`` and ``__getitem__(key: str) -> str`` methods.

c                ó   • g r-   r   r<   s    r   ÚkeysÚSupportsKeysAndGetItem.keys©   s   €  Sr   c                ó   • g r-   r   rM   s     r   rY   Ú"SupportsKeysAndGetItem.__getitem__«   s   € ¨Cr   r   N)r   zIterable[str]r�   )r    r!   r"   r#   r$   r‡   rY   r%   r   r   r   r„   r„   £   s   † ñô
 )ç/r   r„   N)Ú
__future__r   Úcollections.abcr   r   r   r   Útypingr   r	   Ú__all__ÚLookupErrorr   r   r
   r„   rt   r   r   r   r   Ú<module>r�      s}   ðÝ "ç GÓ Gß  ò€ô
!˜+ô 
!ôD ˆn˜S #˜XÑ&ô D ôP0˜Xô 0ð ˆg�c˜3�hÑÑ (¨5°°c°©?Ñ";Ñ;Ð>TÑTð ðr   