Ë
    îO´jÝ  ã                  óT   — d dl mZ d dlZd dlZd dlmZ d dlZddlm	Z	  G d„ d«      Z
y)é    )ÚannotationsN)Údequeé   )ÚWebSocketQueueFullErrorc                  óZ   — e Zd ZdZddd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zy)Ú	SendQueuezèBounded byte-size queue for outgoing WebSocket messages.

    Messages are stored as pre-serialized strings. The queue enforces a
    maximum byte budget so that unbounded buffering cannot occur during
    reconnection windows.
    c                ón   — g | _         d| _        || _        t        j                  «       | _        d | _        y ©Nr   )Ú_queueÚ_bytesÚ
_max_bytesÚ	threadingÚLockÚ_lockÚ_flush_done)ÚselfÚ	max_bytess     úi/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/openai/_send_queue.pyÚ__init__zSendQueue.__init__   s-   € Ø-/ˆŒØˆŒØ#ˆŒÜ—^‘^Ó%ˆŒ
Ø37ˆÕó    c                ó,  — t        |j                  d«      «      }| j                  5  | j                  |z   | j                  kD  rt        d«      ‚| j                  j                  ||f«       | xj                  |z  c_        ddd«       y# 1 sw Y   yxY w)zŽAppend *data* to the queue.

        Raises :class:`WebSocketQueueFullError` if the message would
        exceed the byte-size limit.
        zutf-8z%send queue is full, message discardedN)ÚlenÚencoder   r   r   r   r   Úappend)r   ÚdataÚbyte_lengths      r   ÚenqueuezSendQueue.enqueue   sy   € ô ˜$Ÿ+™+ gÓ.Ó/ˆØ�Z‰Zñ 	'Ø�{‰{˜[Ñ(¨4¯?©?Ò:Ü-Ð.UÓVÐVØ�K‰K×Ñ  kÐ2Ô3Ø�KŠK˜;Ñ&�K÷		'÷ 	'ñ 	'ús   §AB
Â
Bc                óÔ  — t        | j                  «       x}t        j                  «      r;|j	                  «        t        | j                  «       x}t        j                  «      rŒ;	 |rM|d   \  }} ||«       | j
                  5  |j                  «        | xj                  |z  c_        ddd«       |rŒM| j                  |«       y# 1 sw Y   ŒxY w# | j                  |«       w xY w)z«Send every queued message via *send*.

        If *send* raises, the failing message and all subsequent messages
        are re-queued and the error is re-raised.
        r   N)	Ú
