Ë
    	°ëj–,  ã                  óB  — 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 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	gZ ej4                  d
«      Z eej:                  j=                  dd«      «      Z ed«      Z  G d„ dee    «      Z! G d„ d	«      Z"y)é    )ÚannotationsN)ÚAsyncIteratorÚSequence)ÚAnyÚCallableÚGenericÚLiteralÚTypeVarÚoverloadé   )ÚConcurrencyErrorÚTooManyFragments)ÚBINARYÚCONTÚTEXTÚFrame)ÚDataÚ	Assemblerzutf-8ÚWEBSOCKETS_MAX_FRAGMENTSÚ4096ÚTc                  óB   — 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	y)ÚSimpleQueuez…
    Simplified version of :class:`asyncio.Queue`.

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

    c                óv   — t        j                  «       | _        d | _        t	        j
                  «       | _        y ©N)ÚasyncioÚget_running_loopÚloopÚ
get_waiterÚcollectionsÚdequeÚqueue©Úselfs    úh/home/oem/CyberBrain26-unified/dev-env/.venv/lib/python3.12/site-packages/websockets/asyncio/messages.pyÚ__init__zSimpleQueue.__init__    s)   € Ü×,Ñ,Ó.ˆŒ	Ø7;ˆŒÜ+6×+<Ñ+<Ó+>ˆ�
ó    c                ó,   — t        | j                  «      S r   )Úlenr"   r#   s    r%   Ú__len__zSimpleQueue.__len__%   s   € Ü�4—:‘:‹Ðr'   c                óÀ   — | j                   j                  |«       | j                  �7| j                  j                  «       s| j                  j	                  d«       yyy)zPut an item into the queue.N)r"   Úappendr   ÚdoneÚ
set_result)r$   Úitems     r%   ÚputzSimpleQueue.put(   sH   € à�
‰
×Ñ˜$ÔØ�?‰?Ð&¨t¯©×/CÑ/CÔ/EØ�O‰O×&Ñ& tÕ,ð 0FÐ&r'   c              ƒ  ó�  K  — | j                   su|st        d«      ‚| j                  �J d«       ‚| j                  j	                  «       | _        	 | j                  ƒ d{  –—†  | j                  j                  «        d| _        | j                   j                  «       S 7 Œ?# | j                  j                  «        d| _        w xY w­w)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$   Úblocks     r%   ÚgetzSimpleQueue.get.   sŸ   è ø€ à�zŠzÙÜÐ7Ó8Ð8Ø—?‘?Ð*ÐLÐ,LÓLÐ*Ø"Ÿi™i×5Ñ5Ó7ˆDŒOð'Ø—o‘o×%Ð%à—‘×&Ñ&Ô(Ø"&�”Ø�z‰z×!Ñ!Ó#Ð#ð	 &ùà—‘×&Ñ&Ô(Ø"&�•üs0   ‚ACÁB  ÁBÁB  Á#;CÂB  Â #CÃCc                ór   — | j                   �J d«       ‚| j                  j                  t        |«      «       y)z)Put back items at the front of the queue.Nz(cannot put_back() while get() is running)r   r"   Ú
extendleftÚreversed)r$   Úitemss     r%   Úput_backzSimpleQueue.put_back<   s.   € à�‰Ð&ÐRÐ(RÓRÐ&Ø�
‰
×Ñœh u›oÕ.r'   c                óœ   — | j                   �@| j                   j                  «       s%| j                   j                  t        d«      «       yyy)z8Close the queue, raising EOFError in get() if necessary.Nr2   )r   r-   Úset_exceptionr3   r#   s    r%   ÚabortzSimpleQueue.abortA   s<   € à�?‰?Ð&¨t¯©×/CÑ/CÔ/EØ�O‰O×)Ñ)¬(Ð3KÓ*LÕMð 0FÐ&r'   N©ÚreturnÚNone)rB   Úint)r/   r   rB   rC   )T)r7   ÚboolrB   r   )r<   zSequence[T]rB   rC   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r*   r0   r8   r=   r@   © r'   r%   r   r      s&   „ ñó?ó
ó-ô$ó/ô
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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 r   rJ   rJ   r'   r%   ú<lambda>zAssembler.<lambda>Z   ó   � r'   c                  ó   — y r   rJ   rJ   r'   r%   rM   zAssembler.<lambda>[   rN   r'   c                óò   — t        «       | _        |�|€|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)
r   ÚframesÚ
ValueErrorÚhighÚlowÚpauseÚresumeÚpausedÚget_in_progressÚclosed)r$   rT   rU   rV   rW   s        r%   r&   zAssembler.__init__V   sœ   € ô +6«-ˆŒð Ð  Ø˜!‘)ˆCØˆ<˜C˜OØ˜‘7ˆDØÐ  Ø�QŠwÜ Ð!HÓIÐIØ�cŠzÜ Ð!LÓMÐMØ" CÐˆŒ	�4”8ØˆŒ
ØˆŒØˆŒð  %ˆÔð ˆ�r'   c              ƒ  ó   K  — y ­wr   rJ   ©r$   Údecodes     r%   r8   zAssembler.getx   s	   è ø€ Ø7:ùó   ‚c              ƒ  ó   K  — y ­wr   rJ   r\   s     r%   r8   zAssembler.get{   s	   è ø€ Ø:=ùr^   c              ƒ  ó   K  — y ­wr   rJ   r\   s     r%   r8   zAssembler.get~   s	   è ø€ Ø=@ùr^   c              ƒ  óh  K  — | j                   rt        d«      ‚d| _         	 | j                  j                  | j                   «      ƒ d{  –—† }| j                  «        |j                  t        u s|j                  t        u sJ ‚|€|j                  t        u }|g}|j                  s’	 | j                  j                  | j                   «      ƒ d{  –—† }| j                  «        |j                  t        u sJ ‚t        |«      t        k\  rt!        t        «      ‚|j#                  |«       |j                  sŒ’d| _         dj%                  d„ |D «       «      }|r|j'                  «       S |S 7 �Œ#7 Œ�# t        j                  $ r | j                  j                  |«       ‚ w xY w# d| _         w xY w­w)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  ó4   K  — | ]  }|j                   –— Œ y ­wr   )Údata)Ú.0Úframes     r%   ú	<genexpr>z Assembler.get.<locals>.<genexpr>¼   s   è ø€ Ò7 u˜Ÿ
�
Ñ7ùs   ‚)rY   r   rR   r8   rZ   Úmaybe_resumeÚopcoder   r   Úfinr   ÚCancelledErrorr=   r   r)   ÚMAX_FRAGMENTSr   r,   Újoinr]   )r$   r]   rf   rR   rd   s        r%   r8   zAssembler.get�   st  è ø€ ð, ×ÒÜ"Ð#KÓLÐLØ#ˆÔð
	)àŸ+™+Ÿ/™/¨d¯k©k¨/Ó:×:ˆEØ×ÑÔØ—<‘<¤4Ñ'¨5¯<©<¼6Ñ+AÐAÐAØˆ~ØŸ™¬Ð-�Ø�WˆFð —i’iðØ"&§+¡+§/¡/°d·k±k°/Ó"B×B�Eð ×!Ñ!Ô#Ø—|‘|¤tÑ+Ð+Ð+Ü�v“;¤-Ò/Ü*¬=Ó9Ð9Ø—‘˜eÔ$ð —i“ið" $)ˆDÔ ð �x‰xÑ7°Ô7Ó7ˆÙØ—;‘;“=Ð àˆKðA ;ùð CùÜ×-Ñ-ò ð
 —K‘K×(Ñ(¨Ô0Øðûð $)ˆDÕ üsZ   ‚F2¢)F& ÁE.ÁAF& Â*)E3 ÃE1ÃE3 ÃA"F& Ä;3F2Å.F& Å1E3 Å30F#Æ#F& Æ&	F/Æ/F2c                 ó   — y r   rJ   r\   s     r%   Úget_iterzAssembler.get_iterÂ   s   € ØEHr'   c                 ó   — y r   rJ   r\   s     r%   ro   zAssembler.get_iterÅ   s   € ØHKr'   c                 ó   — y r   rJ   r\   s     r%   ro   zAssembler.get_iterÈ   s   € ØKNr'   c               óŠ  K  — | j                   rt        d«      ‚d| _         	 | j                  j                  | j                   «      ƒ d{  –—† }| j                  «        |j                  t        u s|j                  t        u sJ ‚|€|j                  t        u }|r4t        «       }|j                  |j                  |j                  «      ­–— nt        |j                  «      ­–— |j                  s£| j                  j                  | j                   «      ƒ d{  –—† }| j                  «        |j                  t         u sJ ‚|r*j                  |j                  |j                  «      ­–— nt        |j                  «      ­–— |j                  sŒ£d| _         y7 �ŒT# t
        j                  $ r	 d| _         ‚ w xY w7 Œ£­w)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.

        rb   TNF)rY   r   rR   r8   rZ   r   rk   rh   ri   r   r   ÚUTF8Decoderr]   rd   rj   Úbytesr   )r$   r]   rf   Údecoders       r%   ro   zAssembler.get_iterË   se  è ø€ ð2 ×ÒÜ"Ð#KÓLÐLØ#ˆÔð	ØŸ+™+Ÿ/™/¨d¯k©k¨/Ó:×:ˆEð 	×ÑÔØ�|‰|œtÑ# u§|¡|´vÑ'=Ð=Ð=Øˆ>Ø—\‘\¤TÐ)ˆFÙÜ!“mˆGØ—.‘. §¡¨U¯Y©YÓ7Ô7ô ˜Ÿ
