§
    JŠtjñ*  ã                  ó  — d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ d	gZ ej        d
¦  «        Z ed¦  «        Z G d„ dee         ¦  «        Z G d„ d	¦  «        ZdS )é    )ÚannotationsN)ÚAsyncIteratorÚIterable)ÚAnyÚCallableÚGenericÚLiteralÚTypeVarÚoverloadé   )ÚConcurrencyError)Ú	OP_BINARYÚOP_CONTÚOP_TEXTÚFrame)ÚDataÚ	Assemblerzutf-8ÚTc                  óD   — e Zd ZdZdd„Zdd„Zdd	„Zddd„Zdd„Zdd„Z	dS )ÚSimpleQueuez…
    Simplified version of :class:`asyncio.Queue`.

    Provides only the subset of functionality needed by :class:`Assembler`.

    ÚreturnÚNonec                ót   — t          j        ¦   «         | _        d | _        t	          j        ¦   «         | _        d S ©N)ÚasyncioÚget_running_loopÚloopÚ
get_waiterÚcollectionsÚdequeÚqueue©Úselfs    úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websockets/asyncio/messages.pyÚ__init__zSimpleQueue.__init__   s-   € ÝÔ,Ñ.Ô.ˆŒ	Ø7;ˆŒÝ+6Ô+<Ñ+>Ô+>ˆŒ
ˆ
ˆ
ó    Úintc                ó*   — t          | j        ¦  «        S r   )Úlenr!   r"   s    r$   Ú__len__zSimpleQueue.__len__"   s   € Ý�4”:‰ŒÐr&   Úitemr   c                ó¶   — | j                              |¦  «         | j        �5| j                             ¦   «         s| j                             d¦  «         dS dS dS )z+Put an item into the queue without waiting.N)r!   Úappendr   ÚdoneÚ
set_result)r#   r+   s     r$   ÚputzSimpleQueue.put%   s]   € àŒ
×Ò˜$ÑÔÐØŒ?Ð&¨t¬×/CÒ/CÑ/EÔ/EÐ&ØŒO×&Ò& tÑ,Ô,Ð,Ð,Ð,ð 'Ð&Ð&Ð&r&   TÚblockÚboolc              ƒ  ón  K  — | j         s”|st          d¦  «        ‚| j        �
J d¦   «         ‚| j                             ¦   «         | _        	 | j        ƒ d{V —† | j                             ¦   «          d| _        n%# | j                             ¦   «          d| _        w xY w| j                              ¦   «         S )z?Remove and return an item from the queue, waiting if necessary.ústream of frames endedNzcannot call get() concurrently)r!   ÚEOFErrorr   r   Úcreate_futureÚcancelÚpopleft)r#   r1   s     r$   ÚgetzSimpleQueue.get+   sÍ   è è € àŒzð 		'Øð 9ÝÐ7Ñ8Ô8Ð8Ø”?Ð*Ð*Ð,LÑ*Ô*Ð*Ø"œi×5Ò5Ñ7Ô7ˆDŒOð'Ø”oÐ%Ð%Ð%Ð%Ð%Ð%Ð%à”×&Ò&Ñ(Ô(Ð(Ø"&�”�øð ”×&Ò&Ñ(Ô(Ð(Ø"&�”Ð&Ð&Ð&Ð&ØŒz×!Ò!Ñ#Ô#Ð#s   ÁA9 Á9"BÚitemsúIterable[T]c                ó~   — | j         �
J d¦   «         ‚| j        r
J d¦   «         ‚| j                             |¦  «         dS )z)Put back items into an empty, idle queue.Nz%cannot reset() while get() is runningz&cannot reset() while queue isn't empty)r   r!   Úextend)r#   r:   s     r$   ÚresetzSimpleQueue.reset9   sK   € àŒÐ&Ð&Ð(OÑ&Ô&Ð&Ø”:ÐGÐGÐGÑGÔGˆ~ØŒ
×Ò˜%Ñ Ô Ð Ð Ð r&   c                óœ   — | j         �B| j                              ¦   «         s+| j                              t          d¦  «        ¦  «         dS dS dS )z8Close the queue, raising EOFError in get() if necessary.Nr4   )r   r.   Úset_exceptionr5   r"   s    r$   ÚabortzSimpleQueue.abort?   sP   € àŒ?Ð&¨t¬×/CÒ/CÑ/EÔ/EÐ&ØŒO×)Ò)­(Ð3KÑ*LÔ*LÑMÔMÐMÐMÐMð 'Ð&Ð&Ð&r&   N©r   r   )r   r'   )r+   r   r   r   )T)r1   r2   r   r   )r:   r;   r   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r*   r0   r9   r>   rA   © r&   r$   r   r      s¡   € € € € € ðð ð?ð ?ð ?ð ?ð
ð ð ð ð-ð -ð -ð -ð$ð $ð $ð $ð $ð!ð !ð !ð !ðNð Nð Nð Nð Nð Nr&   r   c                  óð   — e Zd ZdZddd„ d„ fd&d„Zed'd„¦   «         Zed(d„¦   «         Zed)d*d„¦   «         Zd)d*d„Zed+d„¦   «         Zed,d„¦   «         Zed)d-d„¦   «         Zd)d-d„Zd.d"„Zd/d#„Z	d/d$„Z
d/d%„ZdS )0r   aË  
    Assemble messages from frames.

    :class:`Assembler` expects only data frames. The stream of frames must
    respect the protocol; if it doesn't, the behavior is undefined.

    Args:
        pause: Called when the buffer of frames goes above the high water mark;
            should pause reading from the network.
        resume: Called when the buffer of frames goes below the low water mark;
            should resume reading from the network.

    Nc                 ó   — d S r   rG   rG   r&   r$   ú<lambda>zAssembler.<lambda>Y   s   € ¨4€ r&   c                 ó   — d S r   rG   rG   r&   r$   rJ   zAssembler.<lambda>Z   s   € ¨D€ r&   Úhighú
