Ë
    	°ëjê2  ã                  ó  — d dl mZ d dl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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j2                  d«      Z eej8                  j;                  dd«      «      Z G d„ d
«      Zy)é    )ÚannotationsN)ÚAnyÚCallableÚIterableÚIteratorÚLiteralÚoverloadé   )ÚConcurrencyErrorÚTooManyFragments)ÚBINARYÚCONTÚTEXTÚFrame)ÚDataé   )ÚDeadlineÚ	Assemblerzutf-8ÚWEBSOCKETS_MAX_FRAGMENTSÚ4096c                  ó  — e Zd ZdZddd„ d„ f	 	 	 	 	 	 	 	 	 dd„Zddd„Zdd„Zedd„«       Zedd	„«       Zeddd
„«       Zed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y)#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                  ó   — y ©N© r   ó    úe/home/oem/CyberBrain26-unified/dev-env/.venv/lib/python3.12/site-packages/websockets/sync/messages.pyú<lambda>zAssembler.<lambda>)   ó   � r   c                  ó   — y r   r   r   r   r   r   zAssembler.<lambda>*   r   r   c                ó8  — t        j                  «       | _        t        j                  «       | _        |�|€|dz  }|€|�|dz  }|�"|� |dk  rt        d«      ‚||k  rt        d«      ‚||c| _        | _        || _	        || _
        d| _        d| _        d| _        y )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Ú
ValueErrorÚhighÚlowÚpauseÚresumeÚpausedÚget_in_progressÚclosed)Úselfr)   r*   r+   r,   s        r   Ú__init__zAssembler.__init__%   s³   € ô —^‘^Ó%ˆŒ
ô 8=×7HÑ7HÓ7JˆŒð Ð  Ø˜!‘)ˆCØˆ<˜C˜OØ˜‘7ˆDØÐ  Ø�QŠwÜ Ð!HÓIÐIØ�cŠzÜ Ð!LÓMÐMØ" CÐˆŒ	�4”8ØˆŒ
ØˆŒØˆŒð  %ˆÔð ˆ�r   c                óŽ  — | j                   r	 | j                  j                  d¬«      }nB	 |�"|dk  r| j                  j                  d¬«      }n| j                  j                  d|¬«      }|€t        d«      ‚|S # t        j                  $ r t        d«      d ‚w xY w# t        j                  $ r t        d|d›d	�«      d ‚w xY w)
NF©Úblockústream of frames endedr   T)r4   Útimeoutztimed out in z.1fÚs)r/   r'   Úgetr%   ÚEmptyÚEOFErrorÚTimeoutError)r0   r6   Úframes      r   Úget_next_framezAssembler.get_next_frameK   sÎ   € ð �;Š;ðCØŸ™Ÿ™¨e˜Ó4‘ðMð Ð&¨7°aª<Ø ŸK™KŸO™O°%˜OÓ8‘Eà ŸK™KŸO™O°$À˜OÓH�Eð ˆ=ÜÐ3Ó4Ð4Øˆøô —;‘;ò CÜÐ7Ó8¸dÐBðCûô —;‘;ò MÜ" ]°7¸3°-¸qÐ#AÓBÈÐLðMús   ŽA< ¬AB Á< BÂ%Cc                ób  — | j                   5  g }	 	 |j                  | j                  j                  d¬«      «       Œ,# t        j
                  $ r Y nw xY w|D ]  }| j                  j                  |«       Œ |D ]  }| j                  j                  |«       Œ 	 d d d «       y # 1 sw Y   y xY w)NFr3   )r$   Úappendr'   r8   r%   r9   Úput)r0   r'   Úqueuedr<   s       r   Úreset_queuezAssembler.reset_queuea   s£   € ð �Z‰Zñ 	'ØˆFðØØ—M‘M $§+¡+§/¡/¸ /Ó">Ô?ð øä—;‘;ò Ùðúàò '�Ø—‘—‘ Õ&ð'ð  ò '�Ø—‘—‘ Õ&ñ'÷	'÷ 	'ñ 	'ús'   �B%‘->¾AÁB%ÁAÁAB%Â%B.c                 ó   — y r   r   ©r0   r6   Údecodes      r   r8   zAssembler.getw   s   € ØHKr   c                 ó   — y r   r   rD   s      r   r8   zAssembler.getz   s   € ØKNr   c                ó   — y r   r   rD   s      r   r8   zAssembler.get}   s   € ØRUr   c                ó   — y r   r   rD   s      r   r8   zAssembler.get€   ó   € ØUXr   c                 ó   — y r   r   rD   s      r   r8   zAssembler.getƒ   rI   r   c                óÚ  — | j                   5  | j                  rt        d«      ‚d| _        ddd«       	 t        |«      }| j	                  |j                  d¬«      «      }| j                   5  | j                  «        ddd«       |j                  t        u s|j                  t        u sJ ‚|€|j                  t        u }|g}|j                  sš	 | j	                  |j                  d¬«      «      }| j                   5  | j                  «        ddd«       |j                  t        u sJ ‚t        |«      t        k\  rt!        t        «      ‚|j#                  |«       |j                  sŒšd| _        dj%                  d„ |D «       «      }|r|j'                  «       S |S # 1 sw Y   �ŒrxY w# 1 sw Y   �Œ-xY w# t        $ r | j                  |«       ‚ w xY w# 1 sw Y   ŒÈxY w# d| _        w xY w)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  ó4   K  — | ]  }|j                   –— Œ y ­wr   )Údata)Ú.0r<   s     r   ú	<genexpr>z Assembler.get.<locals>.<genexpr>Ê   s   è ø€ Ò7 u˜Ÿ
