§
    JŠtj?1  ã                  óÆ   — d dl mZ d dlZd dlZd dl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d	lmZ d
gZ ej        d¦  «        Z G d„ d
¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚCallableÚIterableÚIteratorÚLiteralÚoverloadé   )ÚConcurrencyError)Ú	OP_BINARYÚOP_CONTÚOP_TEXTÚFrame)ÚDataé   )ÚDeadlineÚ	Assemblerzutf-8c                  ó6  — e Zd ZdZddd„ d„ fd.d„Zd/d0d„Zd1d„Zed2d„¦   «         Zed3d„¦   «         Zed/d2d„¦   «         Zed/d3d„¦   «         Zed4d5d „¦   «         Zd4d5d!„Zed6d#„¦   «         Z	ed7d%„¦   «         Z	ed/d8d'„¦   «         Z	d/d8d(„Z	d9d*„Z
d:d+„Zd:d,„Zd:d-„ZdS );r   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 ©N© r   ó    úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websockets/sync/messages.pyú<lambda>zAssembler.<lambda>&   s   € ¨4€ r   c                 ó   — d S r   r   r   r   r   r   zAssembler.<lambda>'   s   € ¨D€ r   Úhighú
int | NoneÚlowÚpauseúCallable[[], Any]ÚresumeÚreturnÚNonec                óJ  — t          j        ¦   «         | _        t          j        ¦   «         | _        |�|€|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)Ú	threadingÚLockÚmutexÚqueueÚSimpleQueueÚframesÚ
ValueErrorr   r   r   r!   ÚpausedÚget_in_progressÚclosed)Úselfr   r   r   r!   s        r   Ú__init__zAssembler.__init__"   sÂ   € õ ”^Ñ%Ô%ˆŒ
õ 8=Ô7HÑ7JÔ7JˆŒð Ð  Ø˜!‘)ˆCØˆ<˜C˜OØ˜‘7ˆDØÐ  Ø�QŠwˆwÝ Ð!HÑIÔIÐIØ�cŠzˆzÝ Ð!LÑMÔMÐMØ" CÐˆŒ	�4”8ØˆŒ
ØˆŒØˆŒð  %ˆÔð ˆŒˆˆr   Útimeoutúfloat | Noner   c                óŠ  — | j         r@	 | j                             d¬¦  «        }n�# t          j        $ r t          d¦  «        d ‚w xY w	 |�"|dk    r| j                             d¬¦  «        }n| j                             d|¬¦  «        }n(# t          j        $ r t          d|d›d	�¦  «        d ‚w xY w|€t          d¦  «        ‚|S )
NF©Úblockústream of frames endedr   T)r6   r2   ztimed out in z.1fÚs)r/   r+   Úgetr)   ÚEmptyÚEOFErrorÚTimeoutError)r0   r2   Úframes      r   Úget_next_framezAssembler.get_next_frameH   sü   € ð Œ;ð 	MðCØœŸš¨e˜Ñ4Ô4��øÝ”;ð Cð Cð CÝÐ7Ñ8Ô8¸dÐBðCøøøðMð Ð&¨7°aª<¨<Ø œKŸOšO°%˜OÑ8Ô8�E�Eà œKŸOšO°$À˜OÑHÔH�EøøÝ”;ð Mð Mð MÝ"Ð#A°7Ð#AÐ#AÐ#AÐ#AÑBÔBÈÐLðMøøøàˆ=ÝÐ3Ñ4Ô4Ð4Øˆs   ‰% ¥ AÁ	A B
 Â
