
    (phG.                        S SK J r Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJrJrJ r   SSK!J"r"   " S S\RF                  5      r$ " S S\RJ                  5      r& " S S\$5      r' " S S\RJ                  5      r( " S S\$5      r)S r*S r+ " S S\RF                  5      r, " S  S!\RF                  5      r-g")#    )datetime	timedelta)	iskeyword)ValidationError)models)Q)truncatechars)reverse)timezone)cached_property)format_html)gettext_lazy)PickledObjectField)croniter)SignedPackage)
add_months	add_years	localtime   )get_func_reprc                   P   \ rS rSr\R
                  " SSSS9r\R
                  " SSS9r\R
                  " SS	9r\R
                  " SSS
9r	\
" SSS9r\
" SSS9r\
" SSS9r\R
                  " SSSS9r\R
                  " SSSSS9r\R                   " SS9r\R                   " SS9r\R&                  " SSS9r\R*                  " SS9r\S 5       r\S#S j5       rS#S jr\S#S j5       rS#S jr\S#S j5       rS#S jr\S 5       r\S$S j5       r S r!\"S 5       r#S r$ " S  S!5      r%S"r&g)%Task       TF)
max_lengthprimary_keyeditabled   )r   r      )r   )r   null)r    protocol)r   r   r    N)r   defaultr    blank)r   )r#   r   r   )r#   c                 ~   [        U 5      S:X  aW  [        R                  R                  U S9R	                  5       (       a'  [        R                  R                  U S9R                  $ [        R                  R                  U S9R	                  5       (       a'  [        R                  R                  U S9R                  $ g Nr   id)name)lenr   objectsfilterexistsgetresulttask_ids    B/var/www/html/venv/lib/python3.13/site-packages/django_q/models.py
get_resultTask.get_result)   s    w<2$,,"5"5"5"A"H"H"J"J<<##w#/666\\  g .5577<<###1888 8    c                     U(       a-  [         R                  R                  U S9R                  SSS9nU$ [         R                  R                  U S9R	                  SS9R                  SSS9nU$ )Ngroupr/   T)flatFsuccess)r   r+   r,   values_listexclude)group_idfailuresvaluess      r2   get_result_groupTask.get_result_group0   sv    \\((x(8DDt E F 	 ##(#3'XD1 
 r5   c                 ^    U R                   (       a  U R                  U R                   U5      $ g N)r8   rA   selfr?   s     r2   group_resultTask.group_result>   s%    ::((X>> r5   c                     U(       a+  [         R                  R                  U S9R                  5       $ [        R                  R                  U S9R                  5       $ Nr7   )Failurer+   r,   countr   r>   r?   s     r2   get_group_countTask.get_group_countB   sG    ??)))9??AA||"""288::r5   c                 ^    U R                   (       a  U R                  U R                   U5      $ g rD   )r8   rN   rE   s     r2   group_countTask.group_countH   s%    ::''

H== r5   c                     [         R                  R                  U S9nU(       a  UR                  5       $ UR	                  S S9$ rJ   )r   r+   r,   deleteupdate)r>   r+   r8   s      r2   delete_groupTask.delete_groupL   s9    ##(#3<<>!||$|''r5   c                 ^    U R                   (       a  U R                  U R                   U5      $ g rD   )r8   rV   )rF   taskss     r2   group_deleteTask.group_deleteS   s%    ::$$TZZ77 r5   c                 V   [        U 5      S:X  aM  [        R                  R                  U S9R	                  5       (       a  [        R                  R                  U S9$ [        R                  R                  U S9R	                  5       (       a  [        R                  R                  U S9$ g r&   )r*   r   r+   r,   r-   r.   r0   s    r2   get_taskTask.get_taskW   s    w<2$,,"5"5"5"A"H"H"J"J<<##w#//\\  g .5577<<###11 8r5   c                     U(       a  [         R                  R                  U S9$ [         R                  R                  U S9R                  SS9$ )Nr7   Fr:   )r   r+   r,   r=   rM   s     r2   get_task_groupTask.get_task_group^   sC    <<&&X&66||"""2::5:IIr5   c                 P    U R                   U R                  -
  R                  5       $ rD   )stoppedstartedtotal_secondsrF   s    r2   
