ó
    öÞ j:2  ã                  óÂ   • S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
Jr  SSKJr  SSKJrJrJrJr  SSKJr  SS	KJr  S
/r\R.                  " S5      r " S S
5      rg)é    )ÚannotationsN)ÚAnyÚCallableÚIterableÚIteratorÚLiteralÚoverloadé   )ÚConcurrencyError)Ú	OP_BINARYÚOP_CONTÚOP_TEXTÚFrame)ÚDataé   )ÚDeadlineÚ	Assemblerzutf-8c                  óP  • \ rS rSrSrSSS S 4         SS jjrSSS jjrSS jr\SS	 j5       r	\SS
 j5       r	\SSS jj5       r	\SSS jj5       r	\SSS jj5       r	SSS jjr	\S S j5       r
\S!S j5       r
\SS"S jj5       r
SS"S jjr
S#S jrS$S jrS$S jrS$S jrSrg)%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                 ó   • g ©N© r   ó    ÚR/var/www/html/gaurav/venv/lib/python3.13/site-packages/websockets/sync/messages.pyÚ<lambda>ÚAssembler.<lambda>&   s   € ¨4r   c                 ó   • g r   r   r   r   r   r   r   '   s   € ¨Dr   c                óD  • [         R                  " 5       U l        [        R                  " 5       U l        Ub  Uc  US-  nUc  Ub  US-  nUb$  Ub!  US:  a  [        S5      eX:  a  [        S5      eXsU l        U l        X0l	        X@l
        SU l        SU l        SU l        g )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__ÚAssembler.__init__"   s«   € ô —^’^Ó%ˆŒ
