
    jgm'                        d 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mZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZmZm Z  ddl!m"Z"  G d de      Z# G d dejH                        Z% G d dejL                        Z' e
jP                  e       G d de
jR                               Z* G d de
jV                        Z, G d de
jR                        Z- e
jP                  e       G d de-             Z. e
jP                  e       G d de-             Z/ e
jP                  e        G d  d!e-             Z0 e
jP                  e       G d" d#e-             Z1y$)%zPeriodic Task Admin interface.    )current_app)cached_property)forms)settings)adminmessages)CaseValueWhen)Select)	pluralize)gettext_lazy)ngettext_lazy)loads   )ClockedScheduleCrontabScheduleIntervalSchedulePeriodicTaskPeriodicTasksSolarSchedule)is_database_schedulerc                   b    e Zd ZdZeZdZd Zed        Z	e	j                  d        Z	ed        Zy)TaskSelectWidgetz/Widget that lets you choose between task names.Nc                     | j                   }t        d | j                  j                  D              }dt	        t        ||            z   S )Nc              3   B   K   | ]  }|j                  d       s|  yw)zcelery.N)
startswith).0names     S/var/www/html/Stanley/venv/lib/python3.12/site-packages/django_celery_beat/admin.py	<genexpr>z4TaskSelectWidget.tasks_as_choices.<locals>.<genexpr>   s$      :(="ooi8 (=s   )) r"   )_modulessorted
celery_apptaskstuplezip)self_r&   s      r    tasks_as_choicesz!TaskSelectWidget.tasks_as_choices   sB    MM :(=(= : :eCu$5666    c                 \    | j                   | j                         | _         | j                   S N)_choicesr+   r)   s    r    choiceszTaskSelectWidget.choices   s&    ==  113DM}}r,   c                      y r.    )r)   r*   s     r    r1   zTaskSelectWidget.choices%   s     	r,   c                 L    | j                   j                  j                          y r.   )r%   loaderimport_default_modulesr0   s    r    r#   zTaskSelectWidget._modules+   s    557r,   )__name__
__module____qualname____doc__r   r%   r/   r+   propertyr1   setterr   r#   r3   r,   r    r   r      sT    9JH7  
 ^^ 
 8 8r,   r   c                       e Zd ZdZeZd Zy)TaskChoiceFieldz.Field that lets you choose between task names.c                      y)NTr3   )r)   values     r    valid_valuezTaskChoiceField.valid_value5   s    r,   N)r7   r8   r9   r:   r   widgetrA   r3   r,   r    r>   r>   0   s    8Fr,   r>   c                        e Zd ZdZ e ed      d      Z ej                   ed      dd      Z	 G d d	      Z
 fd
