o
    wvXjù   ã                   @   s€  d 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 ddlmZmZmZmZmZmZ ddl m!Z! zddl"m#Z# W n e$yq   ddl"m%Z# Y nw G dd„ deƒZ&G dd„ dej'ƒZ(G dd„ dej)ƒZ*G dd„ dej+ƒZ,G dd„ dej+ƒZ-ej. /e¡ ej. /e¡ ej. /e¡ ej. /ee-¡ ej. /ee,¡ dS )zPeriodic Task Admin interface.é    )Úforms)Úsettings)ÚadminÚmessages)ÚWhenÚValueÚCase)ÚSelect)Ú	pluralize)Úgettext_lazy)Úcurrent_app)Úcached_property)Úloadsé   )ÚPeriodicTaskÚPeriodicTasksÚIntervalScheduleÚCrontabScheduleÚSolarScheduleÚClockedSchedule)Úis_database_scheduler)Ú
force_text)Úforce_unicodec                   @   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   úU/var/www/html/myproject/venv/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!   3   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_value=   s   zTaskChoiceField.valid_valueN)r1   r2   r3   r4   r   Úwidgetr9   r   r   r   r   r7   8   s    r7   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)r1   r2   r3   r4   r   ÚmodelÚexcluder   r   r   r   ÚMetaN   s    rB   c                    sz   t t| ƒ ¡ }| d¡}|r||d< |d s(t tdƒ¡}|  |j¡| j	d< |‚| d¡d ur;| d¡r;t tdƒ¡‚|S )NÚregtaskÚtaskzNeed name of taskÚexpire_secondsÚexpiresz2Only one can be set, in expires and expire_seconds)
Úsuperr;   ÚcleanÚgetr   ÚValidationErrorr)   Úerror_classr   Ú_errors)r(   ÚdatarC   Úexc©Ú	__class__r   r   rH   T   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   rJ   r)   )r(   Úfieldr8   rN   r   r   r   Ú_clean_jsond   s   

ü
ÿ€ÿzPeriodicTaskForm._clean_jsonc                 C   ó
   |   d¡S )NÚargs©rT   r-   r   r   r   Ú
clean_argsn   ó   
zPeriodicTaskForm.clean_argsc                 C   rU   )NÚkwargsrW   r-   r   r   r   Úclean_kwargsq   rY   zPeriodicTaskForm.clean_kwargs)r1   r2   r3   r4   r7   r)   rC   r   Ú	CharFieldrD   rB   rH   rT   rX   r[   Ú__classcell__r   r   rO   r   r;   A   s     þý
r;   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ddd	d
œfdddd
œfdddd
œffZdZd'‡ fdd„	Z‡ fdd„Zdd„ Zdd„ Zedƒe_dd„ Zedƒe_dd „ Zd!d"„ Zed#ƒe_d$d%„ Zed&ƒe_‡  ZS )(ÚPeriodicTaskAdminz#Admin-interface for periodic tasks.Ú
start_time)Ú__str__ÚenabledÚintervalr_   Úlast_run_atÚone_off)ra   rd   rD   r_   rc   )Úenable_tasksÚdisable_tasksÚtoggle_tasksÚ	run_tasks)r   N)r   rC   rD   ra   Údescription)ÚextraprettyÚwide)ÚfieldsÚclassesÚSchedule)rb   ÚcrontabÚsolarÚclockedr_   rc   rd   Ú	Arguments©rV   rZ   )rj   rk   ÚcollapseÚinzExecution Options)rF   rE   ÚqueueÚexchangeÚrouting_keyÚpriorityÚheaders)rc   c                    s4   |pi }t tdd ƒ}t|ƒ |d< tt| ƒ ||¡S )NÚCELERY_BEAT_SCHEDULERÚwrong_scheduler)Úgetattrr   r   rG   r^   Úchangelist_view)r(   ÚrequestÚextra_contextÚ	schedulerrO   r   r   r~   ™   s   
ÿz!PeriodicTaskAdmin.changelist_viewc                    s    t t| ƒ |¡}| dddd¡S )Nrb   ro   rp   rq   )rG   r^   Úget_querysetÚselect_related)r(   r   ÚqsrO   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_updatec                 C   ó&   |j dd�}t ¡  |  ||d¡ d S )NT©ra   ra   ©Úupdater   Úupdate_changedrŠ   ©r(   r   Úquerysetrˆ   r   r   r   re   ´   ó   zPeriodicTaskAdmin.enable_taskszEnable selected tasksc                 C   r‹   )NFrŒ   Údisabledr�   r�   r   r   r   rf   º   r’   zPeriodicTaskAdmin.disable_taskszDisable selected tasksc                 C   s$   |j ttdtdƒd�tdƒd�d�S )NTF)ra   Úthen)ÚdefaultrŒ   )rŽ   r   r   r   )r(   r‘   r   r   r   Ú_toggle_tasks_activityÀ   s   
þz(PeriodicTaskAdmin._toggle_tasks_activityc                 C   s$   |   |¡}t ¡  |  ||d¡ d S )NÚtoggled)r–   r   r�   rŠ   r�   r   r   r   rg   Æ   s   
zPeriodicTaskAdmin.toggle_tasksz!Toggle activity of 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 |¡ƒt	j
d� d S dd„ |D ƒ}t|ƒ}ˆ  |td	ƒ |t|ƒt|td
ƒƒ¡¡ d S )Nc                    s2   g | ]}ˆ j j |j¡t|jƒt|jƒ|jf‘qS r   )r$   r%   rI   rD   r   rV   rZ   rv   )r   rD   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 "{0}" not found)Úlevelc                 S   s>   g | ]\}}}}|rt |ƒr|j|||d �n|j||d�‘qS ))rV   rZ   rv   rs   )ÚlenÚapply_async)r   rD   rV   rZ   rv   r   r   r   r˜   ã   s    
þÿÿþz {0} task{1} {2} successfully runr…   )r$   r/   r0   ÚanyÚ	enumeraterD   r†   r)   r‡   r   ÚERRORr›   r
   )	r(   r   r‘   r%   Úir™   Únot_found_task_nameÚtask_idsÚ	tasks_runr   r-   r   rh   Ì   s8   
üÿ
ýýýþzPeriodicTaskAdmin.run_taskszRun selected tasksr+   )r1   r2   r3   r4   r;   Úformr   r@   r   r$   Údate_hierarchyÚlist_displayÚlist_filterÚactionsÚsearch_fieldsÚ	fieldsetsÚreadonly_fieldsr~   r‚   rŠ   re   r)   Úshort_descriptionrf   r–   rg   rh   r]   r   r   rO   r   r^   u   sP    þýþýò


$r^   c                   @   s   e Zd ZdZdZdZdZdS )ÚClockedScheduleAdminz&Admin-interface for clocked schedules.)Úclocked_timera   rŒ   N)r1   r2   r3   r4   rl   r«   r¦   r   r   r   r   r­   ó   s
    r­   N)0r4   Údjangor   Údjango.confr   Údjango.contribr   r   Údjango.db.modelsr   r   r   Údjango.forms.widgetsr	   Údjango.template.defaultfiltersr
   Údjango.utils.translationr   r)   Úceleryr   Úcelery.utilsr   Úkombu.utils.jsonr   Úmodelsr   r   r   r   r   r   Úutilsr   Údjango.utils.encodingr   ÚImportErrorr   r   ÚChoiceFieldr7   Ú	ModelFormr;   Ú
ModelAdminr^   r­   ÚsiteÚregisterr   r   r   r   Ú<module>   s8     ÿ	4~