
    `f_                        d Z ddlZddlZddl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
 ddlmZ ddl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mZ ddlmZ ddlmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0 dZ1 edd          Z2 e,e3          Z4e4j5        e4j6        e4j7        e4j8        f\  Z5Z6Z7Z8dZ9 G d de:          Z; G d d          Z<e G d d                      Z=d Z>d Z? G d  d!          Z@ G d" d#e@          ZA G d$ d%          ZB G d& d'e          ZC	  e              G d( d)e          ZDn# eE$ r dZDY nw xY wd+d*ZFdS ),zThe periodic task scheduler.    N)timegm)
namedtuple)total_ordering)EventThread)ensure_multiprocessing)reset_signals)Process)maybe_evaluatereprcall)cached_property   )__version__	platformssignals)reraise)crontabmaybe_schedule)is_numeric_value)load_extension_class_namessymbol_by_name)
get_loggeriter_open_logger_fds)humanize_secondsmaybe_make_aware)SchedulingErrorScheduleEntry	SchedulerPersistentSchedulerServiceEmbeddedServiceevent_t)timepriorityentryi,  c                       e Zd ZdZdS )r   z*An error occurred while scheduling a task.N)__name__
__module____qualname____doc__     =/var/www/html/env/lib/python3.11/site-packages/celery/beat.pyr   r   ,   s        4444r,   r   c                   $    e Zd ZdZd Zd Zd ZdS )BeatLazyFuncao  A lazy function declared in 'beat_schedule' and called before sending to worker.

    Example:

        beat_schedule = {
            'test-every-5-minutes': {
                'task': 'test',
                'schedule': 300,
                'kwargs': {
                    "current": BeatCallBack(datetime.datetime.now)
                }
            }
        }

    c                 (    || _         ||d| _        d S )N)argskwargs_func_func_params)selffuncr1   r2   s       r-   __init__zBeatLazyFunc.__init__A   s$    

 
r,   c                 *    |                                  S N)delayr6   s    r-   __call__zBeatLazyFunc.__call__H   s    zz||r,   c                 H     | j         | j        d         i | j        d         S )Nr1   r2   r3   r<   s    r-   r;   zBeatLazyFunc.delayK   s)    tz4,V4T8I(8STTTr,   N)r'   r(   r)   r*   r8   r=   r;   r+   r,   r-   r/   r/   0   sP          
 
 
  U U U U Ur,   r/   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
	 	 	 ddZd ZeZddZexZZd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r   a  An entry in the scheduler.

    Arguments:
        name (str): see :attr:`name`.
        schedule (~celery.schedules.schedule): see :attr:`schedule`.
        args (Tuple): see :attr:`args`.
        kwargs (Dict): see :attr:`kwargs`.
        options (Dict): see :attr:`options`.
        last_run_at (~datetime.datetime): see :attr:`last_run_at`.
        total_run_count (int): see :attr:`total_run_count`.
        relative (bool): Is the time relative to when the server starts?
    Nr   r+   Fc                     |
| _         || _        || _        || _        |r|ni | _        |r|ni | _        t          ||	| j                   | _        |p|                                 | _	        |pd| _
        d S )N)appr   )rA   nametaskr1   r2   optionsr   scheduledefault_nowlast_run_attotal_run_count)r6   rB   rC   rG   rH   rE   r1   r2   rD   relativerA   s              r-   r8   zScheduleEntry.__init__s   s     			 &.ffB")1wwr&xtxHHH&<$*:*:*<*<.3!r,   c                 t    | j         r| j                                         n| j                                        S r:   )rE   nowrA   r<   s    r-   rF   zScheduleEntry.default_now   s,    &*mGt}  """Gr,   c           
      t     | j         di t          | |p|                                 | j        dz             S )z8Return new instance, with date and count fields updated.r   )rG   rH   r+   )	__class__dictrF   rH   )r6   rG   s     r-   _next_instancezScheduleEntry._next_instance   sU    t~  #9t'7'7'9'9 014!
 !
 !
   	r,   c           	      t    | j         | j        | j        | j        | j        | j        | j        | j        | j        ffS r:   )	rM   rB   rC   rG   rH   rE   r1   r2   rD   r<   s    r-   
__reduce__zScheduleEntry.__reduce__   s:    ~Ity$"2D4HM49dk4< 
 
 	
r,   c                 x    | j                             |j        |j        |j        |j        |j        d           dS )zUpdate values from another entry.

        Will only update "editable" fields:
            ``task``, ``schedule``, ``args``, ``kwargs``, ``options``.
        )rC   rE   r1   r2   rD   N)__dict__updaterC   rE   r1   r2   rD   r6   others     r-   rT   zScheduleEntry.update   sI     	JENJ%,}
 
 	 	 	 	 	r,   c                 @    | j                             | j                  S )z.See :meth:`~celery.schedules.schedule.is_due`.)rE   is_duerG   r<   s    r-   rX   zScheduleEntry.is_due   s    }##D$4555r,   c                 ^    t          t          |                                                     S r:   )itervarsitemsr<   s    r-   __iter__zScheduleEntry.__iter__   s"    DJJ$$&&'''r,   c                     d                     | t          | j        | j        pd| j        pi           t          |           j                  S )Nz%<{name}: {0.name} {call} {0.schedule}r+   )callrB   )formatr   rC   r1   r2   typer'   r<   s    r-   __repr__zScheduleEntry.__repr__   sL    6==$)TY_"dk6GRHHd$ > 
 
 	
r,   c                 z    t          |t                    r t          |           t          |          k     S t          S r:   )
isinstancer   idNotImplementedrU   s     r-   __lt__zScheduleEntry.__lt__   s3    e]++ 	( d88bii''r,   c                 Z    dD ]'}t          | |          t          ||          k    r dS (dS )N)rC   r1   r2   rD   rE   FT)getattr)r6   rV   attrs      r-   editable_fields_equalz#ScheduleEntry.editable_fields_equal   sA    E 	 	DtT""geT&:&:::uu ;tr,   c                 ,    |                      |          S )zTest schedule entries equality.

        Will only compare "editable" fields:
        ``task``, ``schedule``, ``args``, ``kwargs``, ``options``.
        )rk   rU   s     r-   __eq__zScheduleEntry.__eq__   s     ))%000r,   )
NNNNNr+   NNFNr:   )r'   r(   r)   r*   rB   rE   r1   r2   rD   rG   rH   r8   rF   _default_nowrO   __next__nextrQ   rT   rX   r]   rb   rg   rk   rm   r+   r,   r-   r   r   O   s         D H D F G K O9=FJ374 4 4 4H H HL    %$Ht
 
 

 
 
6 6 6( ( (
 
 
	 	 	  1 1 1 1 1r,   r   c                 "    | sg S d | D             S )Nc                 P    g | ]#}t          |t                    r
 |            n|$S r+   rd   r/   ).0vs     r-   
<listcomp>z(_evaluate_entry_args.<locals>.<listcomp>   sA        !\**1  r,   r+   )
entry_argss    r-   _evaluate_entry_argsrx      s0     	    r,   c                 F    | si S d |                                  D             S )Nc                 X    i | ]'\  }}|t          |t                    r
 |            n|(S r+   rs   )rt   kru   s      r-   
<dictcomp>z*_evaluate_entry_kwargs.<locals>.<dictcomp>   sG       Aq 	
*Q--4113331  r,   )r\   )entry_kwargss    r-   _evaluate_entry_kwargsr~      s<     	  &&((   r,   c                   Z   e Zd ZdZeZdZeZdZ	dZ
dZdZeZ	 	 d#dZd Zd$dZd%d
Zd ZefdZeej        fdZeeej        ej        fdZd Zd Zd Zd&dZ d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z, e-e+e,          Ze.d              Z/e.d!             Z0e-d"             Z1dS )'r   a  Scheduler for periodic tasks.

    The :program:`celery beat` program may instantiate this class
    multiple times for introspection purposes, but then with the
    ``lazy`` argument set.  It's important for subclasses to
    be idempotent when this argument is set.

    Arguments:
        schedule (~celery.schedules.schedule): see :attr:`schedule`.
        max_interval (int): see :attr:`max_interval`.
        lazy (bool): Don't set up the schedule.
    N   r   Fc                    || _         t          |i n|          | _        |p|j        j        p| j        | _        |p|j        j        | _        d | _        d | _	        ||j        j
        n|| _        |s|                                  d S d S r:   )rA   r   dataconfbeat_max_loop_intervalmax_intervalamqpProducer_heapold_schedulersbeat_sync_everysync_every_taskssetup_schedule)r6   rA   rE   r   r   lazyr   r2   s           r-   r8   zScheduler.__init__   s    ")922xHH	) / X</!. 	 !5CH$5
"(8(@CH$$! 	  	"!!!!!	" 	"r,   c                     i }| j         j        j        r/| j         j        j        sd|vrdt          ddd          ddid|d<   |                     |           d S )Nzcelery.backend_cleanup04*expiresi  )rC   rE   rD   )rA   r   result_expiresbackendsupports_autoexpirer   update_from_dict)r6   r   entriess      r-   install_default_entriesz!Scheduler.install_default_entries
  sy    8=' 	7H$8	7't334 'S# 6 6 )9557 5701 	g&&&&&r,   c                 n   t          d|j        |j                   	 |                     ||d          }|r-t	          |d          rt          d|j        |j                   d S t          d|j                   d S # t          $ r/}t          d|t          j
                    d	           Y d }~d S d }~ww xY w)
Nz#Scheduler: Sending due task %s (%s)F)produceradvancere   z%s sent. id->%sz%s sent.zMessage Error: %s
%sTexc_info)inforB   rC   apply_asynchasattrdebugre   	Exceptionerror	tracebackformat_stack)r6   r%   r   resultexcs        r-   apply_entryzScheduler.apply_entry  s    2EJ
KKK		.%%eh%NNF
  .'&$// .'VY?????j%*-----  	@ 	@ 	@)y-//$@ @ @ @ @ @ @ @ @ @	@s   A; ;
B4$B//B4{Gzc                      |r|dk    r||z   S |S )Nr   r+   )r6   ndrifts      r-   adjustzScheduler.adjust"  s!     	Qu9r,   c                 *    |                                 S r:   )rX   )r6   r%   s     r-   rX   zScheduler.is_due'  s    ||~~r,   c                     | j         }t          |                                          } ||                                          |j        dz  z    ||          pdz   S )z9Return a utc timestamp, make sure heapq in correct order.g    .Ar   )r   r   rF   utctimetuplemicrosecond)r6   r%   next_time_to_runmktimer   as_nows         r-   _whenzScheduler._when*  sh    !%"3"3"5"566v**,,--"S()()).Q0 	1r,   c           	         d}g | _         | j                                        D ]X}|                                \  }}| j                              ||                     ||rdn|          pd||                     Y || j                    dS )z:Populate the heap with the data contained in the schedule.   r   N)r   rE   valuesrX   appendr   )r6   r"   heapifyr$   r%   rX   next_call_delays          r-   populate_heapzScheduler.populate_heap4  s    
]))++ 	 	E&+llnn#FOJgg

4AA_   %      	
r,   c           	         | j         }| j        }| j         |                     | j        | j                  s2t          j        | j                  | _        |                                  | j        }|s|S |d         }|d         }	|                     |	          \  }
}|
r ||          }||u rd| 	                    |	          }| 
                    |	| j                    || ||                     ||          |d         |                     dS  |||            ||d         |          S  ||          } |t          |          r|n||          S )zRun a tick - one iteration of the scheduler.

        Executes one due task per call.

        Returns:
            float: preferred delay in seconds for next call.
        Nr      )r   r   )r   r   r   schedules_equalr   rE   copyr   rX   reserver   r   r   r   )r6   r"   minheappopheappushr   r   Heventr%   rX   r   verify
next_entryadjusted_next_time_to_runs                  r-   tickzScheduler.tickD  s    (J(()<dmLL "&)DM":":D   J 	 !a#';;u#5#5   
	4WQZZF!\\%00
   ???GGDJJz;K$L$L$)!Hj: : ; ; ;qF###s6!9l333$*F+;$<$<!s0@AZ0[0[m,,am! ! 	!r,   c                 0   ||cxu rn ndS ||dS t          |                                          t          |                                          k    rdS |                                D ](\  }}|                    |          }|s dS ||k    r dS )dS )NTF)setkeysr\   get)r6   old_schedulesnew_schedulesrB   	old_entry	new_entrys         r-   r   zScheduler.schedules_equall  s    M111111114 M$95}!!##$$M,>,>,@,@(A(AAA5,2244 	 	OD)%))$//I uuI%%uu &tr,   c                     | j          p:t          j                    | j         z
  | j        k    p| j        o| j        | j        k    S r:   )
_last_syncr#   	monotonic
sync_everyr   _tasks_since_syncr<   s    r-   should_synczScheduler.should_sync{  sL      Dn0DOC>" =#t'<<		
r,   c                 B    t          |          x}| j        |j        <   |S r:   )rp   rE   rB   )r6   r%   r   s      r-   r   zScheduler.reserve  s!    04U;	DM%*-r,   Tc           
         |r|                      |          n|}| j        j                            |j                  }	 t          |j                  }t          |j                  }|rO |j	        ||fd|i|j
        | xj        dz  c_        |                                 r|                                  S S  | j        |j        ||fd|i|j
        | xj        dz  c_        |                                 r|                                  S S # t          $ rY}t!          t"          t#          d                    ||                    t'          j                    d                    Y d }~nd }~ww xY w	 | xj        dz  c_        |                                 r|                                  d S d S # | xj        dz  c_        |                                 r|                                  w w xY w)Nr   r   z-Couldn't apply scheduled task {0.name}: {exc})r   r   )r   rA   tasksr   rC   rx   r1   r~   r2   r   rD   r   r   _do_sync	send_taskr   r   r   r`   sysr   )	r6   r%   r   r   r2   rC   rw   r}   r   s	            r-   r   zScheduler.apply_async  sP    (/9U###Ex~!!%*--	 -ej99J1%,??L 7't'
L 9 9199*/-9 9 ""a'""!!    &t~ej*l 7 7/77(-7 7 ""a'""!!     	9 	9 	9O_?FFs G $ $&% &%&)lnnQ&79 9 9 9 9 9 9 9	99 ""a'""!!      ""a'""!!   s0   ?D 8D 
E0AE+&F0 +E00F0 0;G+c                 &     | j         j        |i |S r:   )rA   r   )r6   r1   r2   s      r-   r   zScheduler.send_task  s    !tx!426222r,   c                     |                      | j                   |                     | j        j        j                   d S r:   )r   r   merge_inplacerA   r   beat_scheduler<   s    r-   r   zScheduler.setup_schedule  s9    $$TY///48=677777r,   c                     	 t          d           |                                  t          j                    | _        d| _        d S # t          j                    | _        d| _        w xY w)Nzbeat: Synchronizing schedule...r   )r   syncr#   r   r   r   r<   s    r-   r   zScheduler._do_sync  sf    	'3444IIKKK"n..DO%&D""" #n..DO%&D"&&&&s   #A !A'c                     d S r:   r+   r<   s    r-   r   zScheduler.sync  s    r,   c                 .    |                                   d S r:   )r   r<   s    r-   closezScheduler.close  s    		r,   c                 L     | j         dd| j        i|}|| j        |j        <   |S )NrA   r+   )EntryrA   rE   rB   )r6   r2   r%   s      r-   addzScheduler.add  s3    
22tx2622$)ej!r,   c           	          t          || j                  r| j        |_        |S  | j        di t          ||| j                  S N)rB   rA   r+   )rd   r   rA   rN   )r6   rB   r%   s      r-   _maybe_entryzScheduler._maybe_entry  sM    eTZ(( 	EILtzAADTtx@@@AAAr,   c                 x      j                              fd|                                D                        d S )Nc                 D    i | ]\  }}|                     ||          S r+   )r   )rt   rB   r%   r6   s      r-   r|   z.Scheduler.update_from_dict.<locals>.<dictcomp>  s?     
 
 
e $##D%00
 
 
r,   )rE   rT   r\   )r6   dict_s   ` r-   r   zScheduler.update_from_dict  sU     
 
 
 
${{}}
 
 
 	 	 	 	 	r,   c           
      R   | j         }t          |          t          |          }}||z  D ]}|                    |d            |D ]`} | j        di t	          ||         || j                  }|                    |          r||                             |           [|||<   ad S r   )rE   r   popr   rN   rA   r   rT   )r6   brE   ABkeyr%   s          r-   r   zScheduler.merge_inplace  s    =8}}c!ff1 q5 	$ 	$CLLd####  	& 	&CDJFFaf3DH!E!E!EFFE||C   &$$U++++ %	& 	&r,   c                 \    d }| j                             || j        j        j                  S )Nc                 (    t          d| |           d S )Nz9beat: Connection error: %s. Trying again in %s seconds...)r   )r   intervals     r-   _error_handlerz3Scheduler._ensure_connected.<locals>._error_handler  s-     236B B B B Br,   )
