
    leJi%`                        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	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 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/m0Z0 ddl1m2Z2m3Z3 dZ4 edd          Z5 e/e6          Z7e7j8        e7j9        e7j:        e7j;        f\  Z8Z9Z:Z;dZ< G d de=          Z> G d d          Z?e G d d                      Z@d ZAd  ZB G d! d"          ZC G d# d$eC          ZD G d% d&          ZE G d' d(e          ZF	  e              G d) d*e          ZGn# eH$ r dZGY nw xY wd,d+ZIdS )-zThe periodic task scheduler.    N)timegm)
namedtuple)total_ordering)UnpicklingError)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__     Q/var/www/html/movieo_spanner_bot/venv/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funcr2   r3   s       r.   __init__zBeatLazyFunc.__init__C   s$    

 
r-   c                 *    |                                  S N)delayr7   s    r.   __call__zBeatLazyFunc.__call__J   s    zz||r-   c                 H     | j         | j        d         i | j        d         S )Nr2   r3   r4   r=   s    r.   r<   zBeatLazyFunc.delayM   s)    tz4,V4T8I(8STTTr-   N)r(   r)   r*   r+   r9   r>   r<   r,   r-   r.   r0   r0   2   sP          
 
 
  U U U U Ur-   r0   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   )rB   nametaskr2   r3   optionsr   scheduledefault_nowlast_run_attotal_run_count)r7   rC   rD   rH   rI   rF   r2   r3   rE   relativerB   s              r.   r9   zScheduleEntry.__init__u   s     			 &.ffB")1wwr&xtxHHH&<$*:*:*<*<.3!r-   c                 t    | j         r| j                                         n| j                                        S r;   )rF   nowrB   r=   s    r.   rG   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   )rH   rI   r,   )	__class__dictrG   rI   )r7   rH   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;   )	rN   rC   rD   rH   rI   rF   r2   r3   rE   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``.
        )rD   rF   r2   r3   rE   N)__dict__updaterD   rF   r2   r3   rE   r7   others     r.   rU   zScheduleEntry.update   sI     	JENJ%,}
 
 	 	 	 	 	r-   c                 @    | j                             | j                  S )z.See :meth:`~celery.schedules.schedule.is_due`.)rF   is_duerH   r=   s    r.   rY   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,   )callrC   )formatr   rD   r2   r3   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NotImplementedrV   s     r.   __lt__zScheduleEntry.__lt__   s3    e]++ 	( d88bii''r-   c                 Z    dD ]'}t          | |          t          ||          k    r dS (dS )N)rD   r2   r3   rE   rF   FT)getattr)r7   rW   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``.
        )rl   rV   s     r.   __eq__zScheduleEntry.__eq__   s     ))%000r-   )
NNNNNr,   NNFNr;   )r(   r)   r*   r+   rC   rF   r2   r3   rE   rH   rI   r9   rG   _default_nowrP   __next__nextrR   rU   rY   r^   rc   rh   rl   rn   r,   r-   r.   r   r   Q   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,   re   r0   ).0vs     r.   
<listcomp>z(_evaluate_entry_args.<locals>.<listcomp>   sA        !\**1  r-   r,   )
entry_argss    r.   _evaluate_entry_argsry      s0     	    r-   c                 F    | si S d |                                  D             S )Nc                 X    i | ]'\  }}|t          |t                    r
 |            n|(S r,   rt   )ru   krv   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;   )rB   r   dataconfbeat_max_loop_intervalmax_intervalamqpProducer_heapold_schedulersbeat_sync_everysync_every_taskssetup_schedule)r7   rB   rF   r   r   lazyr   r3   s           r.   r9   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  )rD   rF   rE   )rB   r   result_expiresbackendsupports_autoexpirer   update_from_dict)r7   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advancerf   z%s sent. id->%sz%s sent.zMessage Error: %s
%sTexc_info)inforC   rD   apply_asynchasattrdebugrf   	Exceptionerror	tracebackformat_stack)r7   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,   )r7   ndrifts      r.   adjustzScheduler.adjust$  s!     	Qu9r-   c                 *    |                                 S r;   )rY   )r7   r&   s     r.   rY   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   rG   utctimetuplemicrosecond)r7   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   rF   valuesrY   appendr   )r7   r#   heapifyr%   r&   rY   next_call_delays          r.   populate_heapzScheduler.populate_heap6  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   rF   copyr   rY   reserver   r   r   r   )r7   r#   minheappopheappushr   r   Heventr&   rY   r   verify
next_entryadjusted_next_time_to_runs                  r.   tickzScheduler.tickF  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)r7   old_schedulesnew_schedulesrC   	old_entry	new_entrys         r.   r   zScheduler.schedules_equaln  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;   )rq   rF   rC   )r7   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   rB   tasksr   rD   ry   r2   r   r3   r   rE   r   r   _do_sync	send_taskr   r   r   ra   sysr   )	r7   r&   r   r   r3   rD   rx   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;   )rB   r   )r7   r2   r3   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_inplacerB   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 )NrB   r,   )EntryrB   rF   rC   )r7   r3   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)rC   rB   r,   )re   r   rB   rO   )r7   rC   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   )ru   rC   r&   r7   s      r.   r}   z.Scheduler.update_from_dict.<locals>.<dictcomp>  s?     
 
 
e $##D%00
 
 
r-   )rF   rU   r]   )r7   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   )rF   r   popr   rO   rB   r   rU   )r7   brF   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_connectionrB   r   broker_connection_max_retries)r7   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  r7   rF   s     r.   set_schedulezScheduler.set_schedule  s    			r-   c                 4    | j                                         S r;   )rB   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   rF   DEFAULT_MAX_INTERVALr   r   r   r   r   loggerr9   r   r   r   rY   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  superr9   )r7   r2   r3   rN   s      r.   r9   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  )r7   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!  )r7   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)ru   r&   s     r.   	<genexpr>z5PersistentScheduler.setup_schedule.<locals>.<genexpr>6  s9       07 07!DKK07 07 07 07 07 07r-   )r!  _storer   r   r#  _create_schedulerB   r   timezoner   warningclear
enable_utc
setdefaultr   r   r   rF   rU   r   r   r   joinr   )r7   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                 b   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                                          n# t          t          t
          t          f$ rb 	 i | j         d<   nS# t          t          t
          t          ft          j        z   $ 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-  r0  r1  KeyErrorUnicodeDecodeError	TypeErrorr   dbmr   r#  )r7   _r   s      r.   r.  z$PersistentScheduler._create_schedule9  sf    	 	A(I&& !33IJJJK%%'''',,@AAAK%%''''"$+55IJJJK%%'''! 0)_M   -/DK	** "4iQTWT]]   "&"G"G"L"LDKHHHHH +*" EE)	 	s;   B**D)
CD)*D#=DD)D##D)(D)c                     | j         d         S Nr   r-  r=   s    r.   r  z PersistentScheduler.get_scheduleP  s    {9%%r-   c                     || j         d<   d S r@  rA  r  s     r.   r  z PersistentScheduler.set_scheduleS  s    !)Ir-   c                 J    | j         | j                                          d S d S r;   )r-  r   r=   s    r.   r   zPersistentScheduler.syncW  s,    ;"K #"r-   c                 `    |                                   | j                                         d S r;   )r   r-  r   r=   s    r.   r   zPersistentScheduler.close[  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-  r9   r  r!  r#  r   r.  r  r  r  rF   r   r   r   __classcell__rN   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;   )
rB   r   r   r   scheduler_clsbeat_schedule_filenamer  r   _is_shutdown_is_stopped)r7   rB   r   r  rK  s        r.   r9   zService.__init__i  sf    ) = X< 	*@d.@@!@ 	 "GG 77r-   c                 D    | j         | j        | j        | j        | j        ffS r;   )rN   r   r  rK  rB   r=   s    r.   rR   zService.__reduce__u  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_titlerM  is_setr   r$   sleepr   r   KeyboardInterrupt
SystemExitr   r   )r7   embedded_processr   s      r.   startzService.starty  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;   )rS  r   rN  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   rM  r   rN  wait)r7   r`  s     r.   stopzService.stop  sO    %&&&(!&&((((((((r-   celery.beat_schedulersc                     | j         }t          t          |                    } t          | j        |          | j        || j        |          S )N)aliases)rB   r  r   r   )r  rO   r   r   rK  rB   r   )r7   r   extension_namespacefilenamerd  s        r.   get_schedulerzService.get_scheduler  s[    )12EFFGGB~d0'BBB&*	
 
 
 	
r-   c                 *    |                                  S r;   )rg  r=   s    r.   rS  zService.scheduler  s    !!###r-   )NNN)F)Frb  )r(   r)   r*   r+   r    rK  r9   rR   r]  r   ra  rg  r   rS  r,   r-   r.   r!   r!   d  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  r9   rB   r!   servicedaemonrC   r7   rB   r3   rN   s      r.   r9   z_Threaded.__init__  sI    s--f--			r-   c                 j    | j                                          | j                                         d S r;   )rB   set_currentrm  r]  r=   s    r.   runz_Threaded.run  s0    r-   c                 <    | j                             d           d S )NT)r`  )rm  ra  r=   s    r.   ra  z_Threaded.stop  s!    t$$$$$r-   )r(   r)   r*   r+   r9   rr  ra  rG  rH  s   @r.   rj  rj    s\        22      % % % % % % %r-   rj  c                   *     e Zd Z fdZd Zd Z xZS )_Processc                     t                                                       || _        t          |fi || _        d| _        d S )Nrl  )r  r9   rB   r!   rm  rC   ro  s      r.   r9   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)r\  )r
   r   close_open_fdsr   	__stdin__
__stdout__
__stderr__listr   rB   set_defaultrq  rm  r]  r=   s    r.   rr  z_Process.run  s    u%%%%$s~s~&)++,,&- . . . H  """H  """L55555r-   c                 `    | j                                          |                                  d S r;   )rm  ra  	terminater=   s    r.   ra  z_Process.stop  s,    LNNr-   )r(   r)   r*   r9   rr  ra  rG  rH  s   @r.   ru  ru    sV        	 	 	 	 		6 	6 	6	 	 	 	 	 	 	r-   ru  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   ru  rj  )rB   r   r3   s      r.   r"   r"     sW     zz(E"" 8h&6 7717777C==l=f===r-   r;   )Jr+   r   r=  r  r  r  rF  r   r$   r   calendarr   collectionsr   	functoolsr   pickler   	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   r0  r  r   r   r0   r   ry   r   r   r    r!   rj  ru  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'