%B/r+   úIterable[Frame]c                óT  — | j         5  g }	 	 |                     | j                             d¬¦  «        ¦  «         Œ/# t          j        $ r Y nw xY w|D ]}| j                             |¦  «         Œ|D ]}| j                             |¦  «         Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )NTFr5   )r(   Úappendr+   r9   r)   r:   Úput)r0   r+   Úqueuedr=   s       r   Úreset_queuezAssembler.reset_queue^   s  € ð ŒZð 	'ð 	'ØˆFðð@Ø—M’M $¤+§/¢/¸ /Ñ">Ô">Ñ?Ô?Ð?ð@øå”;ð ð ð Ø�ðøøøàð 'ð '�Ø”—’ Ñ&Ô&Ð&Ð&àð 'ð '�Ø”—’ Ñ&Ô&Ð&Ð&ð'ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð 	'ð 	's-   ˆBŒ0<¼AÁBÁAÁABÂB!Â$B!ÚdecodeúLiteral[True]Ústrc                ó   — d S r   r   ©r0   r2   rE   s      r   r9   zAssembler.gett   s   € ØHKÈr   úLiteral[False]Úbytesc                ó   — d S r   r   rI   s      r   r9   zAssembler.getw   s   € ØKNÈ3r   c               ó   — d S r   r   rI   s      r   r9   zAssembler.getz   s   € ØRUÐRUr   c               ó   — d S r   r   rI   s      r   r9   zAssembler.get}   ó   € ØUXÐUXr   úbool | Noner   c                ó   — d S r   r   rI   s      r   r9   zAssembler.get€   rO   r   c                ó´  — | j         5  | j        rt          d¦  «        ‚d| _        ddd¦  «         n# 1 swxY w Y   	 t          |¦  «        }|                      |                     d¬¦  «        ¦  «        }| j         5  |                      ¦   «          ddd¦  «         n# 1 swxY w Y   |j        t          u s|j        t          u sJ ‚|€|j        t          u }|g}|j
        s®	 |                      |                     d¬¦  «        ¦  «        }n$# t          $ r |                      |¦  «         ‚ w xY w| j         5  |                      ¦   «          ddd¦  «         n# 1 swxY w Y   |j        t          u sJ ‚|                     |¦  «         |j
        ¯®d| _        n# d| _        w xY wd                     d„ |D ¦   «         ¦  «        }|r|                     ¦   «         S |S )a?  
        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:
            timeout: If a timeout is provided and elapses before a complete
                message is received, :meth:`get` raises :exc:`TimeoutError`.
            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.
            TimeoutError: If a timeout is provided and elapses before a
                complete message is received.

        ú&get() or get_iter() is already runningTNF)Úraise_if_elapsedr   c              3  ó$   K  — | ]}|j         V — Œd S r   )Údata)Ú.0r=   s     r   ú	<genexpr>z Assembler.get.<locals>.<genexpr>Ä   s$   è è € Ð7Ð7 u˜œ