connectionensure_connectionrA   r   broker_connection_max_retries)r6   r   s     r-   _ensure_connectedzScheduler._ensure_connected  s<    	B 	B 	B 00DHMG
 
 	
r,   c                     | j         S r:   r   r<   s    r-   get_schedulezScheduler.get_schedule  s
    yr,   c                     || _         d S r:   r   r6   rE   s     r-   set_schedulezScheduler.set_schedule  s    			r,   c                 4    | j                                         S r:   )rA   connection_for_writer<   s    r-   r   zScheduler.connection  s    x,,...r,   c                 T    |                      |                                 d          S )NF)auto_declare)r   r   r<   s    r-   r   zScheduler.producer  s$    }}T3355E}JJJr,   c                     dS )N r+   r<   s    r-   r   zScheduler.info  s    rr,   )NNNFNr:   )r   )NT)2r'   r(   r)   r*   r   r   rE   DEFAULT_MAX_INTERVALr   r   r   r   r   loggerr8   r   r   r   rX   r   r   r"   heapqr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  propertyr   r   r   r   r+   r,   r-   r   r      sh         E H (L J JF8<=A" " " " 	' 	' 	'. . . .   
   5; 1 1 1 1 %,U]      #U]n&! &! &! &!P  
 
 
         63 3 38 8 8' ' '      
