
    ?i                         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T d dl	Z
eeee                  ee         ee         f         Z G d de
j        j        j                  ZdS )    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           _        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_duration7   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_pct@   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    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 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 )Nr0   r5   r6   )r9   )r   r@   count)rD   r9   rE   rH   s       r   r   zCmfDeferredJob.my_job_countb   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_logl   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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.1DDSSUUVV	!JJv:& 	! 	! 	!MM=twOOO[[FFF	! "}%%%		s   A7 7AB;:B;exc_infoc                    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| j         d|           d S # t>          $ r t@          !                    d           Y d S w xY wd S )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   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  Tn  sw  sC  Tn  Tn  Tn% $       9 9 9!!"78888889
	9 
	9s   3A!H $H>=H>c                 N    t                                                      ddgz   S )N	person_idr,   )supersave_preload_fields)rX   	__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-)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    > 	+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   r\   ri   r   ExcInfoTyper   r   r!   __classcell__)r   s   @r   r	   r	      s       
F
 I
K
   \ % % \%   \ % % \% % % \% % % \%    [0    [] ] ]  /9 /9Xk-B /9 /9 /9 /9bG G G G 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      s     



       ( ( ( ( ( ( ( ( ( (     " " " "T- !]]q& q& q& q& q&SZ0? q& q& q& q& q&r   