
    Ih
                       d Z ddlm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 dd
lmZ ddlmZ ddlmZ ej,                  dk\  rddlmZ nddlmZ erddlmZ dZ ee      ZdZ ej@                  d ed            Z! e"ed      Z# edd      Z$ ed      efdZ%e	 G d d             Z& G d d      Z'y)z"Timer scheduling Python callbacks.    )annotationsN)
namedtuple)datetime)total_ordering)	monotonic)time)TYPE_CHECKING)proxy)wraps)
get_logger)   	   )ZoneInfo)TracebackType)EntryTimerto_timestamp   UTCpypy_version_info	scheduled)etapriorityentryc                    t        | t              rT| j                  | j                  |      } t	                |       z
  }t        | t        z
  j                         |z
  d      S | S )z^Convert datetime to timestamp.

    If d' is already a timestamp, then that will be used.
    )tzinfor   )
isinstancer   r   replace_timemaxEPOCHtotal_seconds)ddefault_timezoner   diffs       Q/var/www/html/planif/env/lib/python3.12/site-packages/kombu/asynchronous/timer.pyr   r   &   s[    
 !X88		!1	2AwAI,,.5q99H    c                  l    e Zd ZdZesdZddZd Zd Zd Z	d Z
ed	        Zej                  d
        Zy)r   zSchedule Entry.)funargskwargstrefcanceled	_last_run__weakref__Nc                z    || _         |xs g | _        |xs i | _        t        |       | _        d | _        d| _        y )NF)r)   r*   r+   weakrefproxyr,   r.   r-   )selfr)   r*   r+   s       r&   __init__zEntry.__init__=   s9    JB	l &	r'   c                N     | j                   | j                  i | j                  S N)r)   r*   r+   r2   s    r&   __call__zEntry.__call__E   s     txx2dkk22r'   c                F    	 d| j                   _        y # t        $ r Y y w xY wNT)r,   r-   ReferenceErrorr6   s    r&   cancelzEntry.cancelH   s%    	!%DII 		s    	  c                x    dj                  | j                  j                  | j                  | j                        S )Nz<TimerEntry: {}(*{!r}, **{!r}))formatr)   __name__r*   r+   r6   s    r&   __repr__zEntry.__repr__N   s.    /66HHtyy$++7 	7r'   c                0    t        |       t        |      k  S r5   )id)r2   others     r&   __lt__zEntry.__lt__S   s    $x"U)##r'   c                    | j                   S r5   r-   r6   s    r&   	cancelledzEntry.cancelledV   s    }}r'   c                    || _         y r5   rE   )r2   values     r&   rF   zEntry.cancelledZ   s	    r'   NN)r>   
__module____qualname____doc__IS_PYPY	__slots__r3   r7   r;   r?   rC   propertyrF   setter r'   r&   r   r   3   sV    
	
37
$    r'   r   c                  (   e Zd ZdZeZdZddZd Z	 	 	 	 	 	 	 	 ddZddZ	ddZ
dd	Zddefd
ZdefdZej                   fdZd Zd Zd Zeeej,                  ej                   fdZd Zd Zd Zd Zeej,                  fd       Zed        Zy)r   zAsync timer implementation.Nc                l    t        |xs t              | _        |xs | j                  | _        g | _        y r5   )floatDEFAULT_MAX_INTERVALmax_intervalon_error_queue)r2   rV   rW   r+   s       r&   r3   zTimer.__init__f   s,    !,"F2FG 1DMMr'   c                    | S r5   rQ   r6   s    r&   	__enter__zTimer.__enter__k   s    r'   c                $    | j                          y r5   )stop)r2   exc_typeexc_valexc_tbs       r&   __exit__zTimer.__exit__n   s     			r'   r   c                V    |si n|}| j                  | j                  |||      ||      S r5   )enter_atr   )r2   r   r)   r*   r+   r   s         r&   call_atzTimer.call_atv   s+    !v}}TZZT6:CJJr'   c                V    |si n|}| j                  || j                  |||      |      S r5   )enter_afterr   )r2   secsr)   r*   r+   r   s         r&   
call_afterzTimer.call_afterz   s-    !vdjjdF&CXNNr'   c                     |si n|} j                  ||      t               fd       }|_        d _         j	                        S )Nc                    
j                   t               }}|r|
j                   z
  n}	 |rL|k\  rG|
_          | i |
j                  s,
j                   }|r||z
  z
  n}	j                  |
       S S 
j                  s,
j                   }|r||z
  z
  n}	j                  |
       y y # 