B B B  & & & 	
 	
 	
    xl33H/ / _/ K K _K   X  r,   r   c                        e Zd ZdZeZdZdZ fdZd Z	d Z
d Zd Zd	 Zd
 Zd Z eee          Zd Zd Zed             Z xZS )r   z+Scheduler backed by :mod:`shelve` database.)r
  z.dbz.datz.bakz.dirNc                 n    |                     d          | _         t                      j        |i | d S )Nschedule_filename)r   r  superr8   )r6   r1   r2   rM   s      r-   r8   zPersistentScheduler.__init__  s:    !',?!@!@$)&)))))r,   c                     | j         D ]T}t          j        t          j                  5  t          j        | j        |z              d d d            n# 1 swxY w Y   Ud S r:   )known_suffixesr   ignore_errnoerrnoENOENTosremover  )r6   suffixs     r-   
_remove_dbzPersistentScheduler._remove_db  s    ) 	; 	;F'55 ; ;	$069:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	;s   AA	A	c                 D    | j                             | j        d          S )NT)	writeback)persistenceopenr  r<   s    r-   _open_schedulez"PersistentScheduler._open_schedule  s!    $$T%;t$LLLr,   c                     t          d| j        |d           |                                  |                                 S )Nz'Removing corrupted schedule file %r: %rTr   )r   r  r  r   )r6   r   s     r-    _destroy_open_corrupted_schedulez4PersistentScheduler._destroy_open_corrupted_schedule  sH    7$cD	: 	: 	: 	:""$$$r,   c                 0   	 |                                  | _        | j                                         n1# t          $ r$}|                     |          | _        Y d }~nd }~ww xY w|                                  | j        j        j        }| j        	                    d          }|0||k    r*t          d||           | j                                         | j        j        j        }| j        	                    d          }|A||k    r;ddd}t          d||         ||                    | j                                         | j                            di           }|                     | j        j        j                   |                     | j                   | j                            t&          ||d	           |                                  t+          d
d                    d |                                D                       z              d S )Ntzz%Reset: Timezone changed from %r to %rutc_enabledenableddisabled)TFz Reset: UTC changed from %s to %sr   )r   r$  r%  zCurrent schedule:

c              3   4   K   | ]}t          |          V  d S r:   )repr)rt   r%   s     r-   	<genexpr>z5PersistentScheduler.setup_schedule.<locals>.<genexpr>4  s9       07 07!DKK07 07 07 07 07 07r,   )r   _storer   r   r"  _create_schedulerA   r   timezoner   warningclear
enable_utc
setdefaultr   r   r   rE   rT   r   r   r   joinr   )r6   r   r$  	stored_tzutc
stored_utcchoicesr   s           r-   r   z"PersistentScheduler.setup_schedule  s/   		E--//DK K 	E 	E 	E??DDDKKKKKK	E 	X]#KOOD))	 Y"__;YKKKKhm&[__]33
!jC&7&7&z::G6J'7 7 7K+((B7748=6777$$T]333&
 
 	 	 	
 			#dii 07 07%,^^%5%507 07 07 '7 '7 7 	8 	8 	8 	8 	8s   25 
A#AA#c                    dD ]}	 | j         d          d| j         vr)t          d           | j                                          nd| j         vr)t          d           | j                                          nd| j         vr(t          d           | j                                          nN# t          $ rA 	 i | j         d<   n2# t          $ r%}|                     |          | _         Y d }~Y d }~ww xY wY nw xY w d S d S )	N)r   r   r   r   z+DB Reset: Account for new __version__ fieldr$  z"DB Reset: Account for new tz fieldr%  z+DB Reset: Account for new utc_enabled field)r,  r/  r0  KeyErrorr"  )r6   _r   s      r-   r-  z$PersistentScheduler._create_schedule7  sI    	 	A(I&& !33IJJJK%%'''',,@AAAK%%''''"$+55IJJJK%%'''!    -/DK	**   "&"G"G"L"LDKHHHHH +*" EE)	 	s;   B))
C44
B?>C4?
C.	C)#C4)C..C43C4c                     | j         d         S Nr   r,  r<   s    r-   r  z PersistentScheduler.get_scheduleN  s    {9%%r,   c                     || j         d<   d S r<  r=  r  s     r-   r  z PersistentScheduler.set_scheduleQ  s    !)Ir,   c                 J    | j         | j                                          d S d S r:   )r,  r   r<   s    r-   r   zPersistentScheduler.syncU  s,    ;"K #"r,   c                 `    |                                   | j                                         d S r:   )r   r,  r   r<   s    r-   r   zPersistentScheduler.closeY  s)    		r,   c                     d| j          S )Nz    . db -> )r  r<   s    r-   r   zPersistentScheduler.info]  s    6d4666r,   )r'   r(   r)   r*   shelver  r  r,  r8   r  r   r"  r   r-  r  r  r  rE   r   r   r   __classcell__rM   s   @r-   r   r     s       55K8NF* * * * *; ; ;
M M M% % %$8 $8 $8L  .& & &* * *xl33H     7 7 X7 7 7 7 7r,   r   c                   `    e Zd ZdZeZ	 	 ddZd ZddZd Z	ddZ
	 	 dd
Zed             ZdS )r    zCelery periodic task service.Nc                     || _         |p|j        j        | _        |p| j        | _        |p|j        j        | _        t                      | _        t                      | _	        d S r:   )
rA   r   r   r   scheduler_clsbeat_schedule_filenamer  r   _is_shutdown_is_stopped)r6   rA   r   r  rG  s        r-   r8   zService.__init__g  sf    ) = X< 	*@d.@@!@ 	 "GG 77r,   c                 D    | j         | j        | j        | j        | j        ffS r:   )rM   r   r  rG  rA   r<   s    r-   rQ   zService.__reduce__s  s*    ~ 143I $ 2DH > > 	>r,   Fc                 L   t          d           t          dt          | j        j                             t
          j                            |            |r4t
          j                            |            t          j
        d           	 | j                                        s| j                                        }|rk|dk    ret          dt          |d                     t          j        |           | j                                        r| j                                         | j                                        n0# t$          t&          f$ r | j                                         Y nw xY w|                                  d S # |                                  w xY w)	Nzbeat: Starting...z#beat: Ticking with max interval->%s)senderzcelery beatg        zbeat: Waking up %s.zin )prefix)r   r   r   	schedulerr   r   	beat_initsendbeat_embedded_initr   set_process_titlerI  is_setr   r#   sleepr   r   KeyboardInterrupt
SystemExitr   r   )r6   embedded_processr   s      r-   startzService.startw  s    !!!3t~:;;	= 	= 	= 	d+++ 	7&++4+888'666	'..00 2>..00 23/*8EBBBD D DJx(((~1133 2//111 '..00 2 ":. 	$ 	$ 	$!!#####	$ IIKKKKKDIIKKKKs+   B8E F *E41F 3E44F F#c                 j    | j                                          | j                                         d S r:   )rO  r   rJ  r   r<   s    r-   r   zService.sync  s1    r,   c                     t          d           | j                                         |o| j                                         d S  d S )Nzbeat: Shutting down...)r   rI  r   rJ  wait)r6   r\  s     r-   stopzService.stop  sO    %&&&(!&&((((((((r,   celery.beat_schedulersc                     | j         }t          t          |                    } t          | j        |          | j        || j        |          S )N)aliases)rA   r  r   r   )r  rN   r   r   rG  rA   r   )r6   r   extension_namespacefilenamer`  s        r-   get_schedulerzService.get_scheduler  s[    )12EFFGGB~d0'BBB&*	
 
 
 	