int | NoneÚlowÚpauseúCallable[[], Any]Úresumer   r   c                ó  — t          ¦   «         | _        |�|€|dz  }|€|�|dz  }|�,|�*|dk     rt          d¦  «        ‚||k     rt          d¦  «        ‚||c| _        | _        || _        || _        d| _        d| _        d| _	        d S )Né   r   z%low must be positive or equal to zeroz)high must be greater than or equal to lowF)
r   ÚframesÚ
ValueErrorrL   rN   rO   rQ   ÚpausedÚget_in_progressÚclosed)r#   rL   rN   rO   rQ   s        r$   r%   zAssembler.__init__U   s¬   € õ +6©-¬-ˆŒð Ð  Ø˜!‘)ˆCØˆ<˜C˜OØ˜‘7ˆDØÐ  Ø�QŠwˆwÝ Ð!HÑIÔIÐIØ�cŠzˆzÝ Ð!LÑMÔMÐMØ" CÐˆŒ	�4”8ØˆŒ
ØˆŒØˆŒð  %ˆÔð ˆŒˆˆr&   ÚdecodeúLiteral[True]Ústrc              ƒ  ó
   K  — d S r   rG   ©r#   rY   s     r$   r9   zAssembler.getw   s   è è € Ø7:°sr&   úLiteral[False]Úbytesc              ƒ  ó
   K  — d S r   rG   r]   s     r$   r9   zAssembler.getz   s   è è € Ø:=¸#r&   úbool | Noner   c              ƒ  ó
   K  — d S r   rG   r]   s     r$   r9   zAssembler.get}   s   è è € Ø=@¸Sr&   c              ƒ  óè  K  — | j         rt          d¦  «        ‚d| _         	 | j                             | j         ¦  «        ƒ d{V —†}|                      ¦   «          |j        t          u s|j        t          u sJ ‚|€|j        t          u }|g}|j	        s–	 | j                             | j         ¦  «        ƒ d{V —†}n.# t          j        $ r | j                             |¦  «         ‚ w xY w|                      ¦   «          |j        t          u sJ ‚|                     |¦  «         |j	        ¯–d| _         n# d| _         w xY wd                     d„ |D ¦   «         ¦  «        }|r|                     ¦   «         S |S )a0  
        Read the next message.

        :meth:`get` returns a single :class:`str` or :class:`bytes`.

        If the message is fragmented, :meth:`get` waits until the last frame is
        received, then it reassembles the message and returns it. To receive
        messages frame by frame, use :meth:`get_iter` instead.

        Args:
            decode: :obj:`False` disables UTF-8 decoding of text frames and
                returns :class:`bytes`. :obj:`True` forces UTF-8 decoding of
                binary frames and returns :class:`str`.

        Raises:
            EOFError: If the stream of frames has ended.
            UnicodeDecodeError: If a text frame contains invalid UTF-8.
            ConcurrencyError: If two coroutines run :meth:`get` or
                :meth:`get_iter` concurrently.

        ú&get() or get_iter() is already runningTNFr&   c              3  ó$   K  — | ]}|j         V — Œd S r   )Údata)Ú.0Úframes     r$   ú	<genexpr>z Assembler.get.<locals>.<genexpr>¶   s$   è è € Ð7Ð7 u˜œ