Ð7Ð7Ð7Ð7Ð7Ð7r   )r(   r.   r   r   r>   r2   Úmaybe_resumeÚopcoder   r   Úfinr<   rD   r   rA   ÚjoinrE   )r0   r2   rE   Údeadliner=   r+   rV   s          r   r9   zAssembler.getƒ   sÒ  € ð4 ŒZð 	(ð 	(ØÔ#ð QÝ&Ð'OÑPÔPÐPØ#'ˆDÔ ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð	)Ý Ñ(Ô(ˆHð ×'Ò'¨×(8Ò(8È%Ð(8Ñ(PÔ(PÑQÔQˆEØ”ð $ð $Ø×!Ò!Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $à”<¥7Ð*Ð*¨e¬l½iÐ.GÐ.GÐ.GÐGØˆ~Øœ­Ð0�Ø�WˆFð ”ið %ðØ ×/Ò/Ø ×(Ò(¸%Ð(Ñ@Ô@ñô �E�Eøõ $ð ð ð ð ×$Ò$ VÑ,Ô,Ð,Øð	øøøð
 ”Zð (ð (Ø×%Ò%Ñ'Ô'Ð'ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (à”|¥wÐ.Ð.Ð.Ð.Ø—’˜eÑ$Ô$Ð$ð ”ið %ð  $)ˆDÔ Ð ø 5ˆDÔ Ð(Ð(Ð(Ð(à�xŠxÐ7Ð7°Ð7Ñ7Ô7Ñ7Ô7ˆØð 	Ø—;’;‘=”=Ð àˆKsw   ˆ2²6¹6¾?F Á=BÂF ÂB"Â"F Â%B"Â&;F Ã")D ÄF Ä!D-Ä-
F Ä7EÅF ÅEÅF ÅEÅ /F Æ	F úIterator[str]c                ó   — d S r   r   ©r0   rE   s     r   Úget_iterzAssembler.get_iterÊ   s   € Ø@CÀr   úIterator[bytes]c                ó   — d S r   r   r`   s     r   ra   zAssembler.get_iterÍ   s   € ØCFÀ3r   úIterator[Data]c                ó   — d S r   r   r`   s     r   ra   zAssembler.get_iterÐ   s   € ØFIÀcr   c              #  ó  K  — | j         5  | j        rt          d¦  «        ‚d| _        ddd¦  «         n# 1 swxY w Y   |                      ¦   «         }| j         5  |                      ¦   «          ddd¦  «         n# 1 swxY w Y   |j        t          u s|j        t          u sJ ‚|€|j        t          u }|r1t          ¦   «         }| 	                    |j
        |j        ¦  «        V — n	|j
        V — |j        sŒ|                      ¦   «         }| j         5  |                      ¦   «          ddd¦  «         n# 1 swxY w Y   |j        t          u sJ ‚|r#| 	                    |j
        |j        ¦  «        V — n	|j
        V — |j        ¯Œd| _        dS )a©  
        Stream the next message.

        Iterating the return value of :meth:`get_iter` 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.

        rS   TNF)r(   r.   r   r>   rY   rZ   r   r   ÚUTF8DecoderrE   rV   r[   r   )r0   rE   r=   Údecoders       r   ra   zAssembler.get_iterÓ   sl  è è € ð2 ŒZð 	(ð 	(ØÔ#ð QÝ&Ð'OÑPÔPÐPØ#'ˆDÔ ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð ×#Ò#Ñ%Ô%ˆØŒZð 	 ð 	 Ø×ÒÑÔÐð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 àŒ|�wÐ&Ð&¨%¬,½)Ð*CÐ*CÐ*CÐCØˆ>Ø”\¥WÐ,ˆFØð 	Ý!‘m”mˆGØ—.’. ¤¨U¬YÑ7Ô7Ð7Ð7Ð7Ð7à”*ÐÐÐð ”)ð 	!Ø×'Ò'Ñ)Ô)ˆEØ”ð $ð $Ø×!Ò!Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $à”<¥7Ð*Ð*Ð*Ð*Øð !Ø—n’n U¤Z°´Ñ;Ô;Ð;Ð;Ð;Ð;à”jÐ Ð Ð ð ”)ð 	!ð  %ˆÔÐÐs0   Š4´8»8ÁA;Á;A?ÂA?ÄD3Ä3D7Ä:D7r=   c                óÎ   — | j         5  | j        rt          d¦  «        ‚| j                             |¦  «         |                      ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )z
        Add ``frame`` to the next message.

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

        r7   N)r(   r/   r;   r+   rB   Úmaybe_pause)r0   r=   s     r   rB   zAssembler.put  s¯   € ð ŒZð 	ð 	ØŒ{ð 9ÝÐ7Ñ8Ô8Ð8àŒK�OŠO˜EÑ"Ô"Ð"Ø×ÒÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˆAAÁAÁ!Ac                óÞ   — | j         €dS | j                             ¦   «         sJ ‚| 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)r   r(   Úlockedr+   Úqsizer-   r   ©r0   s    r   rj   zAssembler.maybe_pause*  su   € ð Œ9ÐØˆFàŒz× Ò Ñ"Ô"Ð"Ð"Ð"ð Œ;×ÒÑÔ ¤Ò*Ð*°4´;Ð*ØˆDŒKØ�JŠJ‰LŒLˆLˆLˆLð +Ð*Ð*Ð*r   c                óÞ   — | j         €dS | j                             ¦   «         sJ ‚| 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)r   r(   rl   r+   rm   r-   r!   rn   s    r   rY   zAssembler.maybe_resume7  su   € ð Œ8ÐØˆFàŒz× Ò Ñ"Ô"Ð"Ð"Ð"ð Œ;×ÒÑÔ $¤(Ò*Ð*¨t¬{Ð*ØˆDŒKØ�KŠK‰MŒMˆMˆMˆMð +Ð*Ð*Ð*r   c                ó  — | j         5  | j        r	 ddd¦  «         dS d| _        | j        r| j                             d¦  «         | j        rd| _        |                      ¦   «          ddd¦  «         dS # 1 swxY w Y   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`.

        NTF)r(   r/   r.   r+   rB   r-   r!   rn   s    r   ÚclosezAssembler.closeD  së   € ð ŒZð 	ð 	ØŒ{ð Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð ˆDŒKàÔ#ð &à”—’ Ñ%Ô%Ð%àŒ{ð à#�”Ø—’‘”�ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˆ	A5žA
A5Á5A9Á<A9)
r   r   r   r   r   r    r!   r    r"   r#   r   )r2   r3   r"   r   )r+   r?   r"   r#   )r2   r3   rE   rF   r"   rG   )r2   r3   rE   rJ   r"   rK   )NN)r2   r3   rE   rP   r"   r   )rE   rF   r"   r^   )rE   rJ   r"   rb   )rE   rP   r"   rd   )r=   r   r"   r#   )r"   r#   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r>   rD   r	   r9   ra   rB   rj   rY   rq   r   r   r   r   r      sÀ  € € € € € ðð ð   ØØ#/ <Ø$0 Lð$ð $ð $ð $ð $ðLð ð ð ð ð,'ð 'ð 'ð 'ð, ØKÐKÐKñ „XØKàØNÐNÐNñ „XØNàØUÐUÐUÐUñ „XØUàØXÐXÐXÐXñ „XØXàØXÐXÐXÐXñ „XØXðEð Eð Eð Eð EðN ØCÐCÐCñ „XØCàØFÐFÐFñ „XØFàØIÐIÐIÐIñ „XØIð<%ð <%ð <%ð <%ð <%ð|ð ð ð ð2ð ð ð ðð ð ð ðð ð ð ð ð r   )Ú
__future__r   Úcodecsr)   r&   Útypingr   r   r   r   r   r	   Ú
exceptionsr   r+   r   r   r   r   r   Úutilsr   Ú__all__Úgetincrementaldecoderrg   r   r   r   r   ú<module>r}      s  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gà )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð ˆ-€à*ˆfÔ*¨7Ñ3Ô3€ðFð Fð Fð Fð Fñ Fô Fð Fð Fð Fr   