r,   c                 *    |                                  S r:   )rc  r<   s    r-   rO  zService.scheduler  s    !!###r,   )NNN)F)Fr^  )r'   r(   r)   r*   r   rG  r8   rQ   rY  r   r]  rc  r   rO  r+   r,   r-   r    r    b  s        '''MAE#
# 
# 
# 
#> > >   0  ) ) ) )
 "'*B	
 	
 	
 	
 $ $ _$ $ $r,   r    c                   .     e Zd ZdZ fdZd Zd Z xZS )	_Threadedz(Embedded task scheduler using threading.c                     t                                                       || _        t          |fi || _        d| _        d| _        d S )NTBeat)r  r8   rA   r    servicedaemonrB   r6   rA   r2   rM   s      r-   r8   z_Threaded.__init__  sI    s--f--			r,   c                 j    | j                                          | j                                         d S r:   )rA   set_currentri  rY  r<   s    r-   runz_Threaded.run  s0    r,   c                 <    | j                             d           d S )NT)r\  )ri  r]  r<   s    r-   r]  z_Threaded.stop  s!    t$$$$$r,   )r'   r(   r)   r*   r8   rn  r]  rC  rD  s   @r-   rf  rf    s\        22      % % % % % % %r,   rf  c                   *     e Zd Z fdZd Zd Z xZS )_Processc                     t                                                       || _        t          |fi || _        d| _        d S )Nrh  )r  r8   rA   r    ri  rB   rk  s      r-   r8   z_Process.__init__  sB    GGDH"311&11DLDIIIr,   c                 b   t          d           t          j        t          j        t          j        t          j        gt          t                                z              | j	        
                                 | j	                                         | j                            d           d S )NF)fullT)rX  )r	   r   close_open_fdsr   	__stdin__
