U
    )8c                     @   sx   d dl mZ d dlT d dlT d dlmZmZ d dlmZ d dl	m	Z	m
Z
 d dlmZ G dd dejZejej d	S )
    fields)*)commit_all_dsrollback_all_ds)cmf_automation_cron_trigger)datetimetimezone)croniterc                       sJ   e Zd Zdd Zeejddddd Zedd Z	 fd	d
Z
  ZS )CmfAutomationCronTriggerc              
   C   s   t d| j  z*t| jjd }| j  | j	dd W nD t
k
r } z&t  t d|  d|  W Y d S d }~X Y nX t d|   t  |S )Nu    Запускаем Cron-Trigger T)Z	only_datauB   Ошибка при выполнении CmfAutomationCronTrigger : zCommit )gdebugnameZcmfutilZexec_bzpython	eval_codevaluecron_run_lastZset_nowsave	Exceptionr   r   )selfrese r   :./modules/automation/models/cmf_automation_cron_trigger.pyrun   s    
zCmfAutomationCronTrigger.runT)Z	only_onceZsystem_taskc               	   O   sl  t d tt  j}g }tjjddddgdD ]}|j	sFq8t
|j	j|t}t
|j	j|t}t d|j d||   t d	| d
| d|  d||    krdkrn n&|jr||j  dk rq8|| q8||  dkr8|jr||j  dk rq8d||    kr8dkr8n q8|| q8q8|D ]}|  qNt d d S )Nu#   Обработка Cron-Triggers...r   r   	cron_ruler   r   u:   До следующего запуска триггера r   znext=z; prev=z; now=r   <   i,  iX  u.   Конец обработки Cron-Triggers...)r   r   r   nowZ
astimezoneZtzinfoZmodelsr   listr   r
   r   Zget_nextZget_prevr   Ztotal_secondsr   appendr   )_args_kwargsr   Zto_runZcron_jobnextprevr   r   r   sched_cron_tasks   s2    
 
"

z)CmfAutomationCronTrigger.sched_cron_tasksc                 C   s   t | j d S )N)Zcmf_deferred_taskr$   )clsr   r   r   minutely_hookB   s    z&CmfAutomationCronTrigger.minutely_hookc                    s>   t jstd | jjr0t| jjs0tddd t j	||S )Nu   Использование bzPython и Автоматизации недоступно в Вашей версии, обратитесь в Техническую поддержку.uT   Введите корректное cron-выражение. Пример: 0 0 * * *T)abort)
ZconfigZBZPYTHON_ENABLEDZ	cmf_alertr   Z
is_changedr
   Zis_validr   superr   )r   argskwargs	__class__r   r   r   I   s    zCmfAutomationCronTrigger.save)__name__
__module____qualname__r   staticmethodZ
celery_appZtaskr$   classmethodr&   r   __classcell__r   r   r+   r   r      s   %
r   N)Zcmfr   Z
cmf.fieldsZcmf.includeZcmf.data_providers.baser   r   Zmodules.automation.fieldsr   r   r	   r
   r   ZAPPZHOOK_CRON_MINUTELYr   r&   r   r   r   r   <module>   s   H