�
Ñ7ùs   ‚)r$   r.   r   r   r=   r6   Úmaybe_resumeÚopcoder   r   Úfinr;   rB   r   ÚlenÚMAX_FRAGMENTSr   r?   ÚjoinrE   )r0   r6   rE   Údeadliner<   r'   rO   s          r   r8   zAssembler.get†   sÅ  € ð4 �Z‰Zñ 	(Ø×#Ò#Ü&Ð'OÓPÐPØ#'ˆDÔ ÷	(ð	)Ü Ó(ˆHð ×'Ñ'¨×(8Ñ(8È%Ð(8Ó(PÓQˆEØ—‘ñ $Ø×!Ñ!Ô#÷$à—<‘<¤4Ñ'¨5¯<©<¼6Ñ+AÐAÐAØˆ~ØŸ™¬Ð-�Ø�WˆFð —i’iðØ ×/Ñ/Ø ×(Ñ(¸%Ð(Ó@ó�Eð —Z‘Zñ (Ø×%Ñ%Ô'÷(à—|‘|¤tÑ+Ð+Ð+Ü�v“;¤-Ò/Ü*¬=Ó9Ð9Ø—‘˜eÔ$ð —i“ið$ $)ˆDÔ ð �x‰xÑ7°Ô7Ó7ˆÙØ—;‘;“=Ð àˆK÷]	(ñ 	(ú÷$ñ $ûô $ò ð ×$Ñ$ VÔ,Øð	ú÷
(ð (ûð $)ˆDÕ ús`   �Fµ8G! Á-F)Á>AG! Ã!F6 Ã1G! Ã=GÄAG! ÆF&Æ)F3Æ.G! Æ6GÇG! ÇGÇG! Ç!	G*c                 ó   — y r   r   ©r0   rE   s     r   Úget_iterzAssembler.get_iterÐ   s   € Ø@Cr   c                 ó   — y r   r   rZ   s     r   r[   zAssembler.get_iterÓ   s   € ØCFr   c                 ó   — y r   r   rZ   s     r   r[   zAssembler.get_iterÖ   s   € ØFIr   c              #  óŠ  K  — | j                   5  | j                  rt        d«      ‚d| _        ddd«       | j                  «       }| j                   5  | j	                  «        ddd«       |j
                  t        u s|j
                  t        u sJ ‚|€|j
                  t        u }|r3t        «       }|j                  |j                  |j                  «      –— nt        |j                  «      –— |j                  s˜| j                  «       }| j                   5  | j	                  «        ddd«       |j
                  t        u sJ ‚|r)j                  |j                  |j                  «      –— nt        |j                  «      –— |j                  sŒ˜d| _        y# 1 sw Y   �ŒqxY w# 1 sw Y   �ŒIxY w# 1 sw Y   ŒŽxY w­w)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.

        rL   TNF)r$   r.   r   r=   rR   rS   r   r   ÚUTF8DecoderrE   rO   rT   Úbytesr   )r0   rE   r<   Údecoders       r   r[   zAssembler.get_iterÙ   sn  è ø€ ð2 �Z‰Zñ 	(Ø×#Ò#Ü&Ð'OÓPÐPØ#'ˆDÔ ÷	(ð ×#Ñ#Ó%ˆØ�Z‰Zñ 	 Ø×ÑÔ÷	 à�|‰|œtÑ# u§|¡|´vÑ'=Ð=Ð=Øˆ>Ø—\‘\¤TÐ)ˆFÙÜ!“mˆGØ—.‘. §¡¨U¯Y©YÓ7Ó7ô ˜Ÿ
™
Ó#Ò#ð —)’)Ø×'Ñ'Ó)ˆEØ—‘ñ $Ø×!Ñ!Ô#÷$à—<‘<¤4Ñ'Ð'Ð'ÙØ—n‘n U§Z¡Z°·±Ó;Ó;ô ˜EŸJ™JÓ'Ò'ð —)“)ð  %ˆÕ÷K	(ñ 	(ú÷	 ñ 	 ú÷$ð $üsS   ‚G�F®$GÁF*Á#B6GÄF7Ä*A*GÆGÆF'Æ"GÆ*F4Æ/GÆ7G Æ<Gc                óÊ   — | j                   5  | j                  rt        d«      ‚| j                  j	                  |«       | j                  «        ddd«       y# 1 sw Y   yxY w)z
        Add ``frame`` to the next message.

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

        r5   N)r$   r/   r:   r'   r@   Úmaybe_pause)r0   r<   s     r   r@   zAssembler.put  sO   € ð �Z‰Zñ 	Ø�{Š{ÜÐ7Ó8Ð8à�K‰K�O‰O˜EÔ"Ø×ÑÔ÷	÷ 	ñ 	ús   �AAÁA"c                óî   — | j                   €y| j                  j                  «       sJ ‚| j                  j	                  «       | j                   kD  r%| j
                  sd| _        | j                  «        yyy)z7Pause the writer if queue is above the high water mark.NT)r)   r$   Úlockedr'   Úqsizer-   r+   ©r0   s    r   rc   zAssembler.maybe_pause2  s`   € ð �9‰9ÐØà�z‰z× Ñ Ô"Ð"Ð"ð �;‰;×ÑÓ §¡Ò*°4·;²;ØˆDŒKØ�J‰J�Lð 4?Ð*r   c                óî   — | j                   €y| j                  j                  «       sJ ‚| j                  j	                  «       | j                   k  r%| j
                  rd| _        | j                  «        yyy)z7Resume the writer if queue is below the low water mark.NF)r*   r$   re   r'   rf   r-   r,   rg   s    r   rR   zAssembler.maybe_resume?  s`   € ð �8‰8ÐØà�z‰z× Ñ Ô"Ð"Ð"ð �;‰;×ÑÓ $§(¡(Ò*¨t¯{ª{ØˆDŒKØ�K‰K�Mð 0;Ð*r   c                ó  — | j                   5  | j                  r
	 ddd«       yd| _        | j                  r| j                  j	                  d«       | j
                  rd| _        | j                  «        ddd«       y# 1 sw Y   yxY w)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'   r@   r-   r,   rg   s    r   ÚclosezAssembler.closeL  sm   € ð �Z‰Zñ 	Ø�{Š{Ø÷	ð 	ð ˆDŒKà×#Ò#à—‘—‘ Ô%à�{Š{à#�”Ø—‘”÷	÷ 	ñ 	ús   �A>¤AA>Á>B)
