
    oi                         d dl Z d dlZd dlmZ d dlmZmZmZ d dl d dl	Z
eeee      ee   ee   f   Z G d de
j                  j                  j                        Zy)    N)TracebackType)OptionalTupleType)*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dee   f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_duration7   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_pct@   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    r0   zRequested field name z is not allowed   r   d   zYou must use slice(<=100)=show_bg_progressbarr5   T)fieldsfiltersliceorder_byread)appendCmfPermissionError
ValueErrorr   current_userslistcmfutilacl_set_policy)	clsr8   r9   r:   r;   _kwargsallowed_fields
field_nameresults	            r   r   zCmfDeferredJob.my_job_listI   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 )Nr0   r5   r6   )r9   )r   r@   count)rD   r9   rE   rH   s       r   r   zCmfDeferredJob.my_job_countb   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_logl   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successr4   z!Unserializable Job Result(%s): %szjob success)r,   r(   r/   set_nowintr2   total_secondsr-   jsondumps	TypeErrorr?   loggingerrorr   strresult_jsonr\   r!   )rX   rH   s     r   
on_successzCmfDeferredJob.on_successt   s    !!#T..1D1DDSSUV	!JJv "}%		 :& 	!MM=twwO[F	!s   B ;CCexc_infoc                    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/                          |sr	 t0        j3                  d| j4                   d       t6        j9                  d| j:                   d| j4                   d| j<                   d| j:                   d|       y y # t>        $ r t@        jC                  d       Y y w xY w)Nfailr      r3   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   Фоновая задача rM   u+   ) завершилась с ошибкой
u)    завершилась с ошибкой)r+   rj   zAdmin notify failed)"r,   r/   r_   r`   r2   ra   r-   rh   retry_countr\   rq   modelsr	   rJ   cmfr8   CmfDateTimerS   valuerR   	timedeltaplan_start_datetime	worker_idr!   r   debugr   rB   admin_alertr.   rP   	Exceptionre   	exception)rX   rP   rj   reschedule_delays       r   on_errorzCmfDeferredJob.on_error   sZ   !!#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  Vr  sw  sC  sC  rD  Dm  Tn% $ 	    9!!"789s   A0I I%$I%c                 *    t         |          ddgz   S )N	person_idr,   )supersave_preload_fields)rX   	__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-)r^   rl   cancel)r,   r   is_done)roomr   )	r   r,   
is_changedsocketioemitr   rw   r   r!   )rX   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   r\   ri   r   ExcInfoTyper   r   r!   __classcell__)r   s   @r   r	   r	      s    

 I
K
   % %   % % % % % %  0  ]/9Xk-B /9bG
& 
&r   r	   )rR   rV   typesr   typingr   r   r   cmf.includecmf.fields.cmf_deferred_jobru   BaseExceptionr   r8   cmf_deferred_jobr	   r   r   r   <module>r      sd     
  ( (  "T- !]]q&SZZ00?? q&r   