
    f/                     `    d dl Z d dlZd dlT d dlZ G d dej        j        j                  ZdS )    N)*c                        e Zd ZdZdZddgZed             Zed             Zed             Z	ed             Z
ed	             Zed
             Zedd            Zedd            Zd Zd Zd Z fdZ fdZ xZS )CmfDeferredJob Tmy_job_countmy_job_listc                      d t           _        d S Ng_deferred_job      ./cmf/models/cmf_deferred_job.pyinit_contextzCmfDeferredJob.init_context   s    r   c                  4    t          t          j                  S r
   )boolr   r   r   r   r   is_jobzCmfDeferredJob.is_job   s     AO$$$r   c                     | t           _        d S r
   r   )jobs    r   set_current_deferred_jobz'CmfDeferredJob.set_current_deferred_job!   s    r   c                 n    t           j        }|r&| o| j        |_        |                    d           d S d S NT)	only_data)r   r   idresult_attachment_idsave)
attachmentr   s     r   set_result_attachmentz$CmfDeferredJob.set_result_attachment%   sF    
 o 	%'1'CjmC$HHtH$$$$$	% 	%r   c                 `    t           j        }|r| |_        |                    d           d S d S r   )r   r   estimate_durationr   )r!   r   s     r   set_estimate_durationz$CmfDeferredJob.set_estimate_duration/   s?     o 	%$5C!HHtH$$$$$	% 	%r   c                 `    t           j        }|r| |_        |                    d           d S d S r   )r   r   progress_pctr   )r$   r   s     r   set_progress_pctzCmfDeferredJob.set_progress_pct8   s?     o 	%+CHHtH$$$$$	% 	%r   Nc                 ^   h d}|g }|                     d           |D ]}||vrt          d| d          |r|d         |d         z
  dk    rt          d|          |sg }|dd	t          j        gg d
g}|                     ||||          }t                              |d           |S )N>   r   namestatusdurationdescriptionend_datetimer$   cmf_author_idcmf_created_atstart_datetimer!   r   r,   zRequested field name z is not allowed   r   d   zYou must use slice(<=100)=show_bg_progressbarr1   T)fieldsfiltersliceorder_byread)appendCmfPermissionError
ValueErrorr   current_userslistcmfutilacl_set_policy)	clsr4   r5   r6   r7   _kwargsallowed_fields
field_nameresults	            r   r   zCmfDeferredJob.my_job_listA   s    9 9 9 >Fo&&&  	^ 	^J//()\)\)\)\]]] 0  	Aa58+c118%@@@ 	F?C@BdBdBde&uxXXvv...r   c                 b    |sg }|ddt           j        gg dg}|                     |          }|S )Nr,   r1   r2   )r5   )r   r<   count)r@   r5   rA   rD   s       r   r   zCmfDeferredJob.my_job_countZ   sC     	F?C@BdBdBde&))r   c           	      .   | j         pd}|                    d          s|dz  }t          j                                                            d          }|| d| z   | _         t          | d| j         d| j         d| t          j	        d	           d S )
Nr   
z%Y-%m-%d %H:%M:%Sz: z: JOB (z): T)fileflush)

error_textendswithdatetimenow
__format__printr'   r   sysstderr)selftextold_textnow_strs       r   	error_logzCmfDeferredJob.error_logd   s    ?(b  && 	H#''))445HII"%9%94%9%99>>	>>DG>>>>SZW[\\\\\\r   c                    d| _         d| _        | j                                         t	          | j        | j        z
                                            | _        	 t          	                    |           nG# t          t          f$ r3 t                              d| j        |           t          |          }Y nw xY w|| _        |                     d           |                                  d S )Nsuccessr0   z!Unserializable Job Result(%s): %szjob success)r(   r$   r+   set_nowintr.   total_secondsr)   jsondumps	TypeErrorr;   loggingerrorr   strresult_jsonrX   r   )rT   rD   s     r   
on_successzCmfDeferredJob.on_successl   s    !!###T.1DDSSUUVV	!JJv:& 	! 	! 	!MM=twOOO[[FFF	! "}%%%		s   A7 7AB;:B;c                 n   d| _         | j                                         t          | j        | j        z
                                            | _        d | _        d }| j        s
d| _        d}n?| j        dk    rd}n1| j        dk    rd}n#| j        dk    rd	}n| 	                    d
           | 	                    d| j         d|            |rD| j
        r=t          j                            | j
        d          r| 	                    d           d }|r| xj        dz  c_        t          j        j                                        j        t'          j        |          z   | _        d| _         d | _        d | _        d | _        | 	                    d|            |                                  |s	 t0                              d| j         d           t6                              d| j         d| j         d| j                    d S # t>          $ r t@          !                    d           Y d S w xY wd S )Nfailr      r/   i,     i     ip  z job failed, max retries reached.zjob error(retry=z)
open)only_once_keyr(   z;job failed, reschedule skip, due new only_once task exists.)secondszjob reschedule, delay: zJob z fail, notify adminsu   Фоновая задача rI   u+   ) завершилась с ошибкой
zAdmin notify failed)"r(   r+   r[   r\   r.   r]   r)   rd   retry_countrX   rl   modelsr   rF   cmfr4   CmfDateTimerO   valuerN   	timedeltaplan_start_datetime	worker_idr   r   debugr   r>   admin_alertr*   rL   	Exceptionra   	exception)rT   rL   reschedule_delays      r   on_errorzCmfDeferredJob.on_error{   s   !!###T.1DDSSUUVV 
	@ D!"""""#""'NN>???K$*:KKzKKLLL  	$ 2 	$)//d>PY_/``	$ NNYZZZ# 	I!'*z'='A'A'C'C'IHL^gwLxLxLx'xD$ DK $D"&D!DNNNG5EGGHHH		 	99<tw<<<===## M43C  M  Mdg  M  M{  |K  M  MN N N N N 9 9 9!!"78888889	9 	9s   3AH
 
$H21H2c                 N    t                                                      ddgz   S )N	person_idr(   )supersave_preload_fields)rT   	__class__s    r   r   z"CmfDeferredJob.save_preload_fields   s#    ww**,,X/FFFr   c                     | j         rZ| j        j        rNt                              d| j         | j        j        | j        j        | j        dv d| j         j                    t                      j        di |S )Nzcmf-deferred-job-)rZ   rg   cancel)r(   r   is_done)roomr   )	r}   r(   
is_changedsocketioemitr   rr   r~   r   )rT   kwargsr   s     r   r   zCmfDeferredJob.save   s    > 	+dk4 	+MM-DG--"k/'-#{.KK 
 ^)  + + + uww|%%f%%%r   )NNNNr
   )__name__
__module____qualname____doc__	api_allowapi_methodsstaticmethodr   r   r   r   r"   r%   classmethodr   r   rX   re   r{   r   r   __classcell__)r   s   @r   r   r      s       
F
 I
K
   \ % % \%   \ % % \% % % \% % % \%    [0    [] ] ]  -9 -9 -9^G G G G G
& 
& 
& 
& 
& 
& 
& 
& 
&r   r   )rN   rR   cmf.includecmf.fields.cmf_deferred_jobrp   r4   cmf_deferred_jobr   r   r   r   <module>r      su     



     " " " "o& o& o& o& o&SZ0? o& o& o& o& o&r   