§
    JŠtjï  ã                  óî   — 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dS )é    )Ú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.

    ÚreturnÚstrc                ó¨   •— t          | j        ¦  «        dk    rt          | j        d         ¦  «        S t          ¦   «                              ¦   «         S ©Né   r   )ÚlenÚargsÚreprÚsuperÚ__str__)ÚselfÚ	__class__s    €úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websockets/datastructures.pyr   zMultipleValuesError.__str__   s>   ø€ åˆtŒy‰>Œ>˜QÒÐÝ˜œ	 !œÑ%Ô%Ð%Ý‰wŒw�ŠÑ Ô Ð ó    ©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__©r   s   @r   r   r      sG   ø€ € € € € ðð ð
!ð !ð !ð !ð !ð !ð !ð !ð !ð !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d0d„Zd%ˆ fd „Zd1d"„Zd2d$„Zˆ xZS )3r   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Ú_listr   r   Úkwargsr   r   ÚNonec                ó<   — i | _         g | _         | j        |i |¤Ž d S ©N)r%   r&   Úupdate)r   r   r'   s      r   Ú__init__zHeaders.__init__D   s-   € Ø+-ˆŒ
Ø,.ˆŒ
ØˆŒ�TÐ$˜VÐ$Ð$Ð$Ð$Ð$r   c                óP   — d                      d„ | j        D ¦   «         ¦  «        dz   S )NÚ c              3  ó,   K  — | ]\  }}|› d |› d�V — ŒdS )z: ú
N© )Ú.0ÚkeyÚvalues      r   ú	<genexpr>z"Headers.__str__.<locals>.<genexpr>J   s7   è è € ÐJÐJ±°°e˜#Ð,Ð, Ð,Ð,Ð,ÐJÐJÐJÐJÐJÐJr   r0   )Újoinr&   ©r   s    r   r   zHeaders.__str__I   s*   € Ø�wŠwÐJÐJ¸t¼zÐJÑJÔJÑJÔJÈVÑSÐSr   c                ó0   — | j         j        › d| j        ›d�S )Nú(ú))r   r   r&   r7   s    r   Ú__repr__zHeaders.__repr__L   s    € Ø”.Ô)Ð;Ð;¨D¬JÐ;Ð;Ð;Ð;r   c                ó¦   — |                       ¦   «         }| j                             ¦   «         |_        | j                             ¦   «         |_        |S r*   )r   r%   Úcopyr&   )r   r=   s     r   r=   zHeaders.copyO   s<   € Ø�~Š~ÑÔˆØ”Z—_’_Ñ&Ô&ˆŒ
Ø”Z—_’_Ñ&Ô&ˆŒ
Øˆr   Úbytesc                óD   — t          | ¦  «                             ¦   «         S r*   )r   Úencoder7   s    r   Ú	serializezHeaders.serializeU   s   € å�4‰yŒy×ÒÑ!Ô!Ð!r   r3   ÚobjectÚboolc                ób   — t          |t          ¦  «        o|                     ¦   «         | j        v S r*   )Ú
isinstancer   Úlowerr%   ©r   r3   s     r   Ú__contains__zHeaders.__contains__[   s&   € Ý˜#�sÑ#Ô#ÐA¨¯	ª	©¬°t´zÐ(AÐAr   úIterator[str]c                ó*   — t          | j        ¦  «        S r*   )Úiterr%   r7   s    r   Ú__iter__zHeaders.__iter__^   s   € Ý�D”JÑÔÐr   Úintc                ó*   — t          | j        ¦  «        S r*   )r   r%   r7   s    r   Ú__len__zHeaders.__len__a   s   € Ý�4”:‰ŒÐr   c                ó”   — | j         |                     ¦   «                  }t          |¦  «        dk    r|d         S t          |¦  «        ‚r   )r%   rF   r   r   ©r   r3   r4   s      r   Ú__getitem__zHeaders.__getitem__f   s<   € Ø”
˜3Ÿ9š9™;œ;Ô'ˆÝˆu‰:Œ:˜Š?ˆ?Ø˜”8ˆOå% cÑ*Ô*Ð*r   r4   c                ó¾   — | j                              |                     ¦   «         g ¦  «                             |¦  «         | j                             ||f¦  «         d S r*   )r%   Ú
setdefaultrF   Úappendr&   rQ   s      r   Ú__setitem__zHeaders.__setitem__m   sP   € ØŒ
×Ò˜cŸiši™kœk¨2Ñ.Ô.×5Ò5°eÑ<Ô<Ð<ØŒ
×Ò˜3 ˜,Ñ'Ô'Ð'Ð'Ð'r   c                ó”   ‡— |                      ¦   «         Š| j                             ‰¦  «         ˆfd„| j        D ¦   «         | _        d S )Nc                óN   •— g | ]!\  }}|                      ¦   «         ‰k    ¯||f‘Œ"S r1   )rF   )r2   ÚkÚvÚ	key_lowers      €r   ú
<listcomp>z'Headers.__delitem__.<locals>.<listcomp>u   s3   ø€ ÐNÐNÐN¡  A°q·w²w±y´yÀIÒ7MÐ7M�q˜!�fÐ7MÐ7MÐ7Mr   )rF   r%   Ú__delitem__r&   )r   r3   r[   s     @r   r]   zHeaders.__delitem__q   sG   ø€ Ø—I’I‘K”Kˆ	ØŒ
×Ò˜yÑ)Ô)Ð)àNÐNÐNÐN¨¬ÐNÑNÔNˆŒ
ˆ
ˆ
r   Úotherr   c                óZ   — t          |t          ¦  «        st          S | j        |j        k    S r*   )rE   r   ÚNotImplementedr%   )r   r^   s     r   Ú__eq__zHeaders.__eq__w   s)   € Ý˜%¥Ñ)Ô)ð 	"Ý!Ð!ØŒz˜Uœ[Ò(Ð(r   c                ó"   — i | _         g | _        dS )z&
        Remove all headers.

        N)r%   r&   r7   s    r   ÚclearzHeaders.clear|   s   € ð
 ˆŒ
