
    nhk&                        d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZ dZ G d d	      Z G d
 d      Z e       ZddZddZddZy)z-Run a target function on a background thread.    )annotationsN)AnyOptional)create_task)_create_lockFc                  j    e Zd Z	 d	 	 	 	 	 	 	 ddZddZddZdddZdddZddZddZ	dd	Z
dd
Zy)AsyncPeriodicExecutorNc                t    d| _         || _        || _        || _        d| _        d| _        || _        d| _        y)a  Run a target function periodically on a background task.

        If the target's return value is false, the executor stops.

        :param interval: Seconds between calls to `target`.
        :param min_interval: Minimum seconds between calls if `wake` is
            called very often.
        :param target: A function.
        :param name: A name to give the underlying task.
        FN)_event	_interval_min_interval_target_stopped_task_name_skip_sleepselfintervalmin_intervaltargetnames        /var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/pymongo/periodic_executor.py__init__zAsyncPeriodicExecutor.__init__!   s>    " !)-1

     c                j    d| j                   j                   d| j                   dt        |       ddS N<z(name=z) object at 0xx>	__class____name__r   idr   s    r   __repr__zAsyncPeriodicExecutor.__repr__;   4    4>>**+6$**^BtHUV<WXYYr   c                    d| _         | j                  N| j                  j                         ra| j                  j                         sF| j                  j	                         s+t        | j                         | j                        | _        yyyy)z%Start. Multiple calls have no effect.FN)r   )r   r   done	cancelled