time_takenTask.time_takend   s    t||+::<<r5   c                 .    [        U R                  S5      $ )Nr   )r	   r/   rf   s    r2   short_resultTask.short_resultg   s    T[[#..r5   c                 B    U R                   =(       d    U R                   $ rD   )r)   r(   rf   s    r2   __str__Task.__str__k   s    ))&tww'(r5   c                   P    \ rS rSrSrS/r\R                  " S/ SQ\" SS9S9/r	S	r
g
)	Task.Metan   django_q-stoppedsuccess_index)r8   r)   funcTr:   )r)   fields	condition N)__name__
__module____qualname____firstlineno__	app_labelorderingr   Indexr   indexes__static_attributes__rx   r5   r2   Metarp   n   s.    	<LL$0D/
r5   r   rx   )F)T)'ry   rz   r{   r|   r   	CharFieldr(   r)   ru   hookr   argskwargsr/   r8   clusterDateTimeFieldrd   rc   BooleanFieldr;   IntegerFieldattempt_countstaticmethodr3   rA   rG   rN   rQ   rV   rZ   r]   r`   rg   propertyrj   rm   r   r   rx   r5   r2   r   r      s   			RTE	JBsU;Ds+Ds6D4"5DTB7FTB7Fe$GE#t$dSG""E2G""E2G!!$?G''2M9 9  ? ; ;
> ( (8 2 2 J J
= / /)	
 	
r5   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )SuccessManagerz   c                 B   > [         [        U ]  5       R                  SS9$ )NTr:   )superr   get_querysetr,   rF   	__class__s    r2   r   SuccessManager.get_queryset{   s!    ^T79@@@NNr5   rx   ry   rz   r{   r|   r   r   __classcell__r   s   @r2   r   r   z   s    O Or5   r   c                   6    \ rS rSr\" 5       r " S S5      rSrg)Success   c                   B    \ rS rSrSr\" S5      r\" S5      rS/rSr	Sr
g)	Success.Meta   rr   zSuccessful taskzSuccessful tasksrs   Trx   Nry   rz   r{   r|   r}   _verbose_nameverbose_name_pluralr~   proxyr   rx   r5   r2   r   r      s*    	*+ 23<r5   r   rx   N)ry   rz   r{   r|   r   r+   r   r   rx   r5   r2   r   r          G r5   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )FailureManager   c                 B   > [         [        U ]  5       R                  SS9$ )NFr:   )r   r   r   r,   r   s    r2   r   FailureManager.get_queryset   s!    ^T79@@@OOr5   rx   r   r   s   @r2   r   r      s    P Pr5   r   c                   6    \ rS rSr\" 5       r " S S5      rSrg)rK      c                   B    \ rS rSrSr\" S5      r\" S5      rS/rSr	Sr
g)	Failure.Meta   rr   zFailed taskzFailed tasksrs   Trx   Nr   rx   r5   r2   r   r      s(    	'/<r5   r   rx   N)ry   rz   r{   r|   r   r+   r   r   rx   r5   r2   rK   rK      r   r5   rK   c                     [         (       d  [        [        S5      5      e [         R                  " U 5        g ! [         a  n[        U5      eS nAff = f)N2Please install croniter to enable cron expressions)r   ImportErrorr   expand
ValueErrorr   )valuees     r2   validate_cronr      sD    8!PQRR! !a  !s   8 
AAAc                 P    U R                  5       =(       a    [        U 5      (       + $ rD   )isidentifierr   )r   s    r2   validate_kwargr      s    8	%(8$88r5   c                     ^  \ rS rSr\R
                  " SSSS9r\R
                  " SSS9r\R
                  " SSSSS	9r\R                  " SS\
" S
5      S9r\R                  " SS\
" S5      S9rSrSrSrSrSrSrSrSrSrSrSr\\
" S5      4\\
" S5      4\\
" S5      4\\
" S5      4\\
" S5      4\\
" S5      4\\
" S5      4\\
" S5      4\\
" S 5      4\\
" S!5      4\\
" S"5      44r\R
                  " S#\\S$   S$   \
" S%5      S&9r\R4                  " SS\
" S'5      S9r\R8                  " S(\
" S)5      \
" S*5      S+9r\R<                  " \
" S,5      \R@                  SS-9r!\R
                  " SSS\"/\
" S.5      S/9r#\R
                  " SSS0S19r$\R
                  " SS2SS\
" S35      S49r%\R
                  " SSS\&/\
" S55      S/9r'S@S6 jr(S7 r)S8 r*S9 r+U 4S: jr,S\)l-        \
" S;5      \)l.        S\*l/        \
" S<5      \*l.         " S= S>5      r0S?r1U =r2$ )ASchedule   r   T)r   r    r$   r   ze.g. module.tasks.functionr   	help_textz!e.g. module.tasks.result_function)r   r    r$   r   ze.g. 1, 2, 'John')r    r$   r   ze.g. x=1, y=2, name='John'OIHDWBWMBMr   YCOnceMinutesHourlyDailyWeeklyBiweeklyMonthly	Bimonthly	QuarterlyYearlyCron   r   zSchedule Type)r   choicesr#   r   z&Number of minutes for the Minutes typer!   Repeatszn = n times, -1 = forever)r#   r   r   zNext Run)r   r#   r    zCron expression)r   r    r$   
validatorsr   F)r   r    r   NName of the target cluster)r   r#   r    r$   r   z,Name of kwarg to pass intended schedule datec                 V   U=(       d    U R                   nU R                  U R                  :X  aP  [        (       d  [	        [        S5      5      e[        U R                  [        5       5      R                  [        5      $ U R                  U R                  :X  a  [        U R                  =(       d    SS9nGO~U R                  U R                  :X  a  [        SS9nGOYU R                  U R                  :X  a  [        SS9nGO4U R                  U R                  :X  a  [        SS9nGOU R                  U R                   :X  a
  [        SS9nOU R                  U R"                  :X  a!  [        [%        US5      U-
  R&                  S9nOU R                  U R(                  :X  a!  [        [%        US5      U-
  R&                  S9nOuU R                  U R*                  :X  a!  [        [%        US5      U-
  R&                  S9nO:U R                  U R,                  :X  a   [        [/        US5      U-
  R&                  S9nUW-  nU R                  U R                  U R                  U R,                  4;  a=  [        X-
  5      R1                  S S	9n[        U5      R1                  S S	9nXC-
  U-
  nX-  nU$ )
Nr   r   )minutes)hours)days)weeksr      )tzinfo)next_runschedule_typeCRONr   r   r   cronr   get_nextr   MINUTESr   r   HOURLYDAILYWEEKLYBIWEEKLYMONTHLYr   r   	BIMONTHLY	QUARTERLYYEARLYr   replace)rF   r   addcurrent_next_runnew_next_run
extra_diffs         r2   calculate_next_runSchedule.calculate_next_run   s)   ,t}}*8!JK  DIIy{3<<XFF-T\\%6Q8C4;;.!$C4::-#C4;;.!$C4==0!$C4<</*Xq"9H"D!J!JKC4>>1*Xq"9H"D!J!JKC4>>1*Xq"9H"D!J!JKC4;;.)Ha"88"C!I!IJC 	C dllDKK%MM(8@@@M$X.66d6CL '9S@J "Hr5   c                     U R                   (       a^  [        R                  R                  U R                   S9(       a1  [        R                  R	                  U R                   S9R
                  $ g g )Nr'   )taskr   r+   r,   r.   r;   rf   s    r2   r;   Schedule.success   sJ    99,,		,:<<##tyy#1999 ;9r5   c                 p   U R                   (       a  [        R                  R                  U R                   S9(       ay  [        R                  R	                  U R                   S9nUR
                  (       a  [        SUR                  4S9nO[        SUR                  4S9n[        SX!R                  5      $ g )Nr'   zadmin:django_q_success_change)r   zadmin:django_q_failure_changez<a href="{}">[{}]</a>)
r   r   r+   r,   r.   r;   r
   r(   r   r)   )rF   r   urls      r2   last_runSchedule.last_run$  s~    99,,		,:<<##tyy#1D||=TWWJO=TWWJO6YYGGr5   c                     U R                   $ rD   )ru   rf   s    r2   rm   Schedule.__str__.  s    yyr5   c                    > U R                   c/  U R                  U R                  :X  a  U R                  5       U l        [
        TU ]  " U0 UD6$ rD   )pkr   r   r   r   r   save)rF   r   r   r   s      r2   r  Schedule.save1  sA    77?t11TYY> 335DMw|T,V,,r5   r;   r   c                   >    \ rS rSrSr\" S5      r\" S5      rS/rSr	g)Schedule.Metai<  rr   zScheduled taskzScheduled tasksr   rx   N)
ry   rz   r{   r|   r}   r   r   r   r~   r   rx   r5   r2   r   r  <  s%    	)* 12<r5   r   )r   rD   )3ry   rz   r{   r|   r   r   r)   ru   r   	TextFieldr   r   r   ONCEr   r   r   r   r   r   r   r   r   r   TYPEr   PositiveSmallIntegerFieldr   r   repeatsr   r   nowr   r   r   r   r   r   intended_date_kwargr   r;   r   rm   r  booleanshort_description
allow_tagsr   r   r   r   s   @r2   r   r      s   sTBDs6RSD5	D TQ?R=STD+G)HF DGFEFHGIIFD	qy	!I,	8	'
	8	1Z=!	!I,	AkN#	AkN#	8	qyD $$dDGAJQEWM ..+S)TG !!9;V9WG ##z]HLLtH !?%&D sFD01G !**"#BC.`:- GO !)GH!":H   r5   r   c                       \ rS rSr\R
                  " S\" S5      S9r\R                  " 5       r	\R                  " S\" S5      S9r\S 5       rS	 rS
 rS rS rS rS rS r " S S5      rSrg)OrmQiC  r   r   r   Tz&Prevent any cluster from pulling until)r    r   c                      [         R                  " U R                  5      $ ! [         a%  nSSUR                  R
                  -   0s S nA$ S nAff = f)Nr(   *)r   loadspayload	Exceptionr   ry   )rF   r   s     r2   r   	OrmQ.taskJ  sF    	6 &&t||44 	6# 4 4455	6s   " 