ØˆŒ
ˆ
ˆ
r   c                ól   •— t          d„ |D ¦   «         ¦  «        } t          ¦   «         j        |i |¤Ž dS )zT
        Update from a :class:`Headers` instance and/or keyword arguments.

        c              3  ól   K  — | ]/}t          |t          ¦  «        r|                     ¦   «         n|V — Œ0d S r*   )rE   r   Ú	raw_items)r2   Úargs     r   r5   z!Headers.update.<locals>.<genexpr>‰   sN   è è € ð 
ð 
ØEH�z¨#­wÑ7Ô7Ð@ˆC�MŠM‰OŒOˆO¸Sð
ð 
ð 
ð 
ð 
ð 
r   N)Útupler   r+   )r   r   r'   r   s      €r   r+   zHeaders.update„   sS   ø€ õ
 ð 
ð 
ØLPð
ñ 
ô 
ñ 
ô 
ˆð 	�‰ŒŒ˜Ð' Ð'Ð'Ð'Ð'Ð'r   ú	list[str]c                ó\   — | j                              |                     ¦   «         g ¦  «        S )z|
        Return the (possibly empty) list of all values for a header.

        Args:
            key: Header name.

        )r%   ÚgetrF   rG   s     r   Úget_allzHeaders.get_all�   s"   € ð Œz�~Š~˜cŸiši™kœk¨2Ñ.Ô.Ð.r   úIterator[tuple[str, str]]c                ó*   — t          | j        ¦  «        S )zO
        Return an iterator of all values as ``(name, value)`` pairs.

        )rK   r&   r7   s    r   rf   zHeaders.raw_itemsš   s   € õ
 �D”JÑÔÐr   )r   r   r'   r   r   r(   r   )r   r   )r   r>   )r3   rB   r   rC   )r   rI   )r   rM   ©r3   r   r   r   )r3   r   r4   r   r   r(   )r3   r   r   r(   )r^   r   r   rC   )r   r(   )r3   r   r   ri   )r   rm   )r   r   r    r!   Ú	__slots__r,   r   r;   r=   rA   rH   rL   rO   rR   rV   r]   ra   rc   r+   rl   rf   r"   r#   s   @r   r   r      sŒ  ø€ € € € € ð#ð #ðJ ˜'Ð"€Ið%ð %ð %ð %ð
Tð Tð Tð Tð<ð <ð <ð <ðð ð ð ð"ð "ð "ð "ðBð Bð Bð Bð ð  ð  ð  ðð ð ð ð
+ð +ð +ð +ð(ð (ð (ð (ðOð Oð Oð Oð)ð )ð )ð )ð
ð ð ð ð(ð (ð (ð (ð (ð (ð/ð /ð /ð /ð ð  ð  ð  ð  ð  ð  ð  r   r   c                  ó"   — e Zd ZdZd	d„Zd
d„ZdS )ÚSupportsKeysAndGetItemz_
    Dict-like types with ``keys() -> str`` and ``__getitem__(key: str) -> str`` methods.

    r   úIterable[str]c                ó   — d S r*   r1   r7   s    r   ÚkeyszSupportsKeysAndGetItem.keys©   ó   € € € r   r3   r   c                ó   — d S r*   r1   rG   s     r   rR   z"SupportsKeysAndGetItem.__getitem__«   rv   r   N)r   rs   ro   )r   r   r    r!   ru   rR   r1   r   r   rr   rr   £   s4   € € € € € ðð ð
 )Ð(Ð(Ð(à/Ð/Ð/Ð/Ð/Ð/r   rr   N)Ú
__future__r   Úcollections.abcr   r   r   r   Útypingr   r	   r
   Ú__all__ÚLookupErrorr   r   r   rr   rh   r   r1   r   r   ú<module>r}      s7  ðØ "Ð "Ð "Ð "Ð "Ð "à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð €ð
!ð 
!ð 
!ð 
!ð 
!˜+ñ 
!ô 
!ð 
!ðD ð D ð D ð D ð D ˆn˜S #˜XÔ&ñ D ô D ð D ðP0ð 0ð 0ð 0ð 0˜Xñ 0ô 0ð 0ð ØØˆC�ˆHÔØˆU�3˜�8Œ_ÔØðô€ðð r   