r)   ú
int | Noner*   rk   r+   úCallable[[], Any]r,   rl   ÚreturnÚNoner   )r6   úfloat | Nonerm   r   )r'   zIterable[Frame]rm   rn   )r6   ro   rE   úLiteral[True]rm   Ústr)r6   ro   rE   úLiteral[False]rm   r`   )NN)r6   ro   rE   úbool | Nonerm   r   )rE   rp   rm   zIterator[str])rE   rr   rm   zIterator[bytes])rE   rs   rm   zIterator[Data])r<   r   rm   rn   )rm   rn   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r1   r=   rB   r	   r8   r[   r@   rc   rR   rj   r   r   r   r   r      sê   „ ñð   ØÙ#/Ù$0ð$àð$ð ð$ð !ð	$ð
 "ð$ð 
ó$ôLó,'ð, ÚKó ØKàÚNó ØNàÛUó ØUàÛXó ØXàÛXó ØXôHðT ÚCó ØCàÚFó ØFàÛIó ØIô>%ó@ó2óôr   ) Ú
__future__r   ÚcodecsÚosr%   r"   Útypingr   r   r   r   r   r	   Ú
exceptionsr   r   r'   r   r   r   r   r   Úutilsr   Ú__all__Úgetincrementaldecoderr_   ÚintÚenvironr8   rV   r   r   r   r   ú<module>r‚      sj   ðÝ "ã Û 	Û Û ß G× Gç ;ß .Ó .Ý Ý ð ˆ-€à*ˆf×*Ñ*¨7Ó3€á�B—J‘J—N‘NÐ#=¸vÓFÓG€÷Kò Kr   