
    c*g/                     x    d dl Z d dlZd dl d dlZ G d dej
                  j                  j                        Zy)    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         _        y 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     AOO$$r   c                     | t         _        y r
   r   )jobs    r   set_current_deferred_jobz'CmfDeferredJob.set_current_deferred_job!   s	    r   c                 x    t         j                  }|r(| xr | j                  |_        |j	                  d       y y NT)	only_data)r   r   idresult_attachment_idsave)
attachmentr   s     r   set_result_attachmentz$CmfDeferredJob.set_result_attachment%   s4    
 oo'1'CjmmC$HHtH$ r   c                 \    t         j                  }|r| |_        |j                  d       y y r   )r   r   estimate_durationr   )r!   r   s     r   set_estimate_durationz$CmfDeferredJob.set_estimate_duration/   s+     oo$5C!HHtH$ r   c                 \    t         j                  }|r| |_        |j                  d       y y r   )r   r   progress_pctr   )r$   r   s     r   set_progress_pctzCmfDeferredJob.set_progress_pct8   s+     oo+CHHtH$ r   c                 2   h d}|g }|j                  d       |D ]  }||vst        d| d       |r|d   |d   z
  dkD  rt        d|      |sg }|dd	t        j                  gg d
g}| j                  ||||      }t        j                  |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 >Fo&  	^J/(+@O)\]]	^ a58+c18%@@F?C@Bde&uxXvv.r   c                 b    |sg }|ddt         j                  gg dg}| j                  |      }|S )Nr,   r1   r2   )r5   )r   r<   count)r@   r5   rA   rD   s       r   r   zCmfDeferredJob.my_job_countZ   s7    F?C@Bde&)r   c           	      >   | j                   xs d}|j                  d      s|dz  }t        j                  j                         j	                  d      }|| d| z   | _         t        | d| j                   d| j                   d| t        j                  d	       y )
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"y4&%99			{!DGG9Cv>SZZW[\r   c                    d| _         d| _        | j                  j                          t	        | j                  | j
                  z
  j                               | _        	 t        j                  |       || _        | j#                  d       | j%                          y # t        t        f$ r/ t        j                  d| j                  |       t        |      }Y fw xY w)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..1D1DDSSUV	!JJv "}%		 :& 	!MM=twwO[F	!s   B ;CCc                    d| _         | j                  j                          t        | j                  | j                  z
  j                               | _        d | _        d }| j                  s
d| _        d}nG| j                  dk(  rd}n5| j                  dk(  rd}n#| j                  dk(  rd	}n| j                  d
       | j                  d| j                   d|        |rJ| j                  r>t        j                  j                  | j                  d      r| j                  d       d }|r| xj                  dz  c_        t        j                  j                   j#                         j$                  t'        j(                  |      z   | _        d| _         d | _        d | _        d | _        | j                  d|        | j/                          |sa	 t0        j3                  d| j4                   d       t6        j9                  d| j:                   d| j4                   d| j<                          y y # t>        $ r t@        jC                  d       Y y w xY w)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..1D1DDSSUV D!"""#"'NN=?)$*:*:);3zlKL  2 2))//d>P>PY_/`NNXZ#!'*zz'='='A'A'C'I'IHL^L^gwLx'xD$ DK $D"&D!DNNN45E4FGH		9$twwi';<=##243C3C2DAdggYNz{  |K  |K  {L  MN	    9!!"789s   AH3 3IIc                 *    t         |          ddgz   S )N	person_idr(   )supersave_preload_fields)rT   	__class__s    r   r   z"CmfDeferredJob.save_preload_fields   s    w*,X/FFFr   c                 H   | j                   r| j                  j                  rqt        j	                  d| j
                   | j                  j                  | j
                  j                  | j                  dv d| j                   j                         t        |    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    >>dkk44MM#DGG9-"kk//''--#{{.KK
 ^^))  + w|%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    

 I
K
   % %   % % % % % %  0  ]-9^G
& 
&r   r   )rN   rR   cmf.includecmf.fields.cmf_deferred_jobrp   r4   cmf_deferred_jobr   r   r   r   <module>r      s/     
  "o&SZZ00?? o&r   