Zd Zd Zd Z xZS )PeriodicTaskFormz4Form that lets you create and modify periodic tasks.zTask (registered)F)labelrequiredzTask (custom)   )rE   rF   
max_lengthc                       e Zd ZdZeZdZy)PeriodicTaskForm.MetazForm metadata.r3   N)r7   r8   r9   r:   r   modelexcluder3   r,   r    MetarJ   F   s    r,   rM   c                 n   t         |          }|j                  d      }|r||d<   |d   sHt        j                  t        d            }| j                  |j                        | j                  d<   ||j                  d      /|j                  d      rt        j                  t        d            |S )NregtasktaskzNeed name of taskexpire_secondsexpiresz2Only one can be set, in expires and expire_seconds)	supercleangetr   ValidationErrorr*   error_classr   _errors)r)   datarO   exc	__class__s       r    rT   zPeriodicTaskForm.cleanL   s    w}((9%"DLF|''*=(>?C#'#3#3CLL#ADLL I88$%1dhhy6I''FG  r,   c                     | j                   |   }	 t        |       |S # t        $ r&}t        j                  t        d      |z        d }~ww xY w)NzUnable to parse JSON: %s)cleaned_datar   
ValueErrorr   rV   r*   )r)   fieldr@   rZ   s       r    _clean_jsonzPeriodicTaskForm._clean_json\   sX    !!%(	%L
 	  	'',-3 	s    	A!AAc                 $    | j                  d      S )Nargsr`   r0   s    r    
clean_argszPeriodicTaskForm.clean_argsf   s    ''r,   c                 $    | j                  d      S )Nkwargsrc   r0   s    r    clean_kwargszPeriodicTaskForm.clean_kwargsi   s    ))r,   )r7   r8   r9   r:   r>   r*   rO   r   	CharFieldrP   rM   rT   r`   rd   rg   __classcell__r[   s   @r    rD   rD   9   sZ    >#$G 5?? D  (*r,   rD   c                       e Zd ZdZeZeZeZ	dZ
dZg dZdZdZddd	d
f ed      dd	d
f ed      ddd
f ed      ddd
ffZdZd ZdZ	 	 d" fd	Zd# fd	Z fdZ ej0                   ed            d        Z ej0                   ed            d        Zd Z ej0                   ed            d        Z ej0                   ed             d!        Z xZS )$PeriodicTaskAdminz#Admin-interface for periodic tasks.
start_time)r   enabled	schedulerintervalrm   last_run_atone_off)rn   rr   rP   rm   rq   )enable_tasksdisable_taskstoggle_tasks	run_tasks)r   N)r   rO   rP   rn   description)extraprettywide)fieldsclassesSchedule)rp   crontabcrontab_translationsolarclockedrm   rq   rr   	Arguments)rb   rf   )rx   ry   collapseinzExecution Options)rR   rQ   queueexchangerouting_keypriorityheaders)rq   r~   c                 .    |j                   j                  S r.   )r}   human_readable)r)   objs     r    r~   z%PeriodicTaskAdmin.crontab_translation   s    {{)))r,   z,admin/djcelery/change_periodictask_form.htmlc                     |xs i }t         j                  j                         }i }|D ]  }|j                  ||j                  <    ||d<   t
        |   |||      S )Nreadable_crontabs)extra_context)r   objectsallr   idrS   changeform_view)	r)   request	object_idform_urlr   crontabscrontab_dictr}   r[   s	           r    r   z!PeriodicTaskAdmin.changeform_view   so    %+"**..0G'.'='=L$  -9)*w&w	5B ' D 	Dr,   c                 p    |xs i }t        t        dd       }t        |       |d<   t        |   ||      S )NCELERY_BEAT_SCHEDULERwrong_scheduler)getattrr   r   rS   changelist_view)r)   r   r   ro   r[   s       r    r   z!PeriodicTaskAdmin.changelist_view   sF    %+H&=tD	/DY/O+O'(w&]$ 	$r,   c                 J    t         |   |      }|j                  dddd      S )Nrp   r}   r   r   )rS   get_querysetselect_related)r)   r   qsr[   s      r    r   zPeriodicTaskAdmin.get_queryset   s)    W!'*  YKKr,   zEnable selected tasks)rw   c                     |j                  d      }t        j                          | j                  |t	        dd|      j                  |             y )NTrn   z!{0} task was successfully enabledz#{0} tasks were successfully enabledupdater   update_changedmessage_userr   formatr)   r   querysetrows_updateds       r    rs   zPeriodicTaskAdmin.enable_tasks   sN      t4$$&35 f\"	
r,   zDisable selected tasksc                     |j                  dd       }t        j                          | j                  |t	        dd|      j                  |             y )NF)rn   rq   z"{0} task was successfully disabledz${0} tasks were successfully disabledr   r   s       r    rt   zPeriodicTaskAdmin.disable_tasks   sP      u$G$$&46 f\"	
r,   c           
      v    |j                  t        t        dt        d            t        d                  S )NTF)rn   then)defaultr   )r   r	   r   r
   )r)   r   s     r    _toggle_tasks_activityz(PeriodicTaskAdmin._toggle_tasks_activity   s1    tE%L1$K(
  	r,   z!Toggle activity of selected tasksc                     | j                  |      }t        j                          | j                  |t	        dd|      j                  |             y )Nz!{0} task was successfully toggledz#{0} tasks were successfully toggled)r   r   r   r   r   r   r   s       r    ru   zPeriodicTaskAdmin.toggle_tasks   sN     228<$$&35 f\"	
r,   zRun selected tasksc                 |   | j                   j                  j                          |D cg c]p  }| j                   j                  j	                  |j
                        t        |j                        t        |j                        |j                  |j                  fr }}t        d |D              rYt        |      D ]  \  }}|d    n |   j
                  }| j                  |t        d| d      t        j                          y |D 	
