
    /h'                        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j$                  Z% G d dej&                  Z' e
j(        e           G d de
j)                              Z* G d de
j+                  Z, G d de
j)                  Z- e
j(        e           G d de-                      Z. e
j(        e           G d de-                      Z/ e
j(        e            G d  d!e-                      Z0 e
j(        e           G d" d#e-                      Z1d$S )%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                   l    e Zd ZdZeZdZd Zed             Z	e	j
        d             Z	ed             ZdS )TaskSelectWidgetz/Widget that lets you choose between task names.Nc                     | j         }t          d | j        j        D                       }dt	          t          ||                    z   S )Nc              3   D   K   | ]}|                     d           |V  dS )zcelery.N)
startswith).0names     \/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django_celery_beat/admin.py	<genexpr>z4TaskSelectWidget.tasks_as_choices.<locals>.<genexpr>   sF       : :"ooi88:t : : : : : :    )) r#   )_modulessorted
celery_apptaskstuplezip)self_r'   s      r    tasks_as_choicesz!TaskSelectWidget.tasks_as_choices   sU    M : :(= : : : : :eCu$5$56666r"   c                 P    | j         |                                 | _         | j         S N)_choicesr,   r*   s    r    choiceszTaskSelectWidget.choices   s%    =  1133DM}r"   c                     d S r.    )r*   r+   s     r    r1   zTaskSelectWidget.choices%   s	     	r"   c                 B    | j         j                                         d S r.   )r&   loaderimport_default_modulesr0   s    r    r$   zTaskSelectWidget._modules+   s    5577777r"   )__name__
__module____qualname____doc__r   r&   r/   r,   propertyr1   setterr   r$   r3   r"   r    r   r      s        99JH7 7 7   X
 ^  ^
 8 8 _8 8 8r"   r   c                       e Zd ZdZeZd ZdS )TaskChoiceFieldz.Field that lets you choose between task names.c                     dS )NTr3   )r*   values     r    valid_valuezTaskChoiceField.valid_value5   s    tr"   N)r7   r8   r9   r:   r   widgetrA   r3   r"   r    r>   r>   0   s.        8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dS )PeriodicTaskForm.MetazForm metadata.r3   N)r7   r8   r9   r:   r   modelexcluder3   r"   r    MetarJ   F   s        r"   rM   c                    t                                                      }|                    d          }|r||d<   |d         sEt          j        t          d                    }|                     |j                  | j        d<   ||                    d          6|                    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    ww}}((9%% 	#"DLF| 	'*=(>(>??C#'#3#3CL#A#ADL I88$%%1dhhy6I6I1'FGG   r"   c                     | j         |         }	 t          |           n6# t          $ r)}t          j        t          d          |z            d }~ww xY w|S )NzUnable to parse JSON: %s)cleaned_datar   