Ð7Ð7Ð7Ð7Ð7Ð7r&   )rW   r   rT   r9   rX   Úmaybe_resumeÚopcoder   r   Úfinr   ÚCancelledErrorr>   r   r-   ÚjoinrY   )r#   rY   rh   rT   rf   s        r$   r9   zAssembler.get€   s¸  è è € ð, Ôð 	MÝ"Ð#KÑLÔLÐLØ#ˆÔð
	)àœ+Ÿ/š/¨d¬k¨/Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ˆEØ×ÒÑÔÐØ”<¥7Ð*Ð*¨e¬l½iÐ.GÐ.GÐ.GÐGØˆ~Øœ­Ð0�Ø�WˆFð ”ið 
%ðØ"&¤+§/¢/°d´k°/Ñ"BÔ"BÐBÐBÐBÐBÐBÐB�E�EøÝÔ-ð ð ð ð ”K×%Ò% fÑ-Ô-Ð-Øð	øøøð
 ×!Ò!Ñ#Ô#Ð#Ø”|¥wÐ.Ð.Ð.Ð.Ø—’˜eÑ$Ô$Ð$ð ”ið 
%ð $)ˆDÔ Ð ø 5ˆDÔ Ð(Ð(Ð(Ð(à�xŠxÐ7Ð7°Ð7Ñ7Ô7Ñ7Ô7ˆØð 	Ø—;’;‘=”=Ð àˆKs%   ¡A2D1 Â&B; Â:D1 Â;+C&Ã&AD1 Ä1	D:úAsyncIterator[str]c                ó   — d S r   rG   r]   s     r$   Úget_iterzAssembler.get_iter¼   s   € ØEHÀSr&   úAsyncIterator[bytes]c                ó   — d S r   rG   r]   s     r$   rq   zAssembler.get_iter¿   s   € ØHKÈr&   úAsyncIterator[Data]c                ó   — d S r   rG   r]   s     r$   rq   zAssembler.get_iterÂ   s   € ØKNÈ3r&   c               óè  K  — | j         rt          d¦  «        ‚d| _         	 | j                             | j         ¦  «        ƒ d{V —†}n# t
          j        $ r	 d| _         ‚ w xY w|                      ¦   «          |j        t          u s|j        t          u sJ ‚|€|j        t          u }|r2t          ¦   «         }|                     |j        |j        ¦  «        W V — n