™
Ó#Ó#ð —)’)ð
 Ÿ+™+Ÿ/™/¨d¯k©k¨/Ó:×:ˆEØ×ÑÔØ—<‘<¤4Ñ'Ð'Ð'ÙØ—n‘n U§Z¡Z°·±Ó;Ô;ô ˜EŸJ™JÓ'Ó'ð —)“)ð  %ˆÕð= ;úÜ×%Ñ%ò 	Ø#(ˆDÔ Øð	úð( ;úsB   ‚G¢)F" ÁFÁF" ÁCGÄGÄA8GÆGÆF" Æ"F>Æ>Gc                óˆ   — | j                   rt        d«      ‚| j                  j                  |«       | j	                  «        y)z
        Add ``frame`` to the next message.

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

        r2   N)rZ   r3   rR   r0   Úmaybe_pause)r$   rf   s     r%   r0   zAssembler.put  s3   € ð �;Š;ÜÐ3Ó4Ð4à�‰�‰˜ÔØ×ÑÕr'   c                ó¬   — | j                   €yt        | j                  «      | j                   kD  r%| j                  sd| _        | j	                  «        yyy)z7Pause the writer if queue is above the high water mark.NT)rT   r)   rR   rX   rV   r#   s    r%   rw   zAssembler.maybe_pause  sF   € ð �9‰9ÐØô ˆt�{‰{Ó˜dŸi™iÒ'°·²ØˆDŒKØ�J‰J�Lð 1<Ð'r'   c                ó¬   — | j                   €yt        | j                  «      | j                   k  r%| j                  rd| _        | j	                  «        yyy)z7Resume the writer if queue is below the low water mark.NF)rU   r)   rR   rX   rW   r#   s    r%   rh   zAssembler.maybe_resume)  sF   € ð �8‰8ÐØô ˆt�{‰{Ó˜tŸx™xÒ'¨D¯KªKØˆDŒKØ�K‰K�Mð -8Ð'r'   c                ó`   — | j                   ryd| _         | j                  j                  «        y)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)rZ   rR   r@   r#   s    r%   ÚclosezAssembler.close4  s'   € ð �;Š;ØàˆŒð 	�‰×ÑÕr'   )