__stdout__
__stderr__listr   rA   set_defaultrm  ri  rY  r<   s    r-   rn  z_Process.run  s    u%%%%$s~s~&)++,,&- . . . H  """H  """L55555r,   c                 `    | j                                          |                                  d S r:   )ri  r]  	terminater<   s    r-   r]  z_Process.stop  s,    LNNr,   )r'   r(   r)   r8   rn  r]  rC  rD  s   @r-   rq  rq    sV        	 	 	 	 		6 	6 	6	 	 	 	 	 	 	r,   rq  c                 x    |                     dd          st          t          | fddi|S t          | fd|i|S )zReturn embedded clock service.

    Arguments:
        thread (bool): Run threaded instead of as a separate process.
            Uses :mod:`multiprocessing` by default, if available.
    threadFNr   r   )r   rq  rf  )rA   r   r2   s      r-   r!   r!     sW     zz(E"" 8h&6 7717777C==l=f===r,   r:   )Gr*   r   r  r  r  rB  r   r#   r   calendarr   collectionsr   	functoolsr   	threadingr   r   billiardr   billiard.commonr	   billiard.contextr
   kombu.utils.functionalr   r   kombu.utils.objectsr   r
  r   r   r   
exceptionsr   	schedulesr   r   utils.functionalr   utils.importsr   r   	utils.logr   r   
utils.timer   r   __all__r"   r'   r  r   r   r   r/  r  r   r   r/   r   rx   r~   r   r   r    rf  rq  NotImplementedErrorr!   r+   r,   r-   <module>r     s   " "    				  



            " " " " " " $ $ $ $ $ $ # # # # # # # # + + + + + + ) ) ) ) ) ) $ $ $ $ $ $ ; ; ; ; ; ; ; ; / / / / / / - - - - - - - - - -       . . . . . . . . . . . . . . E E E E E E E E 7 7 7 7 7 7 7 7 : : : : : : : :
 *Y =
>
>	H		%|V[%|V^= tUG  5 5 5 5 5i 5 5 5U U U U U U U U> t1 t1 t1 t1 t1 t1 t1 t1n    [ [ [ [ [ [ [ [|h7 h7 h7 h7 h7) h7 h7 h7VC$ C$ C$ C$ C$ C$ C$ C$L% % % % % % % %$    7        HHH2> > > > > >s   :
E EE