
    q	h              	       f   S SK r S SKrS SKJr  S SKrS SKrS SKJrJrJ	r	J
r
Jr  \R                  " S5      r " S S\5      rS\ R                   SS4S	 jrS
\S\4S jr\" S5      r " S S\	\   5      r " S S\ R.                  \   5      r " S S\	\   5      rSqSS jrS\S\S\\SS4   4S jrg)    N)deque)Callable	GeneratorGenericListTypeVarlivekitc                        \ rS rSrS rS rSrg)classproperty   c                 $    [        U5      U l        g N)classmethodf)selfr   s     D/var/www/html/env/lib/python3.13/site-packages/livekit/rtc/_utils.py__init__classproperty.__init__   s    Q    c                 >    U R                   R                  " U6 " 5       $ r   )r   __get__)r   as     r   r   classproperty.__get__   s    vv~~q!##r   )r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__ r   r   r   r      s     $r   r   taskreturnc                     U R                  5       (       a  [        R                  SU 5        g U R                  5       (       a#  [        R	                  SX R                  5       S9  g g )Nztask cancelled: %sztask exception: %s)exc_info)	cancelledloggerinfo	exceptionerror)r    s    r   task_done_loggerr)   !   sN    ~~($/~~)4..:JK r   mvc                 h    [         R                  " [         R                  R                  U 5      5      $ r   )ctypes	addressofc_charfrom_buffer)r*   s    r   get_addressr0   +   s"    FMM55b9::r   Tc                   J    \ rS rSrS
S\SS4S jjrS\SS4S jrS\4S jrS	r	g)	RingQueue2   capacityr!   Nc                 b    Xl         [        5       U l        [        R                  " 5       U l        g r   )	_capacityr   _queueasyncioEvent_event)r   r5   s     r   r   RingQueue.__init__3   s    ! %mmor   itemc                    U R                   S:  a=  [        U R                  5      U R                   :X  a  U R                  R                  5         U R                  R	                  U5        U R
                  R                  5         g Nr   )r7   lenr8   popleftappendr;   set)r   r=   s     r   putRingQueue.put8   sR    >>A#dkk"2dnn"DKK!4 r   c                 "  #    [        U R                  5      S:X  a=  U R                  R                  5       I S h  vN   [        U R                  5      S:X  a  M=  U R                  R	                  5         U R                  R                  5       $  NS7fr?   )r@   r8   r;   waitclearrA   r   s    r   getRingQueue.get>   sg     $++!#++""$$$ $++!#{{""$$ %s   7BBB5B)r7   r;   r8   r   )
r   r   r   r   intr   r1   rD   rJ   r   r   r   r   r3   r3   2   s4    & &T &
 d %1 %r   r3   c                   Z   ^  \ rS rSrSrS
S\SS4U 4S jjjrS\\/\	4   S\4S jr
S	rU =r$ )QueueE   z%asyncio.Queue with utility functions.maxsizer!   Nc                 $   > [         TU ]  U5        g r   )superr   )r   rQ   	__class__s     r   r   Queue.__init__H   s    !r   fncc                    #     U R                  5       I Sh  vN nU" U5      (       a  U$ U R                  5         M9   N%7f)zVWait for an event that matches the given function.
The previous events are discarded.
N)rJ   	task_done)r   rV   events      r   wait_forQueue.wait_forK   s8     
 ((*$E5zzNN $s   ?=&?r   rL   )r   r   r   r   __doc__rM   r   r   r1   boolrZ   r   __classcell__)rT   s   @r   rO   rO   E   sA    /" "D " "(A39"5 !  r   rO   c                   x    \ rS rSrSrSS jrS\4S jrS\SS4S jr	S\
\   4S	 jrS
\
\   SS4S jrSS jrSrg)BroadcastQueueY   z Queue with multiple subscribers.r!   Nc                 F    [         R                  " 5       U l        / U l        g r   )r9   Lock_lock_subscribersrI   s    r   r   BroadcastQueue.__init__\   s    \\^
,.r   c                 ,    [        U R                  5      $ r   )r@   re   rI   s    r   len_subscribersBroadcastQueue.len_subscribers`   s    4$$%%r   r=   c                 L    U R                    H  nUR                  U5        M     g r   )re   
put_nowait)r   r=   queues      r   rk   BroadcastQueue.put_nowaitc   s     &&ET" 'r   c                 `    [         [           " 5       nU R                  R                  U5        U$ r   )rO   r1   re   rB   r   rl   s     r   	subscribeBroadcastQueue.subscribeg   s&    a
  'r   rl   c                 :    U R                   R                  U5        g r   )re   removero   s     r   unsubscribeBroadcastQueue.unsubscribel   s      'r   c                   #    U R                    IS h  vN   U R                  R                  5       nU H  nUR                  5       I S h  vN   M     S S S 5      IS h  vN   g  NP N N	! , IS h  vN  (       d  f       g = f7fr   )rd   re   copyjoin)r   subsrl   s      r   rx   BroadcastQueue.joino   sT     :::$$))+Djjl""  :: # :::sV   BA$B3A*
A&A*BA(B&A*(B*B0A31B=B)rd   re   )r!   N)r   r   r   r   r\   r   rM   rh   r1   rk   rO   rp   rt   rx   r   r   r   r   r`   r`   Y   sU    */& &#q #T #58 
(q (d (#r   r`   >0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZc                 D    SR                  S [        U 5       5       5      $ )z
Generate a random base62 encoded string of a specified length.

:param length: The desired length of the base62 encoded string.
:return: A base62 encoded string.
 c              3   V   #    U  H  n[         R                  " [        5      v   M!     g 7fr   )randomchoice_base62_characters).0_s     r   	<genexpr>)generate_random_base62.<locals>.<genexpr>   s     Lm6==!344ms   '))rx   range)lengths    r   generate_random_base62r   y   s     77LeFmLLLr   snc              #      #    U R                  5       n[        U5      U:  a;  UnX#   S-  S:X  a  US-  nX#   S-  S:X  a  M  USU v   X#S n[        U5      U:  a  M;  Uv   g7f)z.Split UTF-8 s into chunks of maximum length n.         N)encoder@   )r   r   encodedks       r   
split_utf8r      st     hhjG
g,
zD T)FA zD T)bqk"+ g,
 Ms   =A"A"A")   )r9   loggingcollectionsr   r,   r   typingr   r   r   r   r   	getLoggerr%   objectr   Taskr)   
memoryviewrM   r0   r1   r3   rO   r`   r   r   strbytesr   r   r   r   <module>r      s         > >			9	%$F $7<< D ;J ;3 ; CL%
 %&GMM! (#WQZ #: V M	# 	# 	)E4,="> 	r   