rT   ú
int | NonerU   r|   rV   úCallable[[], Any]rW   r}   rB   rC   )r]   úLiteral[True]rB   Ústr)r]   úLiteral[False]rB   rt   r   )r]   úbool | NonerB   r   )r]   r~   rB   zAsyncIterator[str])r]   r€   rB   zAsyncIterator[bytes])r]   r�   rB   zAsyncIterator[Data])rf   r   rB   rC   rA   )rF   rG   rH   rI   r&   r   r8   ro   r0   rw   rh   r{   rJ   r'   r%   r   r   G   sÄ   „ ñð   ØÙ#/Ù$0ð àð ð ð ð !ð	 ð
 "ð ð 
ó ðD Ú:ó Ø:àÚ=ó Ø=àÛ@ó Ø@ô?ðB ÚHó ØHàÚKó ØKàÛNó ØNôC%óJó	ó	ôr'   )#Ú
__future__r   r   Úcodecsr    ÚosÚcollections.abcr   r   Útypingr   r   r   r	   r
   r   Ú
exceptionsr   r   rR   r   r   r   r   r   Ú__all__Úgetincrementaldecoderrs   rD   Úenvironr8   rl   r   r   r   rJ   r'   r%   ú<module>r‹      s†   ðÝ "ã Û Û Û 	ß 3ß E× Eç ;ß .Ó .Ý ð ˆ-€à*ˆf×*Ñ*¨7Ó3€á�B—J‘J—N‘NÐ#=¸vÓFÓG€áˆCƒL€ô,N�'˜!‘*ô ,N÷^{ò {r'   