
    AHjn                       d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ eeg ee   f   eg ef   f   Z 	  G d de!      Z"e G d d             Z#y)z

Contains the `Timer` class.
Timer objects are created by [set_interval][textual.message_pump.MessagePump.set_interval] or
    [set_timer][textual.message_pump.MessagePump.set_timer].
    )annotationsN)CancelledErrorEventTaskcreate_taskgather)Any	AwaitableCallableIterableUnion)Result	rich_repr)_timeevents)invoke)cached_property)
active_app)sleep)MessageTargetc                      e Zd ZdZy)EventTargetGonezVRaised if the timer event target has been deleted prior to the timer event being sent.N)__name__
__module____qualname____doc__     E/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/timer.pyr   r      s    `r   r   c                      e Zd ZU dZdZded<   dddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Zedd
       ZddZ	e
dd       ZddZddZedd       ZddZddZddZddZddZddZy)Timera  A class to send timer-based events.

    Args:
        event_target: The object which will receive the timer events.
        interval: The time between timer events, in seconds.
        name: A name to assign the event (for debugging).
        callback: A optional callback to invoke when the event is handled.
        repeat: The number of times to repeat the timer, or None to repeat forever.
        skip: Enable skipping of scheduled events that couldn't be sent in time.
        pause: Start the timer paused.
       int_timer_countNTF)namecallbackrepeatskippausec                  t        |      | _        t        j                  |      | _        || _        |d| j                   n|| _        | xj                  dz  c_        || _        || _	        || _
        d | _        d| _        || _        y )NzTimer#r"   F)repr_target_reprweakrefref_target	_intervalr$   r%   	_callback_repeat_skip_task_reset_original_pause)selfevent_targetintervalr%   r&   r'   r(   r)   s           r   __init__zTimer.__init__/   s     !.{{<0!48LfT../0d	Q!
"&
!$r   c                R    t               }| j                  s|j                          |S N)r   r6   set)r7   events     r   _activezTimer._activeF   s     ##IIKr   c              #  j   K   | j                    d| j                  f d| j                  d f y w)Nr%   r'   )r0   r%   r2   r7   s    r   __rich_repr__zTimer.__rich_repr__M   s0     nndiid**s   13c                >    | j                         }|
t               |S r<   )r/   r   )r7   targets     r   rD   zTimer.targetR   s     >!##r   c                X    t        | j                         | j                        | _        y)zStart the timer.)r%   N)r   
_run_timerr%   r4   rA   s    r   _startzTimer._startY   s     !2C
r   c                    | j                   y| j                  j                          | j                   j                          d| _         y)zStop the timer.N)r4   r?   r=   cancelrA   s    r   stopz
Timer.stop]   s6    ::


r   c                |   K   dd}t        t        |      D cg c]
  } ||       c}  d{    yc c}w 7 
w)ztStop a number of timers, and await their completion.

        Args:
            timers: A number of timers.
        c                   K   | j                   Q| j                  j                          | j                   j                          	 | j                    d{    d| _         yy7 # t        $ r Y w xY ww)zpStop a timer and wait for it to finish.

            Args:
                timer: A Timer instance.
            N)r4   r?   r=   rI   r   )timers    r   
stop_timerz#Timer._stop_all.<locals>.stop_timern   sh      {{&!!#""$++%% # ' &% s<   AA2A# A!A# 	A2!A# #	A/,A2.A//A2N)rM   r!   returnNone)r   list)clstimersrN   rM   s       r   	_stop_allzTimer._stop_allf   s5     	# d6lCUz%(CDDDCDs   <5<:<c                8    | j                   j                          y)z[Pause the timer.

        A paused timer will not send events until it is resumed.
        N)r?   clearrA   s    r   r)   zTimer.pause   s    
 	r   c                F    | j                   j                          d| _        y)z1Reset the timer, so it starts from the beginning.TN)r?   r=   r5   rA   s    r   resetzTimer.reset   s    r   c                8    | j                   j                          y)zResume a paused timer.N)r?   r=   rA   s    r   resumezTimer.resume   s    r   c                `   K   	 | j                          d{    y7 # t        $ r Y yw xY ww)zRun the timer task.N)_runr   rA   s    r   rF   zTimer._run_timer   s+     	))+ 		s(   .  . 	+.+.c                  K   d}| j                   }| j                  }| j                   | j                  j                          d{    t	        j
                         }|||k  r||dz   |z  z   }t	        j
                         }| j                  r||k  rt        ||z
  |z  dz         }Lt	        j
                         }t        d||z
        }t        |       d{    |dz  }| j                  j                          d{    | j                  rt	        j
                         }d}d| _
        	 | j                  ||       d{    |||k  ryy7 7 7 Z7 # t        $ r Y yw xY ww)zRun the timer.r   Nr"   F)
next_timercount)r2   r0   r?   waitr   get_timer3   r#   maxr   r5   _tickr   )r7   r_   r2   r0   startr^   now	wait_times           r   r\   z
Timer._run   sV    ,,NN	ll!!! o'!1519	"9:J.."Czzj3.S5[I59:.."CAzC/0I	"""QJE,,##%%%{{(#jjJejDDD# o'!1 	" #% E" sy   AE1EBE1E&E1E.E13E" 	E 
E" E1E1E1E1E1 E" "	E.+E1-E..E1c                 K   t        j                         }|j                  ry| j                  	 t	        | j                         d{    yt        j                  | ||| j                        }| j                  j                  |       y7 D# t
        $ r  t        $ r}|j                  |       Y d}~yd}~ww xY ww)zVTriggers the Timer's action: either call its callback, or sends an event to its targetN)rM   timer_   r&   )r   get_exitr1   r   r   	Exception_handle_exceptionr   r!   rD   post_message)r7   r^   r_   apperrorr>   s         r   rc   zTimer._tick   s      nn99>>%-T^^,,, LL	E KK$$U+ -!   -%%e,,-sA   .C B 	B
B A C B B="B83C 8B==C )r8   r   r9   floatr%   z
str | Noner&   zTimerCallback | Noner'   z
int | Noner(   boolr)   rq   rO   rP   )rO   r   )rO   r   )rO   r   )rO   rP   )rS   zIterable[Timer]rO   rP   )r^   rp   r_   r#   rO   rP   )r   r   r   r   r$   __annotations__r:   r   r?   rB   propertyrD   rG   rJ   classmethodrT   r)   rX   rZ   rF   r\   rc   r   r   r   r!   r!      s    
 L#  )-!%#% %
 % '% % % % 
%.  +
  D E E0
<,r   r!   )$r   
__future__r   r-   asyncior   r   r   r   r   typingr	   r
   r   r   r   	rich.reprr   r   textualr   r   textual._callbackr   textual._compatr   textual._contextr   textual._timer   textual._typesr   TimerCallbackrk   r   r!   r   r   r   <module>r      s    #  D D < < ' ! $ + '  (hr9S>12HRW4EEF 5ai a k, k, k,r   