|j        W V — |j        s�| j                             | j         ¦  «        ƒ d{V —†}|                      ¦   «          |j        t          u sJ ‚|r$|                     |j        |j        ¦  «        W V — n
|j        W V — |j        ¯�d| _         dS )a¸  
        Stream the next message.

        Iterating the return value of :meth:`get_iter` asynchronously yields a
        :class:`str` or :class:`bytes` for each frame in the message.

        The iterator must be fully consumed before calling :meth:`get_iter` or
        :meth:`get` again. Else, :exc:`ConcurrencyError` is raised.

        This method only makes sense for fragmented messages. If messages aren't
        fragmented, use :meth:`get` instead.

        Args:
            decode: :obj:`False` disables UTF-8 decoding of text frames and
                returns :class:`bytes`. :obj:`True` forces UTF-8 decoding of
                binary frames and returns :class:`str`.

        Raises:
            EOFError: If the stream of frames has ended.
            UnicodeDecodeError: If a text frame contains invalid UTF-8.
            ConcurrencyError: If two coroutines run :meth:`get` or
                :meth:`get_iter` concurrently.

        rd   TNF)rW   r   rT   r9   rX   r   rm   rj   rk   r   r   ÚUTF8DecoderrY   rf   rl   r   )r#   rY   rh   Údecoders       r$   rq   zAssembler.get_iterÅ   sÃ  è è € ð2 Ôð 	MÝ"Ð#KÑLÔLÐLØ#ˆÔð	Øœ+Ÿ/š/¨d¬k¨/Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ˆEˆEøÝÔ%ð 	ð 	ð 	Ø#(ˆDÔ Øð	øøøð 	×ÒÑÔÐØŒ|�wÐ&Ð&¨%¬,½)Ð*CÐ*CÐ*CÐCØˆ>Ø”\¥WÐ,ˆFØð 	Ý!‘m”mˆGØ—.’. ¤¨U¬YÑ7Ô7Ð7Ð7Ð7Ð7Ð7à”*ÐÐÐÐð ”)ð 	!ð
 œ+Ÿ/š/¨d¬k¨/Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:ˆEØ×ÒÑÔÐØ”<¥7Ð*Ð*Ð*Ð*Øð !Ø—n’n U¤Z°´Ñ;Ô;Ð;Ð;Ð;Ð;Ð;à”jÐ Ð Ð Ð ð ”)ð 	!ð  %ˆÔÐÐs   ¡&A ÁA rh   r   c                óŽ   — | j         rt          d¦  «        ‚| j                             |¦  «         |                      ¦   «          dS )z
        Add ``frame`` to the next message.

        Raises:
            EOFError: If the stream of frames has ended.

        r4   N)rX   r5   rT   r0   Úmaybe_pause)r#   rh   s     r$   r0   zAssembler.put  sI   € ð Œ;ð 	5ÝÐ3Ñ4Ô4Ð4àŒ�Š˜ÑÔÐØ×ÒÑÔÐÐÐr&   c                óž   — | j         €dS t          | j        ¦  «        | j         k    r$| j        sd| _        |                      ¦   «          dS dS dS )z7Pause the writer if queue is above the high water mark.NT)rL   r)   rT   rV   rO   r"   s    r$   rz   zAssembler.maybe_pause  sW   € ð Œ9ÐØˆFõ ˆtŒ{ÑÔ˜dœiÒ'Ð'°´Ð'ØˆDŒKØ�JŠJ‰LŒLˆLˆLˆLð (Ð'Ð'Ð'r&   c                óž   — | j         €dS t          | j        ¦  «        | j         k    r$| j        rd| _        |                      ¦   «          dS dS dS )z7Resume the writer if queue is below the low water mark.NF)rN   r)   rT   rV   rQ   r"   s    r$   rj   zAssembler.maybe_resume!  sW   € ð Œ8ÐØˆFõ ˆtŒ{ÑÔ˜tœxÒ'Ð'¨D¬KÐ'ØˆDŒKØ�KŠK‰MŒMˆMˆMˆMð (Ð'Ð'Ð'r&   c                óX   — | j         rdS d| _         | j                             ¦   «          dS )z½
        End the stream of frames.

        Calling :meth:`close` concurrently with :meth:`get`, :meth:`get_iter`,
        or :meth:`put` is safe. They will raise :exc:`EOFError`.

        NT)rX   rT   rA   r"   s    r$   ÚclosezAssembler.close,  s6   € ð Œ;ð 	ØˆFàˆŒð 	Œ×ÒÑÔÐÐÐr&   )
rL   rM   rN   rM   rO   rP   rQ   rP   r   r   )rY   rZ   r   r[   )rY   r^   r   r_   r   )rY   ra   r   r   )rY   rZ   r   ro   )rY   r^   r   rr   )rY   ra   r   rt   )rh   r   r   r   rB   )rC   rD   rE   rF   r%   r   r9   rq   r0   rz   rj   r~   rG   r&   r$   r   r   E   sa  € € € € € ðð ð"  ØØ#/ <Ø$0 Lð ð  ð  ð  ð  ðD Ø:Ð:Ð:ñ „XØ:àØ=Ð=Ð=ñ „XØ=àØ@Ð@Ð@Ð@ñ „XØ@ð:ð :ð :ð :ð :ðx ØHÐHÐHñ „XØHàØKÐKÐKñ „XØKàØNÐNÐNÐNñ „XØNðA%ð A%ð A%ð A%ð A%ðFð ð ð ð	ð 	ð 	ð 	ð	ð 	ð 	ð 	ðð ð ð ð ð r&   )Ú
__future__r   r   Úcodecsr   Úcollections.abcr   r   Útypingr   r   r   r	   r
   r   Ú
exceptionsr   rT   r   r   r   r   r   Ú__all__Úgetincrementaldecoderrw   r   r   r   rG   r&   r$   ú<module>r†      s`  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eà )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð ð ˆ-€à*ˆfÔ*¨7Ñ3Ô3€à€GˆC�L„L€ð-Nð -Nð -Nð -Nð -N�'˜!”*ñ -Nô -Nð -Nð`uð uð uð uð uñ uô uð uð uð ur&   