o
    h                     @   s   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mZmZmZmZ ddlmZ ddlmZ dd	lmZmZ ejd
ZdZG dd dejZdS )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)AnyCallableIteratorOptionalTuple)Entry)Timer)loggerto_timestampTIMER_DEBUG)r
   Scheduler   r   c                       s  e Zd ZU dZeZeZdZeed< dZ	e
eegdf  ed< edZeed< er5ded	ed
df fddZ					d<de
e de
eegdf  de
eegdf  de
ed gdf  de
e d	ed
df fddZd
e
e fddZe ZZd=ddZd=ddZd=ddZdeded	ed
efddZd>deded e
e d
efd!d"Zded	ed
efd#d$Zded	ed
efd%d&Zded	ed
efd'd(Z ded	ed
efd)d*Z!d?d,ed ed
dfd-d.Z"d/ed
dfd0d1Z#d=d2d3Z$d
efd4d5Z%d
efd6d7Z&d
efd8d9Z'e'Z(e)d
e*fd:d;Z+  Z,S )@r   z^Timer thread.

    Note:
        This is only used for transports not supporting AsyncIO.
    FrunningNon_tick   _timer_countargskwargsreturnc                    s.   dd l }td |  t j|i | d S )Nr   z- Timer starting)	tracebackprintprint_stacksuperstart)selfr   r   r   	__class__ U/var/www/html/optinet_system/venv/lib/python3.10/site-packages/celery/utils/timer2.pyr   (   s   zTimer.startscheduleon_erroron_startmax_intervalc                    sx   |p| j ||d| _|| _|p| j| _t   t | _t | _	t
 | _t| j| _d| _dt| j | _d S )N)r"   r$   TzTimer-)r   r!   r#   r   r   __init__	threadingEvent_Timer__is_shutdown_Timer__is_stoppedLockmutex	Condition	not_emptydaemonnextr   name)r   r!   r"   r   r#   r$   r   r   r   r    r%   .   s   




zTimer.__init__c                 C   sn   | j & t| j\}}|d u r"|d u r| j d |W  d    S W d    n1 s,w   Y  | j|S )Ng      ?)r-   r/   	schedulerwaitr!   apply_entry)r   delayentryr   r   r    _next_entryC   s   zTimer._next_entryc              
   C   s   z?d| _ t| j| _| j s+|  }|r&| jr| | td u r"n	t| | j rz	| j	
  W W d S  ty?   Y W d S w  tyd } ztjd|dd tj  td W Y d }~d S d }~ww )NTzThread Timer crashed: %r)exc_infor   )r   iterr!   r1   r(   is_setr6   r   r   r)   set	TypeError	Exceptionr   errorsysstderrflushos_exit)r   r4   excr   r   r    runO   s.   



z	Timer.runc                 C   s2   | j   | jr| j  | t d| _d S d S )NF)r(   r:   r   r)   r2   joinTHREAD_TIMEOUT_MAXr   r   r   r    stopg   s   



z
Timer.stopc                 C   s2   | j s|  s| jr| |  |   d S d S d S N)r   is_aliver#   r   rG   r   r   r    ensure_startedn   s
   
zTimer.ensure_startedmethc                 O   sV   |    | j t| j||i |}| j  |W  d    S 1 s$w   Y  d S rI   )rK   r+   getattrr!   r-   notify)r   rL   r   r   r5   r   r   r    	_do_entert   s   
$zTimer._do_enterr5   etapriorityc                 C   s   | j d|||dS )Nenter_at)rQ   rO   )r   r5   rP   rQ   r   r   r    enter{   s   zTimer.enterc                 O      | j dg|R i |S )Ncall_atrS   r   r   r   r   r   r    rV   ~      zTimer.call_atc                 O   rU   )Nenter_afterrS   rW   r   r   r    rY      rX   zTimer.enter_afterc                 O   rU   )N
call_afterrS   rW   r   r   r    rZ      rX   zTimer.call_afterc                 O   rU   )Ncall_repeatedlyrS   rW   r   r   r    r[      rX   zTimer.call_repeatedly
   secsc                 C   s   |  |tj| d S rI   )rZ   r>   exit)r   r]   rQ   r   r   r    
exit_after   s   zTimer.exit_aftertrefc                 C   s   |   d S rI   )cancel)r   r`   r   r   r    ra      s   zTimer.cancelc                 C   s   | j   d S rI   )r!   clearrG   r   r   r    rb      s   zTimer.clearc                 C   s
   t |  S rI   )lenrG   r   r   r    empty      
zTimer.emptyc                 C   s
   t | jS rI   )rc   r!   rG   r   r   r    __len__   re   zTimer.__len__c                 C   s   dS )z``bool(timer)``.Tr   rG   r   r   r    __bool__   s   zTimer.__bool__c                 C   s   | j jS rI   )r!   queuerG   r   r   r    rh      s   zTimer.queue)NNNNN)r   NrI   )r\   )-__name__
__module____qualname____doc__r
   r   r   bool__annotations__r   r   r   floatr   r   r   r   r   r<   r%   r6   __next__r/   rD   rH   rK   strrO   intrT   rV   rY   rZ   r[   r_   ra   rb   rd   rf   rg   __nonzero__propertylistrh   __classcell__r   r   r   r    r      s^   
 



 
r   )rl   rA   r>   r&   	itertoolsr   r   rF   timer   typingr   r   r   r   r	   kombu.asynchronous.timerr
   r   r   r   r   environgetr   __all__Threadr   r   r   r    <module>   s    