cancellingr   _runr   r%   s    r   openzAsyncPeriodicExecutor.open>   sd    ::JJOOdjj&:&:&<TZZEZEZE\$TYY[tzzBDJ F]&<r   c                `    d| _         | j                  | j                  j                          yyzStop. To restart, call open().

        The dummy parameter allows an executor's close method to be a weakref
        callback; see monitor.py.
        TN)r   r   cancelr   dummys     r   closezAsyncPeriodicExecutor.closeG   s*     ::!JJ "r   c                ~   K   | j                   +t        j                  | j                   g|       d {    y y 7 w)N)timeout)r   asynciowaitr   r5   s     r   joinzAsyncPeriodicExecutor.joinQ   s2     ::!,,

|W=== "=s   2=;=c                    d| _         yz!Execute the target function soon.TNr   r%   s    r   wakezAsyncPeriodicExecutor.wakeU   	    r   c                    || _         y Nr   r   new_intervals     r   update_intervalz%AsyncPeriodicExecutor.update_intervalY   	    %r   c                    d| _         y NTr   r%   s    r   
skip_sleepz AsyncPeriodicExecutor.skip_sleep\   
    r   c                  K   | j                   s| j                  r*| j                  j                         rt        j                  	 | j                          d {   sd| _         y 	 | j                  rd| _        nt        j                         | j                  z   }| j                   sot        j                         |k  rXt        j                  | j                         d {    | j                  rn$| j                   st        j                         |k  rXd| _        | j                   sy y 7 # t        $ r	 d| _          w xY w7 cwNTF)r   r   r+   r6   CancelledErrorr   BaseExceptionr   time	monotonicr   sleepr   r   r   deadlines     r   r,   zAsyncPeriodicExecutor._run_   s     --zzdjj335,,,!\\^++$(DM , #( >>+dnn<--DNN,<x,G!--(:(:;;;{{ --DNN,<x,G
  DK+ -- , !  $ <sI   AED1 D/D1 &A<E"E#4EE-E/D1 1EEr@   r   floatr   rU   r   r   r   zOptional[str]returnstrrW   Noner2   r   rW   rZ   r5   zOptional[int]rW   rZ   rC   intrW   rZ   )r#   
__module____qualname__r   r&   r-   r3   r9   r=   rD   rI   r,    r   r   r	   r	       s\     #!! ! 	!
 !4ZC >&  r   r	   c                  r    e Zd Z	 d	 	 	 	 	 	 	 ddZddZddZdddZdddZddZddZ	dd	Z
dd
ZddZy)PeriodicExecutorNc                    d| _         || _        || _        || _        d| _        d| _        || _        d| _        d| _        t               | _
        y)a  Run a target function periodically on a background thread.

        If the target's return value is false, the executor stops.

        :param interval: Seconds between calls to `target`.
        :param min_interval: Minimum seconds between calls if `wake` is
            called very often.
        :param target: A function.
        :param name: A name to give the underlying thread.
        FN)r   r   r   r   r   _threadr   r   _thread_will_exitr   _lockr   s        r   r   zPeriodicExecutor.__init__y   sO    * !)37
 !&!^
r   c                j    d| j                   j                   d| j                   dt        |       ddS r   r!   r%   s    r   r&   zPeriodicExecutor.__repr__   r'   r   c                   | j                   5  | j                  r)	 | j                  J | j                  j                          d| _        d| _        ddd       d}	 | j                  xr | j                  j                         }|sit        j                  | j                  | j                        }d|_        t        j                  |      | _        t        |        	 |j                          yy# t        $ r Y w xY w# 1 sw Y   xY w# t        $ r Y w xY w# t         $ r3}dt#        |      v st%        j&                         rd| _        Y d}~y d}~ww xY w)zgStart. Multiple calls have no effect.

        Not safe to call from multiple threads at once.
        NF)r   r   Tzinterpreter shutdown)rg   rf   re   r9   ReferenceErrorr   is_alive	threadingThreadr,   r   daemonweakrefproxy_register_executorstartRuntimeErrorrX   sysis_finalizing)r   startedthreades       r   r-   zPeriodicExecutor.open   s3   
 ZZ 	"%%
<<333LL%%' &+D"!DM	" 	ll>t||'<'<'>G
 %%TYYTZZHF FM"==0DLt$  & 	" 	""  		   )SV3s7H7H7J#'DL	s^   C?(C0C?(D D 0	C<9C?;C<<C??D	DD	E#(EEEc                    d| _         yr/   )r   r1   s     r   r3   zPeriodicExecutor.close   s     r   c                    | j                   	 | j                   j                  |       y y # t        t        f$ r Y y w xY wr@   )re   r9   rj   rs   r8   s     r   r9   zPeriodicExecutor.join   sA    <<#!!'* $ #L1 s   + ==c                    d| _         yr;   r<   r%   s    r   r=   zPeriodicExecutor.wake   r>   r   c                    || _         y r@   rA   rB   s     r   rD   z PeriodicExecutor.update_interval   rE   r   c                    d| _         y rG   rH   r%   s    r   rI   zPeriodicExecutor.skip_sleep   rJ   r   c                    | j                   5  | j                  rd| _        	 d d d        y	 d d d        y# 1 sw Y   y xY wrL   )rg   r   rf   r%   s    r   _should_stopzPeriodicExecutor._should_stop   s?    ZZ 	}})-&	 	 		 	 	s   55>c                T   | j                         s	 | j                         sd| _        y 	 | j                  rd| _        nt        j                         | j                  z   }| j                  sgt        j                         |k  rPt        j                  | j                         | j                  rn$| j                  st        j                         |k  rPd| _        | j                         sy y # t        $ r1 | j                  5  d| _        d| _        d d d         # 1 sw Y    xY ww xY wrL   )r   r   r   rN   rg   rf   r   rO   rP   r   rQ   r   r   rR   s     r   r,   zPeriodicExecutor._run   s    ##%
||~$(DM & #( >>+dnn<--DNN,<x,GJJt112{{ --DNN,<x,G
  DK- ##% ! ZZ 2$(DM-1D*2 	2 s#   C- -D'D	D'D#	D'r@   rT   rV   rY   r[   r\   r]   )rW   bool)r#   r_   r`   r   r&   r-   r3   r9   r=   rD   rI   r   r,   ra   r   r   rc   rc   x   sb     #$$ $ 	$
 $@Z'R&  r   rc   c                b    t        j                  | t              }t        j	                  |       y r@   )ro   ref_on_executor_deleted
_EXECUTORSadd)executorr   s     r   rq   rq   	  s    
++h 4
5CNN3r   c                .    t         j                  |        y r@   )r   remove)r   s    r   r   r     s    cr   c                     t         y t        t               } | D ]  } |       }|s|j                           | D ]  } |       }|s|j                  d        d }y )N   )r   listr3   r9   )	executorsr   r   s      r   _shutdown_executorsr     sj     Z I  5NN  5MM!
 Hr   )r   rc   rW   rZ   )r   z'weakref.ReferenceType[PeriodicExecutor]rW   rZ   rY   )__doc__
__future__r   r6   rt   rl   rO   ro   typingr   r   pymongo._asyncio_taskr   pymongo.lockr   _IS_SYNCr	   rc   setr   rq   r   r   ra   r   r   <module>r      s\    4 "  
      - %U  U pE  E \ U

r   