o
    ®äeæ#  ã                   @   sX  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mZmZmZmZmZ ddl m!Z! G dd„ deƒZ"G dd„ dej#ƒZ$G dd„ dej%ƒZ&e
 'e¡G dd„ de
j(ƒƒZ)e
 'e¡G dd„ de
j(ƒƒZ*e
 'e¡G dd„ de
j(ƒƒZ+e
j, 'e¡ e
j, 'e¡ dS )zPeriodic Task Admin interface.é    )Úcurrent_app)Úcached_property)Úforms)Úsettings)ÚadminÚmessages)ÚCaseÚValueÚWhen)ÚSelect)Ú	pluralize)Úgettext_lazy)Úloadsé   )ÚClockedScheduleÚCrontabScheduleÚIntervalScheduleÚPeriodicTaskÚPeriodicTasksÚSolarSchedule)Úis_database_schedulerc                   @   sF   e Zd ZdZeZdZdd„ Zedd„ ƒZ	e	j
dd„ ƒZ	edd	„ ƒZdS )
ÚTaskSelectWidgetz/Widget that lets you choose between task names.Nc                 C   s2   | j }ttdd„ | jjD ƒƒƒ}dtt||ƒƒ S )Nc                 s   s   � | ]
}|  d ¡s|V  qdS )zcelery.N)Ú
startswith)Ú.0Úname© r   úJ/var/www/html/env/lib/python3.10/site-packages/django_celery_beat/admin.pyÚ	<genexpr>   s   € ÿz4TaskSelectWidget.tasks_as_choices.<locals>.<genexpr>))Ú r   )Ú_modulesÚlistÚsortedÚ
celery_appÚtasksÚtupleÚzip)ÚselfÚ_r#   r   r   r   Útasks_as_choices   s   z!TaskSelectWidget.tasks_as_choicesc                 C   s   | j d u r
|  ¡ | _ | j S ©N)Ú_choicesr(   ©r&   r   r   r   Úchoices   s   

zTaskSelectWidget.choicesc                 C   s   d S r)   r   )r&   r'   r   r   r   r,   $   s   c                 C   s   | j j ¡  d S r)   )r"   ÚloaderÚimport_default_modulesr+   r   r   r   r   *   s   zTaskSelectWidget._modules)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r*   r(   Úpropertyr,   Úsetterr   r   r   r   r   r   r      s    

r   c                   @   s   e Zd ZdZeZdd„ ZdS )ÚTaskChoiceFieldz.Field that lets you choose between task names.c                 C   s   dS )NTr   )r&   Úvaluer   r   r   Úvalid_value4   s   zTaskChoiceField.valid_valueN)r/   r0   r1   r2   r   Úwidgetr7   r   r   r   r   r5   /   s    r5   c                       sj   e Zd ZdZeedƒdd�Zejedƒddd�Z	G dd	„ d	ƒZ
‡ fd
d„Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚPeriodicTaskFormz4Form that lets you create and modify periodic tasks.zTask (registered)F)ÚlabelÚrequiredzTask (custom)éÈ   )r:   r;   Ú
max_lengthc                   @   s   e Zd ZdZeZdZdS )zPeriodicTaskForm.MetazForm metadata.r   N)r/   r0   r1   r2   r   ÚmodelÚexcluder   r   r   r   ÚMetaE   s    r@   c                    sv   t ƒ  ¡ }| d¡}|r||d< |d s&t tdƒ¡}|  |j¡| jd< |‚| d¡d ur9| d¡r9t 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&   ÚdatarA   Úexc©Ú	__class__r   r   rF   K   s   

ÿzPeriodicTaskForm.cleanc              
   C   sD   | j | }zt|ƒ W |S  ty! } z	t tdƒ| ¡‚d }~ww )NzUnable to parse JSON: %s)Úcleaned_datar   Ú
ValueErrorr   rH   r'   )r&   Úfieldr6   rL   r   r   r   Ú_clean_json[   s   

