Ë
    Õ±1hñ*  ã                  óò   — 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j0                  d
«      Z ed«      Z G d„ dee   «      Z G d„ d	«      Zy)é    )ÚannotationsN)ÚAsyncIteratorÚIterable)ÚAnyÚCallableÚGenericÚLiteralÚTypeVarÚoverloadé   )ÚConcurrencyError)Ú	OP_BINARYÚOP_CONTÚOP_TEXTÚFrame)ÚDataÚ	Assemblerzutf-8Ú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    úY/var/www/skyplay_api_hub/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 without waiting.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                ó†   — | j                   �J d«       ‚| j                  rJ d«       ‚| j                  j                  |«       y)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!   Úitemss     r"   ÚresetzSimpleQueue.reset9   s<   € à�‰Ð&ÐOÐ(OÓOÐ&Ø—:’:ÐGÐGÓGˆ~Ø�
‰
×Ñ˜%Õ r$   c                óœ   — | j                   �@| j                   j                  «       s%| j                   j                  t        d«      «       yyy)z8Close the queue, raising EOFError in get() if necessary.Nr/   )r   r*   Úset_exceptionr0   r    s    r"   ÚabortzSimpleQueue.abort?   s<   € à�?‰?Ð&¨t¯©×/CÑ/CÔ/EØ�O‰O×)Ñ)¬(Ð3KÓ*LÕMð 0FÐ&r$   N©ÚreturnÚNone)r>   Úint)r,   r   r>   r?   )T)r4   Úboolr>   r   )r8   zIterable[T]r>   r?   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r'   r-   r5   r9   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   rF   rF   r$   r"   ú<lambda>zAssembler.<lambda>Y   ó   � r$   c                  ó   — y r   rF   rF   r$   r"   rI   zAssembler.<lambda>Z   rJ   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!   rP   rQ   rR   rS   s        r"   r#   zAssembler.__init__U   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   rF   ©r!   Údecodes     r"   r5   zAssembler.getw   s	   è ø€ Ø7:ùó   ‚c              ƒ  ó   K  — y ­wr   rF   rX   s     r"   r5   zAssembler.getz   s	   è ø€ Ø:=ùrZ   c              ƒ  ó   K  — y ­wr   rF   rX   s     r"   r5   zAssembler.get}   s	   è ø€ Ø=@ùrZ   c              ƒ  ó&  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                  sq	 | j                  j                  | j                   «      ƒ d{  –—† }| j                  «        |j                  t        u sJ ‚|j                  |«       |j                  sŒqd| _         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   ‚)rU   r   rN   r5   rV   Úmaybe_resumeÚopcoder   r   Úfinr   ÚCancelledErrorr9   r   r)   ÚjoinrY   )r!   rY   rb   rN   r`   s        r"   r5   zAssembler.get€   sZ  è ø€ ð, ×ÒÜ"Ð#KÓLÐLØ#ˆÔð
	)àŸ+™+Ÿ/™/¨d¯k©k¨/Ó:×:ˆEØ×ÑÔØ—<‘<¤7Ñ*¨e¯l©l¼iÑ.GÐGÐGØˆ~ØŸ™¬Ð0�Ø�WˆFð —i’iðØ"&§+¡+§/¡/°d·k±k°/Ó"B×B�Eð ×!Ñ!Ô#Ø—|‘|¤wÑ.Ð.Ð.Ø—‘˜eÔ$ð —i“ið $)ˆDÔ à�x‰xÑ7°Ô7Ó7ˆÙØ—;‘;“=Ð àˆKð7 ;ùð CùÜ×-Ñ-ò ð —K‘K×%Ñ% fÔ-Øð	ûð $)ˆDÕ üsZ   ‚F¢)F ÁEÁAF Â*)E ÃEÃE ÃAF Ä3FÅF ÅE Å0FÆF Æ	FÆFc                 ó   — y r   rF   rX   s     r"   Úget_iterzAssembler.get_iter¼   s   € ØEHr$   c                 ó   — y r   rF   rX   s     r"   rj   zAssembler.get_iter¿   s   € ØHKr$   c                 ó   — y r   rF   rX   s     r"   rj   zAssembler.get_iterÂ   s   € ØKNr$   c               óf  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|j                  ­–— |j                  sš| j                  j                  | j                   «      ƒ d{  –—† }| j                  «        |j                  t        u sJ ‚|r*j                  |j                  |j                  «      ­–— n|j                  ­–— |j                  sŒšd| _         y7 �ŒB# 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.

        r^   TNF)rU   r   rN   r5   rV   r   rg   rd   re   r   r   ÚUTF8DecoderrY   r`   rf   r   )r!   rY   rb   Údecoders       r"   rj   zAssembler.get_iterÅ   sW  è ø€ ð2 ×ÒÜ"Ð#KÓLÐLØ#ˆÔð	ØŸ+™+Ÿ/™/¨d¯k©k¨/Ó:×:ˆEð 	×ÑÔØ�|‰|œwÑ&¨%¯,©,¼)Ñ*CÐCÐCØˆ>Ø—\‘\¤WÐ,ˆFÙÜ!“mˆGØ—.‘. §¡¨U¯Y©YÓ7Ô7à—*‘*Óð —)’)ð
 Ÿ+™+Ÿ/™/¨d¯k©k¨/Ó:×:ˆEØ×ÑÔØ—<‘<¤7Ñ*Ð*Ð*ÙØ—n‘n U§Z¡Z°·±Ó;Ô;à—j‘jÓ ð —)“)ð  %ˆÕð9 ;úÜ×%Ñ%ò 	Ø#(ˆDÔ Øð	úð& ;úsB   ‚F1¢)F ÁFÁF ÁCF1ÄF/ÄA/F1ÆF1ÆF ÆF,Æ,F1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.

        r/   N)rV   r0   rN   r-   Úmaybe_pause)r!   rb   s     r"   r-   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)rP   r&   rN   rT   rR   r    s    r"   rq   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)rQ   r&   rN   rT   rS   r    s    r"   rd   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)rV   rN   r<   r    s    r"   ÚclosezAssembler.close,  s'   € ð �;Š;ØàˆŒð 	�‰×ÑÕr$   )
rP   ú
int | NonerQ   rv   rR   úCallable[[], Any]rS   rw   r>   r?   )rY   úLiteral[True]r>   Ústr)rY   úLiteral[False]r>   Úbytesr   )rY   úbool | Noner>   r   )rY   rx   r>   zAsyncIterator[str])rY   rz   r>   zAsyncIterator[bytes])rY   r|   r>   zAsyncIterator[Data])rb   r   r>   r?   r=   )rB   rC   rD   rE   r#   r   r5   rj   r-   rq   rd   ru   rF   r$   r"   r   r   E   sÄ   „ ñð"  ØÙ#/Ù$0ð àð ð ð ð !ð	 ð
 "ð ð 
ó ðD Ú:ó Ø:àÚ=ó Ø=àÛ@ó Ø@ô:ðx ÚHó ØHàÚKó ØKàÛNó ØNôA%óFó	ó	ôr$   )Ú
__future__r   r   Úcodecsr   Úcollections.abcr   r   Útypingr   r   r   r	   r
   r   Ú
exceptionsr   rN   r   r   r   r   r   Ú__all__Úgetincrementaldecoderrn   r   r   r   rF   r$   r"   ú<module>r„      si   ðÝ "ã Û Û ß 3ß E× Eå )ß 7Ó 7Ý ð ˆ-€à*ˆf×*Ñ*¨7Ó3€áˆCƒL€ô-N�'˜!‘*ô -N÷`uò ur$   