ValueErrorr   rV   r+   )r*   fieldr@   rZ   s       r    _clean_jsonzPeriodicTaskForm._clean_json\   sm    !%(	%LLLL 	 	 	',--3  	 s    
A$AAc                 ,    |                      d          S )Nargsr`   r0   s    r    
clean_argszPeriodicTaskForm.clean_argsf   s    '''r"   c                 ,    |                      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   s        >>oa#$$  G 5?a    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j         ed                    d             Z ej         ed                    d             Zd Z ej         ed                    d              Z ej         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   rP   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.htmlr#   c                     |pi }t           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   s}    %+"*..00 	> 	>G'.'=L$$-9)*ww&&w	5B ' D D 	Dr"   c                     |p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   sV    %+H&=tDD	/DY/O/O+O'(ww&&]$ $ 	$r"   c                 v    t                                          |          }|                    dddd          S )Nrp   r}   r   r   )rS   get_querysetselect_related)r*   r   qsr[   s      r    r   zPeriodicTaskAdmin.get_queryset   s4    WW!!'**  YKKKr"   zEnable selected tasks)rw   c                     |                     d          }t          j                     |                     |t	          dd|                              |                     d S )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   sp      t44$&&&35  f\""	
 	
 	
 	
 	
r"   zDisable selected tasksc                     |                     dd           }t          j                     |                     |t	          dd|                              |                     d S )NF)rn   rq   z"{0} task was successfully disabledz${0} tasks were successfully disabledr   r   s       r    rt   zPeriodicTaskAdmin.disable_tasks   sr      u$GG$&&&46  f\""	
 	
 	
 	
 	
r"   c           
          |                     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   sJ    tE%LL111$KK(
 (
 (
   	r"   z!Toggle activity of selected tasksc                     |                      |          }t          j                     |                     |t	          dd|                              |                     d S )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   sp     228<<$&&&35  f\""	
 	
 	
 	
 	
r"   zRun selected tasksc                 J     j         j                                          fd|D             }t          d |D                       rat	          |          D ]\  }}|d          n||         j        }                     |t          d| d          t          j	                   d S d |D             }t          |          }                     |t          d                              |t          |          t          |t          d	                                         d S )
Nc                     g | ]Y}j         j                            |j                  t	          |j                  t	          |j                  |j        |j        fZS r3   )	r&   r'   rU   rP   r   rb   rf   r   r   )r   rP   r*   s     r    
<listcomp>z/PeriodicTaskAdmin.run_tasks.<locals>.<listcomp>   si     ' ' '
  /'++DI66	""$$*)	 ' ' 'r"   c              3   *   K   | ]}|d          du V  dS )r   Nr3   )r   ts     r    r!   z.PeriodicTaskAdmin.run_tasks.<locals>.<genexpr>   s*      ++qtt|++++++r"   r   ztask "z" not found)levelc           	          g | ]N\  }}}}}|r*t          |          r|                    |||d |i          n|                    ||d |i          OS )periodic_task_name)rb   rf   r   r   )rb   rf   r   )lenapply_async)r   rP   rb   rf   r   r   s         r    r   z/PeriodicTaskAdmin.run_tasks.<locals>.<listcomp>   s     
 
 
 >dFE+=  UD-/AB	     !!-/AB "  
 
 
r"   z {0} task{1} {2} successfully runzwas,were)r&   r5   r6   any	enumeraterP   r   r+   r   ERRORr   r   r   )	r*   r   r   r'   ir   not_found_task_nametask_ids	tasks_runs	   `        r    rv   zPeriodicTaskAdmin.run_tasks   sy    	55777' ' ' '
 &' ' ' ++U+++++ 	!%((  1Q4<E   #+1+"2;.;;;<<n    
 F
 
 BG
 
 
 MM	01188)$$)Qz]]33 	
 	
 	
 	
 	
r"   )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   sr       --DEJ!N.LMMMKLG%M	L.
 
 	 
:J.
 
 	
 
;(@
 
 	 
		=@"
 "
 	I(O* * * J@B&*	D 	D 	D 	D 	D 	D$ $ $ $ $ $L L L L L U\A-..  

 

 

 U\A.//  

 

 

   U\A9::  

 

 

 U\A*++  /
 /
 /
 /
 /
 /
 /
r"   rl   c                   4    e Zd ZeZdZeZdZdZdZ	dZ
e
Zd ZdS )PeriodicTaskInline)r   rP   rb   rf   Fr   Tz"Periodic Tasks Using This Schedulec                     dS )NFr3   )r*   r   r   s      r    has_add_permissionz%PeriodicTaskInline.has_add_permission  s    ur"   N)r7   r8   r9   r   rK   rz   r   
can_deleteextrashow_change_linkverbose_nameverbose_name_pluralr   r3   r"   r    r   r     sM        E/FOJE7L&    r"   r   c                       e Zd ZegZdS )ScheduleAdminN)r7   r8   r9   r   inlinesr3   r"   r    r   r   #  s        !"GGGr"   r   c                       e Zd ZdZdZdZdS )ClockedScheduleAdminz&Admin-interface for clocked schedules.)clocked_timeN)r7   r8   r9   r:   rz   r   r3   r"   r    r   r   '  s"        00FLLLr"   r   c                       e Zd ZdZdZdZdZdS )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   3  s%        **0L:F*OOOr"   r   c                       e Zd ZdZdS )SolarScheduleAdminzAdmin class for SolarSchedule.Nr7   r8   r9   r:   r3   r"   r    r   r   =  s        ((Dr"   r   c                       e Zd ZdZdS )IntervalScheduleAdminz!Admin class for IntervalSchedule.Nr   r3   r"   r    r   r   C  s        ++Dr"   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      s   $ $       ( ( ( ( ( (                   * * * * * * * * . . . . . . . . . . ' ' ' ' ' ' 4 4 4 4 4 4 6 6 6 6 6 6 2 2 2 2 2 2 " " " " " "A A A A A A A A A A A A A A A A ( ( ( ( ( (8 8 8 8 8v 8 8 8:    e'   1* 1* 1* 1* 1*u 1* 1* 1*h d
 d
 d
 d
 d
( d
 d
 d
N    ,   # # # # #E$ # # #       =   !    + + + + += + + ! + 	 	 	 	 	 	 	 	
  !!	 	 	 	 	M 	 	 "!	 	 	r"   