ü
ÿ€ÿzPeriodicTaskForm._clean_jsonc                 C   ó
   |   d¡S )NÚargs©rR   r+   r   r   r   Ú
clean_argse   ó   
zPeriodicTaskForm.clean_argsc                 C   rS   )NÚkwargsrU   r+   r   r   r   Úclean_kwargsh   rW   zPeriodicTaskForm.clean_kwargs)r/   r0   r1   r2   r5   r'   rA   r   Ú	CharFieldrB   r@   rF   rR   rV   rY   Ú__classcell__r   r   rM   r   r9   8   s     þý
r9   c                       s$  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d„ ZdZ		d.‡ fdd„	Zd/‡ fdd„	Z‡ fdd„Zdd„ Zejedƒd �d!d"„ ƒZejed#ƒd �d$d%„ ƒZd&d'„ Zejed(ƒd �d)d*„ ƒZejed+ƒd �d,d-„ ƒZ‡  ZS )0ÚPeriodicTaskAdminz#Admin-interface for periodic tasks.Ú
start_time)r   ÚenabledÚ	schedulerÚintervalr]   Úlast_run_atÚone_off)r^   rb   rB   r]   ra   )Úenable_tasksÚdisable_tasksÚtoggle_tasksÚ	run_tasks)r   N)r   rA   rB   r^   Údescription)ÚextraprettyÚwide)ÚfieldsÚclassesÚSchedule)r`   ÚcrontabÚcrontab_translationÚsolarÚclockedr]   ra   rb   Ú	Arguments)rT   rX   )rh   ri   ÚcollapseÚinzExecution Options)rD   rC   ÚqueueÚexchangeÚrouting_keyÚpriorityÚheaders)ra   rn   c                 C   s   |j jS r)   )rm   Úhuman_readable)r&   Úobjr   r   r   rn   ‘   s   z%PeriodicTaskAdmin.crontab_translationz,admin/djcelery/change_periodictask_form.htmlr   c                    sF   |pi }t j ¡ }i }|D ]}|j||j< q||d< tƒ j|||d�S )NÚreadable_crontabs)Úextra_context)r   ÚobjectsÚallry   ÚidrE   Úchangeform_view)r&   ÚrequestÚ	object_idÚform_urlr|   ÚcrontabsÚcrontab_dictrm   rM   r   r   r€   –   s   

ÿz!PeriodicTaskAdmin.changeform_viewc                    s0   |pi }t tdd ƒ}t|ƒ |d< tƒ  ||¡S )NÚCELERY_BEAT_SCHEDULERÚwrong_scheduler)Úgetattrr   r   rE   Úchangelist_view)r&   r�   r|   r_   rM   r   r   r‰   ¡   s   ÿz!PeriodicTaskAdmin.changelist_viewc                    s   t ƒ  |¡}| dddd¡S )Nr`   rm   ro   rp   )rE   Úget_querysetÚselect_related)r&   r�   ÚqsrM   r   r   rŠ   ¨   s   zPeriodicTaskAdmin.get_querysetc                 C   s.   |   |tdƒ |t|ƒt|tdƒƒ|¡¡ dS )zxSend message about action to user.

        `verb` should shortly describe what have changed (e.g. 'enabled').

        z {0} task{1} {2} successfully {3}úwas,wereN)Úmessage_userr'   Úformatr   )r&   r�   Úrows_updatedÚverbr   r   r   Ú_message_user_about_update¬   s   üþz,PeriodicTaskAdmin._message_user_about_updatezEnable selected tasks)rg   c                 C   s&   |j dd�}t ¡  |  ||d¡ d S )NT©r^   r^   ©Úupdater   Úupdate_changedr’   ©r&   r�   Úquerysetr�   r   r   r   rc   ¼   s   zPeriodicTaskAdmin.enable_taskszDisable selected tasksc                 C   s(   |j dd d�}t ¡  |  ||d¡ d S )NF)r^   ra   Údisabledr”   r—   r   r   r   rd   Ä   s   zPeriodicTaskAdmin.disable_tasksc                 C   s$   |j ttdtdƒd�tdƒd�d�S )NTF)r^   Úthen)Údefaultr“   )r•   r   r
   r	   )r&   r˜   r   r   r   Ú_toggle_tasks_activityÌ   s   