isinstanceÚ_begin_flushr   ÚEventÚwaitr   Úpopleftr   Ú
_end_flush©r   ÚsendÚpendingr   r   s        r   Ú
flush_synczSendQueue.flush_sync(   sº   € ô  D×$5Ñ$5Ó$7Ð7˜¼¿¹ÔIØ�L‰LŒNô  D×$5Ñ$5Ó$7Ð7˜¼¿¹ÕIð	%ÙØ$+¨A¡JÑ!��kÙ�T”
Ø—Z‘Zñ /Ø—O‘OÔ%Ø—K’K ;Ñ.•K÷/ò ð �O‰O˜GÕ$÷	/ð /ûð �O‰O˜GÕ$ús$   Á'C Â&CÂ+
C ÃCÃC ÃC'c              ƒ  ó:  K  — t        | j                  «       x}t        j                  «      r^t        j
                  j                  |j                  d¬«      ƒ d{  –—†  t        | j                  «       x}t        j                  «      rŒ^	 |rU|d   \  }} ||«      ƒ d{  –—†  | j                  5  |j                  «        | xj                  |z  c_
        ddd«       |rŒU| j                  |«       y7 Œ™7 ŒU# 1 sw Y   Œ"xY w# | j                  |«       w xY w­w)z$Async variant of :meth:`flush_sync`.T)Úabandon_on_cancelNr   )r   r    r   r!   ÚanyioÚ	to_threadÚrun_syncr"   r   r#   r   r$   r%   s        r   Úflush_asynczSendQueue.flush_async;   sè   è ø€ ä D×$5Ñ$5Ó$7Ð7˜¼¿¹ÔIô —/‘/×*Ñ*¨7¯<©<È4Ð*ÓP×PÐPô  D×$5Ñ$5Ó$7Ð7˜¼¿¹ÕIð
	%ÙØ$+¨A¡JÑ!��kÙ˜4“j× Ð Ø—Z‘Zñ /Ø—O‘OÔ%Ø—K’K ;Ñ.•K÷/ò ð �O‰O˜GÕ$ð Qøð
 !ø÷/ð /ûð �O‰O˜GÕ$üsT   ‚ADÁC5Á.DÂD Â!C7Â"D Â2&C9Ã
D Ã#DÃ7D Ã9DÃ>D ÄDÄDc                ó  — | j                   5  | j                  �| j                  cd d d «       S t        | j                  «      }| j                  j	                  «        t        j                  «       | _        |cd d d «       S # 1 sw Y   y xY w©N)r   r   r   r   Úclearr   r!   ©r   r'   s     r   r    zSendQueue._begin_flushL   so   € Ø�Z‰Zñ 	Ø×ÑÐ+Ø×'Ñ'÷	ñ 	ô ˜DŸK™KÓ(ˆGØ�K‰K×ÑÔÜ(Ÿ™Ó0ˆDÔà÷	÷ 	ò 	ús   �B¯A	BÂBc                óÞ   — | j                   5  t        |«      | j                  z   | _        | j                  €J ‚| j                  j	                  «        d | _        d d d «       y # 1 sw Y   y xY wr0   )r   Úlistr   r   Úsetr2   s     r   r$   zSendQueue._end_flushV   s^   € Ø�Z‰Zñ 	$Ü˜w›-¨$¯+©+Ñ5ˆDŒKØ×#Ñ#Ð/Ð/Ð/Ø×Ñ× Ñ Ô"Ø#ˆDÔ÷		$÷ 	$ñ 	$ús   �AA#Á#A,c                ó$  — | j                   5  | j                  D ��cg c]  \  }}|‘Œ	 }}}| xj                  t        d„ | j                  D «       «      z  c_        | j                  j	                  «        |cddd«       S c c}}w # 1 sw Y   yxY w)z&Remove and return all queued messages.c              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr0   © )Ú.0Ú_r   s      r   ú	<genexpr>z"SendQueue.drain.<locals>.<genexpr>a   s   è ø€ ÒM©~¨q°+œ{ÑMùs   ‚N)r   r   r   Úsumr1   )r   r   r:   Úitemss       r   ÚdrainzSendQueue.drain]   sq   € à�Z‰Zñ 	Ø)-¯©×5™g˜d A’TÐ5ˆEÑ5Ø�KŠKœ3ÑMÀÇÁÔMÓMÑM�KØ�K‰K×ÑÔØ÷		ñ 	ùÛ5÷	ð 	ús   �B�B ©ABÂ BÂBc                óp   — | j                   5  t        | j                  «      cd d d «       S # 1 sw Y   y xY wr0   ©r   r   r   ©r   s    r   Ú__len__zSendQueue.__len__e   s*   € Ø�Z‰Zñ 	$Ü�t—{‘{Ó#÷	$÷ 	$ò 	$ús   �,¬5c                óv   — | j                   5  t        | j                  «      dkD  cd d d «       S # 1 sw Y   y xY wr
   r@   rA   s    r   Ú__bool__zSendQueue.__bool__i   s/   € Ø�Z‰Zñ 	(Ü�t—{‘{Ó# aÑ'÷	(÷ 	(ò 	(ús   �/¯8N)i   )r   ÚintÚreturnÚNone)r   ÚstrrF   rG   )r&   ztyping.Callable[[str], object]rF   rG   )r&   z0typing.Callable[[str], typing.Awaitable[object]]rF   rG   )rF   z(deque[tuple[str, int]] | threading.Event)r'   zdeque[tuple[str, int]]rF   rG   )rF   z	list[str])rF   rE   )rF   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r(   r.   r    r$   r>   rB   rD   r8   r   r   r   r      s4   „ ñô8ó'ó%ó&%ó"ó$óó$ô(r   r   )Ú
__future__r   Útypingr   Úcollectionsr   Úanyio.to_threadr+   Ú_exceptionsr   r   r8   r   r   ú<module>rS      s#   ðÝ "ã Û Ý ã å 0÷_(ò _(r   