AAAAc                 J    [        U R                  R                  S5      5      $ )Nru   )r   r   r.   rf   s    r2   ru   	OrmQ.funcQ  s    TYY]]6233r5   c                 8    U R                   R                  S5      $ )Nr(   r   r.   rf   s    r2   r1   OrmQ.task_idT  s    yy}}T""r5   c                 8    U R                   R                  S5      $ )Nr)   r  rf   s    r2   r)   	OrmQ.nameW      yy}}V$$r5   c                 8    U R                   R                  S5      $ )Nr8   r  rf   s    r2   r8   
OrmQ.groupZ  s    yy}}W%%r5   c                 8    U R                   R                  S5      $ )Nr   r  rf   s    r2   r   	OrmQ.args]  r  r5   c                 8    U R                   R                  S5      $ )Nr   r  rf   s    r2   r   OrmQ.kwargs`  s    yy}}X&&r5   c                     1 SknU R                   R                  5        VVs0 s H  u  p#X!;  d  M  X#_M     snn$ s  snnf )N>   r(   r   ru   r)   r8   r   )r   items)rF   r=   kvs       r2   	q_optionsOrmQ.q_optionsc  s7    C!%!2G!2a6F!2GGGs   ;;c                   8    \ rS rSrSr\" S5      r\" S5      rSrg)	OrmQ.Metaig  rr   zQueued taskzQueued tasksrx   N)	ry   rz   r{   r|   r}   r   r   r   r   rx   r5   r2   r   r,  g  s    	'/r5   r   rx   N)ry   rz   r{   r|   r   r   r   keyr  r  r   lockr   r   ru   r1   r)   r8   r   r   r)  r   r   rx   r5   r2   r  r  C  s    


cQ7S5T
UC GQGHD 6 64#%&%'H0 0r5   r  N).r   r   keywordr   django.core.exceptionsr   	django.dbr   django.db.modelsr   django.template.defaultfiltersr	   django.urlsr
   django.utilsr   django.utils.functionalr   django.utils.htmlr   django.utils.translationr   r   picklefieldr   django_q.confr   django_q.signingr   django_q.utilsr   r   r   utilsr   Modelr   Managerr   r   r   rK   r   r   r   r  rx   r5   r2   <module>r@     s    (  3   8  ! 3 ) 6 + # * ; ;  ]
6<< ]
@OV^^ O
d PV^^ P
d !9X v|| X v'06<< '0r5   