cg c]>  \  }}}	}
}|
r t#        |
      r|j%                  ||	|
|      n|j%                  ||	|      @ }}
}	}}}t#        |      }| j                  |t        d      j'                  |t)        |      t)        |t        d	                         y c c}w c c}}
}	}}w )
Nc              3   *   K   | ]  }|d    du   yw)r   Nr3   )r   ts     r    r!   z.PeriodicTaskAdmin.run_tasks.<locals>.<genexpr>   s     +Uqtt|Us   r   ztask "z" not found)level)rb   rf   r   periodic_task_name)rb   rf   r   z {0} task{1} {2} successfully runzwas,were)r%   r5   r6   r&   rU   rP   r   rb   rf   r   r   any	enumerater   r*   r   ERRORlenapply_asyncr   r   )r)   r   r   rP   r&   ir   not_found_task_namerb   rf   r   r   task_ids	tasks_runs                 r    rv   zPeriodicTaskAdmin.run_tasks   s    	557 &'
 &T //''++DII6		"$**))	
 & 	 ' +U++!%(1Q4< )
 #+1+"2"2F./{;<nn  
  BG
 BG=dFE+= U $vU0B  D !!tF5G " II
 BG 	 
 M	0188)$)Qz]3	
?',
s   A5F0AF5)Nr"   Nr.   )r7   r8   r9   r:   rD   formr   rK   r   r%   date_hierarchylist_displaylist_filteractionssearch_fieldsr*   	fieldsetsreadonly_fieldsr~   change_form_templater   r   r   r   actionrs   rt   r   ru   rv   ri   rj   s   @r    rl   rl   m   sm   -DEJ!N.LMKLGM	L.
 	 
:J.
 	
 
;(@
 	 
	=@"
 	I(O* J@B&*	D$L U\\-.



 U\\./



 U\\9:



 U\\*+(
(
r,   rl   c                   2    e Zd ZeZdZeZdZdZdZ	dZ
e
Zd Zy)PeriodicTaskInline)r   rP   rb   rf   Fr   Tz"Periodic Tasks Using This Schedulec                      y)NFr3   )r)   r   r   s      r    has_add_permissionz%PeriodicTaskInline.has_add_permission  s    r,   N)r7   r8   r9   r   rK   rz   r   
can_deleteextrashow_change_linkverbose_nameverbose_name_pluralr   r3   r,   r    r   r     s1    E/FOJE7L&r,   r   c                       e Zd ZegZy)ScheduleAdminN)r7   r8   r9   r   inlinesr3   r,   r    r   r     s
    !"Gr,   r   c                       e Zd ZdZdZdZy)ClockedScheduleAdminz&Admin-interface for clocked schedules.)clocked_timeN)r7   r8   r9   r:   rz   r   r3   r,   r    r   r      s    0FLr,   r   c                       e Zd ZdZdZdZdZy)CrontabScheduleAdminz Admin class for CrontabSchedule.)__str__r   )r   minutehourday_of_monthmonth_of_yearday_of_weektimezone)r   N)r7   r8   r9   r:   r   rz   r   r3   r,   r    r   r   ,  s    *0L:F*Or,   r   c                       e Zd ZdZy)SolarScheduleAdminzAdmin class for SolarSchedule.Nr7   r8   r9   r:   r3   r,   r    r   r   6  s    (r,   r   c                       e Zd ZdZy)IntervalScheduleAdminz!Admin class for IntervalSchedule.Nr   r3   r,   r    r   r   <  s    +r,   r   N)2r:   celeryr   celery.utilsr   djangor   django.confr   django.contribr   r   django.db.modelsr	   r
   r   django.forms.widgetsr   django.template.defaultfiltersr   django.utils.translationr   r*   r   kombu.utils.jsonr   modelsr   r   r   r   r   r   utilsr   r   ChoiceFieldr>   	ModelFormrD   register
ModelAdminrl   TabularInliner   r   r   r   r   r   r3   r,   r    <module>r      sW   $  (    * . . ' 4 6 2 "A A (8v 8:e'' 1*u 1*h ]
(( ]
 ]
@,, #E$$ #  =  !  += + !+ 	 	 	
  !	M 	 "	r,   