ô 8=×7HÒ7HÓ7JˆŒð Ñ ¡Ø˜!‘)ˆCØ‰<˜C™OØ˜‘7ˆDØÑ ¡Ø�Q‹wÜ Ð!HÓIÐIØ‹zÜ Ð!LÓMÐMØ"ÐˆŒ	�4”8ØŒ
ØŒØˆŒð  %ˆÔð ˆ�r   c                ó’  • U R                   (       a   U R                  R                  SS9nO? Ub   US::  a  U R                  R                  SS9nOU R                  R                  SUS9n Uc  [        S5      eU$ ! [        R                   a    [        S5      S ef = f! [        R                   a    [        SUS S	35      S ef = f)
NF©Úblockústream of frames endedr   T)r3   Útimeoutztimed out in z.1fÚs)r-   r%   Úgetr#   ÚEmptyÚEOFErrorÚTimeoutError)r.   r5   Úframes      r   Úget_next_frameÚAssembler.get_next_frameH   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< ®"B  ÁB  Á<!BÂ &Cc                óp  • U R                      / n  UR                  U R                  R                  SS95        M*  ! [        R
                   a     Of = fU H  nU R                  R                  U5        M      U H  nU R                  R                  U5        M      S S S 5        g ! , (       d  f       g = f)NFr2   )r"   Úappendr%   r7   r#   r8   Úput)r.   r%   Úqueuedr;   s       r   Úreset_queueÚAssembler.reset_queue^   sŽ   € ð �Z‹ZØˆFðØØ—M‘M $§+¡+§/¡/¸ /Ð">Ô?ñ øä—;‘;ó Ùðúã�Ø—‘—‘ Ö&ñ  ó  �Ø—‘—‘ Ö&ñ  ÷ �ZŽZús'   �B'‘+<¼AÁB'ÁAÁAB'Â'
B5c                ó   • g r   r   ©r.   r5   Údecodes      r   r7   ÚAssembler.gett   s   € ØHKr   c                ó   • g r   r   rE   s      r   r7   rG   w   s   € ØKNr   c               ó   • g r   r   rE   s      r   r7   rG   z   s   € ØRUr   c               ó   • g r   r   rE   s      r   r7   rG   }   ó   € ØUXr   c                ó   • g r   r   rE   s      r   r7   rG   €   rK   r   c                óÞ  • U R                      U R                  (       a  [        S5      eSU l        SSS5         [        U5      nU R	                  UR                  SS95      nU R                      U R                  5         SSS5        UR                  [        L d  UR                  [        L d   eUc  UR                  [        L nU/nUR                  (       d}   U R	                  UR                  SS95      nU R                      U R                  5         SSS5        UR                  [        L d   eUR                  U5        UR                  (       d  M}  SU l        SR                  S U 5       5      nU(       a  UR!                  5       $ U$ ! , (       d  f       GNd= f! , (       d  f       GN'= f! [         a    U R                  U5        e f = f! , (       d  f       NÃ= f! SU l        f = f)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  ó6   #   • U H  oR                   v •  M     g 7fr   )Údata)Ú.0r;   s     r   Ú	<genexpr>Ú Assembler.get.<locals>.<genexpr>Å   s   é € Ð7± uŸ
ž
²ùs   ‚)r"   r,   r   r   r<   r5   Úmaybe_resumeÚopcoder   r   Úfinr:   rB   r   r?   ÚjoinrF   )r.   r5   rF   Údeadliner;   r%   rQ   s          r   r7   rG   ƒ   s˜  € ð4 �Z‹ZØ×#×#Ü&Ð'OÓPÐPØ#'ˆDÔ ÷ ð	)Ü Ó(ˆHð ×'Ñ'¨×(8Ñ(8È%Ð(8Ð(PÓQˆEØ—“Ø×!Ñ!Ô#÷ à—<‘<¤7Ò*¨e¯l©l¼iÒ.GÐGÐGØ‰~ØŸ™¬Ð0�Ø�WˆFð —i—iðØ ×/Ñ/Ø ×(Ñ(¸%Ð(Ð@ó�Eð —Z“ZØ×%Ñ%Ô'÷  à—|‘|¤wÒ.Ð.Ð.Ø—‘˜eÔ$ð —i—i‘ið  $)ˆDÔ ð �x‰xÑ7±Ó7Ó7ˆÞØ—;‘;“=Ð àˆK÷Y ŽZú÷ –ûô $ó ð ×$Ñ$ VÔ,Øð	ú÷
  •Zûð $)ˆDÕ ús_   �$Fº5G# Á/F Â AG# ÃF2 Ã8G# ÄGÄ?G# Æ
FÆ 
F/Æ*G# Æ2GÇG# Ç
G ÇG# Ç#	G,c                ó   • g r   r   ©r.   rF   s     r   Úget_iterÚAssembler.get_iterË   s   € Ø@Cr   c                ó   • g r   r   r[   s     r   r\   r]   Î   s   € ØCFr   c                ó   • g r   r   r[   s     r   r\   r]   Ñ   s   € ØFIr   c              #  óä  #   • U R                      U R                  (       a  [        S5      eSU l        SSS5        U R                  5       nU R                      U R	                  5         SSS5        UR
                  [        L d  UR
                  [        L d   eUc  UR
                  [        L nU(       a3  [        5       nUR                  UR                  UR                  5      v •  O[        UR                  5      v •  UR                  (       d¤  U R                  5       nU R                      U R	                  5         SSS5        UR
                  [        L d   eU(       a)  WR                  UR                  UR                  5      v •  O[        UR                  5      v •  UR                  (       d  M¤  SU l        g! , (       d  f       GN�= f! , (       d  f       GNl= f! , (       d  f       N©= f7f)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.

rN   TNF)r"   r,   r   r<   rU   rV   r   r   ÚUTF8DecoderrF   rQ   rW   Úbytesr   )r.   rF   r;   Údecoders       r   r\   r]   Ô   sW  é € ð2 �Z‹ZØ×#×#Ü&Ð'OÓPÐPØ#'ˆDÔ ÷ ð ×#Ñ#Ó%ˆØ�Z‹ZØ×ÑÔ÷ à�|‰|œwÒ&¨%¯,©,¼)Ò*CÐCÐCØ‰>Ø—\‘\¤WÐ,ˆFÞÜ!“mˆGØ—.‘. §¡¨U¯Y©YÓ7Ó7ô ˜Ÿ
™
Ó#Ò#ð —)—)Ø×'Ñ'Ó)ˆEØ—“Ø×!Ñ!Ô#÷ à—<‘<¤7Ò*Ð*Ð*ÞØ—n‘n U§Z¡Z°·±Ó;Ó;ô ˜EŸJ™JÓ'Ò'ð —)—)‘)ð  %ˆÕ÷K ŽZú÷ ŽZú÷ •üsS   ‚G0�$F;³$G0ÁGÁ(CG0Ä+GÄ<A5G0Æ3G0Æ;
G
ÇG0Ç
GÇG0Ç
G-Ç)G0c                óÞ   • U R                      U R                  (       a  [        S5      eU R                  R	                  U5        U R                  5         SSS5        g! , (       d  f       g= f)z_
Add ``frame`` to the next message.

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

r4   N)r"   r-   r9   r%   r@   Úmaybe_pause)r.   r;   s     r   r@   ÚAssembler.put  sD   € ð �Z‹ZØ�{�{ÜÐ7Ó8Ð8à�K‰K�O‰O˜EÔ"Ø×ÑÔ÷ �ZŽZús   �AAÁ
A,c                ó  • U R                   c  gU R                  R                  5       (       d   eU R                  R	                  5       U R                   :”  a*  U R
                  (       d  SU l        U R                  5         ggg)z7Pause the writer if queue is above the high water mark.NT)r'   r"   Úlockedr%   Úqsizer+   r)   ©r.   s    r   re   ÚAssembler.maybe_pause-  sc   € ð �9‰9ÑØà�z‰z× Ñ ×"Ñ"Ð"Ð"ð �;‰;×ÑÓ §¡Ó*°4·;·;ØˆDŒKØ�J‰J�Lð 4?Ð*r   c                ó  • U R                   c  gU R                  R                  5       (       d   eU R                  R	                  5       U R                   ::  a*  U R
                  (       a  SU l        U R                  5         ggg)z7Resume the writer if queue is below the low water mark.NF)r(   r"   rh   r%   ri   r+   r*   rj   s    r   rU   ÚAssembler.maybe_resume:  sc   € ð �8‰8ÑØà�z‰z× Ñ ×"Ñ"Ð"Ð"ð �;‰;×ÑÓ $§(¡(Ó*¨t¯{¯{ØˆDŒKØ�K‰K�Mð 0;Ð*r   c                ó<  • U R                      U R                  (       a
   SSS5        gSU l        U R                  (       a  U R                  R	                  S5        U R
                  (       a  SU l        U R                  5         SSS5        g! , (       d  f       g= f)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*   rj   s    r   ÚcloseÚAssembler.closeG  s_   € ð �Z‹ZØ�{�{Ø÷ ˆZð ˆDŒKà×#×#à—‘—‘ Ô%à�{�{à#�”Ø—‘”÷ �ZŽZús   �B©ABÂ
B)	r-   r%   r,   r'   r(   r"   r)   r+   r*   )
r'   ú
int | Noner(   rq   r)   úCallable[[], Any]r*   rr   ÚreturnÚNoner   )r5   úfloat | Noners   r   )r%   zIterable[Frame]rs   rt   )r5   ru   rF   úLiteral[True]rs   Ústr)r5   ru   rF   úLiteral[False]rs   rb   )NN)r5   ru   rF   úbool | Noners   r   )rF   rv   rs   zIterator[str])rF   rx   rs   zIterator[bytes])rF   ry   rs   zIterator[Data])r;   r   rs   rt   )rs   rt   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r/   r<   rB   r	   r7   r\   r@   re   rU   ro   Ú__static_attributes__r   r   r   r   r      sê   † ñð   ØÙ#/Ù$0ð$àð$ð ð$ð !ð	$ð
 "ð$ð 
õ$öLô,'ð, ÛKó ØKàÛNó ØNàÝUó ØUàÝXó ØXàÝXó ØXöFðP ÛCó ØCàÛFó ØFàÝIó ØIö>%ô@ô2ô÷r   )Ú
__future__r   Úcodecsr#   r    Útypingr   r   r   r   r   r	   Ú
exceptionsr   r%   r   r   r   r   r   Úutilsr   Ú__all__Úgetincrementaldecoderra   r   r   r   r   Ú<module>r‡      sK   ðÝ "ã Û Û ß G× Gå )ß 7Ó 7Ý Ý ð ˆ-€à×*Ò*¨7Ó3€÷Iò Ir   