j                  s,
j                   }|r||z
  z
  n}	j                  |
       w w xY wr5   )r.   r   r-   re   )r*   r+   lastnowlsincenextr)   r   rf   r2   r,   s         r&   _reschedulesz+Timer.call_repeatedly.<locals>._reschedules   s    	#D/3cDNN*F;fn%(DN//}}>>D2643:.DD$$T4: %t}}>>D2643:.DD$$T4: %t}}>>D2643:.DD$$T4: %s   B3 3:C-)r   r   r)   r.   re   )r2   rf   r)   r*   r+   r   rn   r,   s   ```  ` @r&   call_repeatedlyzTimer.call_repeatedly~   sY    !vzz#tV,	s	; 
	;  dH55r'   c                    | |       }t        |t              r	 t        |      }| j                  |||      S # t        $ r}| j	                  |      s Y d}~yd}~ww xY w)zEnter function into the scheduler.

        Arguments:
        ---------
            entry (~kombu.asynchronous.timer.Entry): Item to enter.
            eta (datetime.datetime): Scheduled time.
            priority (int): Unused.
        N)r   r   r   	Exceptionhandle_error_enter)r2   r   r   r   r   excs         r&   rb   zTimer.enter_at   sd     ;&Cc8$"3'
 {{3%00	  ((-s   9 	AAAc                J    | j                  | |       t        |      z   |      S r5   )rb   rT   )r2   rf   r   r   r   s        r&   re   zTimer.enter_after   s     }}UDFU4[$8(CCr'   c                B     || j                   t        |||             |S r5   )rX   r   )r2   r   r   r   pushs        r&   rs   zTimer._enter   s    T[[)C59:r'   c                    	  |        y # t         $ r8}| j                  |      st        j                  d|d       Y d }~y Y d }~y d }~ww xY w)NzError in timer: %rT)exc_info)rq   rr   loggererror)r2   r   rt   s      r&   apply_entryzTimer.apply_entry   sH    	GG 	G$$S)13FF *	Gs   
 	A)AAc                @    | j                   r| j                  |       yy r9   )rW   )r2   ry   s     r&   rr   zTimer.handle_error   s    ==MM(# r'   c                     y r5   rQ   r6   s    r&   r\   z
Timer.stop   s    r'   c              #     K   | j                   }| j                  }	 |rU|d   } |       |d   }	}||	k  r ||	|z
  |      df n2 ||      }
|
|u r|d   }|j                  sd|f N |||
       nd \w)zIterate over schedule.

        This iterator yields a tuple of ``(wait_seconds, entry)``,
        where if entry is :const:`None` the caller should wait
        for ``wait_seconds`` until it polls the schedule again.
        r   Nr   rI   )rV   rX   r-   )r2   minnowfunpoprw   rV   queueeventArk   r   eventBr   s               r&   __iter__zTimer.__iter__   s      ((q!8VAYS9cCi6<< ZF' &q	$~~"&+- UF+  % s   A6A8c                "    g | j                   d d  y r5   )rX   r6   s    r&   clearzTimer.clear   s    Ar'   c                $    |j                          y r5   )r;   )r2   r,   s     r&   r;   zTimer.cancel   s    r'   c                ,    t        | j                        S r5   )lenrX   r6   s    r&   __len__zTimer.__len__   s    4;;r'   c                     yr9   rQ   r6   s    r&   __nonzero__zTimer.__nonzero__   s    r'   c                |    t        | j                        }|gt        |      z  D cg c]
  } ||       c}S c c}w )z%Snapshot of underlying datastructure.)listrX   r   )r2   _popeventsvs       r&   r   zTimer.queue   s5     dkk""(CK!78AQ888s   9c                    | S r5   rQ   r6   s    r&   schedulezTimer.schedule   s    r'   rI   )r]   ztype[BaseException] | Noner^   zBaseException | Noner_   zTracebackType | NonereturnNone)rQ   Nr   )r>   rJ   rK   rL   r   rW   r3   rZ   r`   rc   rg   ro   r   rb   re   heapqheappushrs   r|   rr   r\   r   heappopr   r   r;   r   r   rO   r   r   rQ   r'   r&   r   r   _   s    %EH
, & %	
 
KO6, #' 1( 12	 D 16 G
 y]]!>   9 9
  r'   r   )(rL   
__future__r   r   syscollectionsr   r   	functoolsr   r   r   r   typingr	   weakrefr
   r1   
vine.utilsr   	kombu.logr   version_infozoneinfor   backports.zoneinfotypesr   __all__r>   rz   rU   fromtimestampr!   hasattrrM   r   r   r   r   rQ   r'   r&   <module>r      s    ( "  
 "  $     )   v!+#
,	H	 q(5/2
#*
+{$@A	 &.e_9 
 ( ( (VR Rr'   