
    >i                         d Z ddlZddlZddl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 ddl
mZmZ ej                   j#                  d	      Zd
Z G d dej(                        Zy)zScheduler for Python functions.

.. note::
    This is used for the thread-based worker only,
    not for amqp/redis/sqs/qpid where :mod:`kombu.asynchronous.timer` is used.
    N)count)TIMEOUT_MAX)sleep)Entry)Timer)loggerto_timestampTIMER_DEBUG)r   Scheduler   r	   c                        e Zd ZdZeZeZdZdZ ed      Z	e
r fdZ	 	 d fd	Zd ZexZZd Zd	 Zd
 Zd ZddZd Zd Zd Zd ZddZd Zd Zd Zd Zd ZeZe d        Z! xZ"S )r   z^Timer thread.

    Note:
        This is only used for transports not supporting AsyncIO.
    FN   c                 b    dd l }t        d       |j                          t        |   |i | y )Nr   z- Timer starting)	tracebackprintprint_stacksuperstart)selfargskwargsr   	__class__s       o/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/celery/utils/timer2.pyr   zTimer.start'   s,    $%!!#GM4*6*    c                    |xs | j                  ||      | _        || _        |xs | j                  | _        t        |           t        j                         | _        t        j                         | _	        t        j                         | _        t        j                  | j                        | _        d| _        dt        | j                          | _        y )N)on_errormax_intervalTzTimer-)r   scheduleon_starton_tickr   __init__	threadingEvent_Timer__is_shutdown_Timer__is_stoppedLockmutex	Condition	not_emptydaemonnext_timer_countname)r   r   r   r   r   r   r   r   s          r   r    zTimer.__init__-   s      MDMM8?K %2 %M .$,,
 '__.%OO-^^%
",,TZZ8T$"3"3456	r   c                     | j                   5  t        | j                        \  }}|(|| j                   j                  d       |cd d d        S 	 d d d        | j                  j                        S # 1 sw Y   $xY w)Ng      ?)r(   r*   	schedulerwaitr   apply_entry)r   delayentrys      r   _next_entryzTimer._next_entry?   ss    ^^ 	/LE5}=NN'',	 		 }}((//	 	s   9A44A=c                 J   	 d| _         t        | j                        | _        | j                  j                         s\| j                         }|r/| j                  r| j                  |       t        n&t        |       | j                  j                         s\	 | j                  j                          y # t        $ r Y y w xY w# t        $ rU}t        j                  d|d       t        j                   j#                          t%        j&                  d       Y d }~y d }~ww xY w)NTzThread Timer crashed: %r)exc_infor   )runningiterr   r.   r#   is_setr3   r   r   r$   set	TypeError	Exceptionr   errorsysstderrflushos_exit)r   r1   excs      r   runz	Timer.runI   s    	DL!$--0DN((//1((*||U+}%L ((//1!!%%'    	LL3S4HJJHHQKK	s7   BC B5 5	C>C  CC 	D"ADD"c                     | j                   j                          | j                  r7| j                  j	                          | j                  t               d| _        y y )NF)r#   r9   r6   r$   r/   joinTHREAD_TIMEOUT_MAXr   s    r   stopz
Timer.stopa   sF     <<""$II() DL r   c                     | j                   s?| j                         s.| j                  r| j                  |        | j                          y y y N)r6   is_aliver   r   rG   s    r   ensure_startedzTimer.ensure_startedh   s4    ||DMMO}}d#JJL %4|r   c                     | j                          | j                  5   t        | j                  |      |i |}| j                  j                          |cd d d        S # 1 sw Y   y xY wrJ   )rL   r&   getattrr   r(   notify)r   methr   r   r2   s        r   	_do_enterzTimer._do_entern   sY    ZZ 	0GDMM40$A&AENN!!#	 	 	s   8AA(c                 ,    | j                  d|||      S )Nenter_at)priorityrQ   )r   r2   etarT   s       r   enterzTimer.enteru   s    ~~j%x~HHr   c                 .     | j                   dg|i |S )Ncall_atrU   r   r   r   s      r   rY   zTimer.call_atx   s    t~~i9$9&99r   c                 .     | j                   dg|i |S )Nenter_afterrU   rZ   s      r   r\   zTimer.enter_after{   s    t~~m=d=f==r   c                 .     | j                   dg|i |S )N
call_afterrU   rZ   s      r   r^   zTimer.call_after~   s    t~~l<T<V<<r   c                 .     | j                   dg|i |S )Ncall_repeatedlyrU   rZ   s      r   r`   zTimer.call_repeatedly   s    t~~/A$A&AAr   c                 F    | j                  |t        j                  |       y rJ   )r^   r=   exit)r   secsrT   s      r   
exit_afterzTimer.exit_after   s    chh1r   c                 $    |j                          y rJ   )cancel)r   trefs     r   rf   zTimer.cancel   s    r   c                 8    | j                   j                          y rJ   )r   clearrG   s    r   ri   zTimer.clear   s    r   c                     t        |        S rJ   )lenrG   s    r   emptyzTimer.empty   s    t9}r   c                 ,    t        | j                        S rJ   )rk   r   rG   s    r   __len__zTimer.__len__   s    4==!!r   c                      y)z``bool(timer)``.T rG   s    r   __bool__zTimer.__bool__   s    r   c                 .    | j                   j                  S rJ   )r   queuerG   s    r   rs   zTimer.queue   s    }}"""r   )NNNNNrJ   )
   )#__name__
__module____qualname____doc__r   r   r6   r   r   r+   r
   r   r    r3   __next__r*   rC   rH   rL   rQ   rW   rY   r\   r^   r`   rd   rf   ri   rl   rn   rq   __nonzero__propertyrs   __classcell__)r   s   @r   r   r      s     EHGG8L	+ >B-17$0 "!Ht0!I:>=B2" K# #r   r   )rx   r@   r=   r!   	itertoolsr   r   rF   timer   kombu.asynchronous.timerr   r   r   r   r	   environgetr
   __all__Threadrp   r   r   <module>r      sR    
 
   7  * 6 9jjnn]+
8C#I C#r   