þz(PeriodicTaskAdmin._toggle_tasks_activityz!Toggle activity of selected tasksc                 C   s$   |   |¡}t ¡  |  ||d¡ d S )NÚtoggled)rœ   r   r–   r’   r—   r   r   r   re   Ò   s   
zPeriodicTaskAdmin.toggle_taskszRun selected tasksc           	         sÀ   ˆ j j ¡  ‡ fdd„|D ƒ}tdd„ |D ƒƒr?t|ƒD ]\}}|d d u r( nq|| j}ˆ j|td|› d�ƒtj	d� d S d	d„ |D ƒ}t
|ƒ}ˆ  |td
ƒ |t|ƒt|tdƒƒ¡¡ d S )Nc                    s6   g | ]}ˆ j j |j¡t|jƒt|jƒ|j|jf‘qS r   )	r"   r#   rG   rB   r   rT   rX   rt   r   )r   rB   r+   r   r   Ú
<listcomp>ß   s    ûüz/PeriodicTaskAdmin.run_tasks.<locals>.<listcomp>c                 s   s   � | ]	}|d  du V  qdS )r   Nr   )r   Útr   r   r   r   æ   s   € z.PeriodicTaskAdmin.run_tasks.<locals>.<genexpr>r   ztask "z" not found)Úlevelc                 S   sD   g | ]\}}}}}|rt |ƒr|j||||d �n|j|||d�‘qS ))rT   rX   rt   Úperiodic_task_name)rT   rX   r¡   )ÚlenÚapply_async)r   rB   rT   rX   rt   r¡   r   r   r   rž   õ   s    ýþþÿÿüz {0} task{1} {2} successfully runr�   )r"   r-   r.   ÚanyÚ	enumeraterB   rŽ   r'   r   ÚERRORr¢   r�   r   )	r&   r�   r˜   r#   ÚirŸ   Únot_found_task_nameÚtask_idsÚ	tasks_runr   r+   r   rf   Ú   s8   
ûÿ
ýúýþzPeriodicTaskAdmin.run_tasks)Nr   Nr)   ) r/   r0   r1   r2   r9   Úformr   r>   r   r"   Údate_hierarchyÚlist_displayÚlist_filterÚactionsÚsearch_fieldsr'   Ú	fieldsetsÚreadonly_fieldsrn   Úchange_form_templater€   r‰   rŠ   r’   r   Úactionrc   rd   rœ   re   rf   r[   r   r   rM   r   r\   l   sj    þýþýòÿÿ
ÿ
ÿ
ÿr\   c                   @   s   e Zd ZdZdZdZdS )ÚClockedScheduleAdminz&Admin-interface for clocked schedules.)Úclocked_timeN)r/   r0   r1   r2   rj   r­   r   r   r   r   rµ     s    rµ   c                   @   s   e Zd ZdZdZdS )ÚCrontabScheduleAdminz Admin class for CrontabSchedule.)Ú__str__ry   N)r/   r0   r1   r2   r­   r   r   r   r   r·     s    r·   N)-r2   Úceleryr   Úcelery.utilsr   Údjangor   Údjango.confr   Údjango.contribr   r   Údjango.db.modelsr   r	   r
   Údjango.forms.widgetsr   Údjango.template.defaultfiltersr   Údjango.utils.translationr   r'   Úkombu.utils.jsonr   Úmodelsr   r   r   r   r   r   Úutilsr   r   ÚChoiceFieldr5   Ú	ModelFormr9   ÚregisterÚ
ModelAdminr\   rµ   r·   Úsiter   r   r   r   Ú<module>   s2     	4 