
    MfN                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ  G d d	e          Zd
 Z G d de          ZdS )    N)copy_context)PlotlyJSONEncoder)context_value)AttributeDict)PreventUpdate)BaseLongCallbackManagerc                   b     e Zd ZdZd fd	Zd Zd Zd ZddZd Z	d	 Z
d
 Zd Zd Zd Z xZS )CeleryManagerz=Manage background execution of callbacks with a celery queue.Nc                 R   	 ddl }ddlm} n"# t          $ r}t          d          |d}~ww xY wt	          ||j                  st          d          t	          |j        |          rt          d          || _        || _	        t                                          |           dS )a  
        Long callback manager that runs callback logic on a celery task queue,
        and stores results using a celery result backend.

        :param celery_app:
            A celery.Celery application instance that must be configured with a
            result backend. See the celery documentation for information on
            configuration options.
        :param cache_by:
            A list of zero-argument functions.  When provided, caching is enabled and
            the return values of these functions are combined with the callback
            function's input arguments and source code to generate cache keys.
        :param expire:
            If provided, a cache entry will be removed when it has not been accessed
            for ``expire`` seconds.  If not provided, the lifetime of cache entries
            is determined by the default behavior of the celery result backend.
        r   N)DisabledBackendzuCeleryLongCallbackManager requires extra dependencies which can be installed doing

    $ pip install "dash[celery]"
z-First argument must be a celery.Celery objectz8Celery instance must be configured with a result backend)celerycelery.backends.baser   ImportError
isinstanceCelery
ValueErrorbackendhandleexpiresuper__init__)self
celery_appcache_byr   r   r   missing_imports	__class__s          i/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/dash/long_callback/managers/celery_manager.pyr   zCeleryManager.__init__   s    $	#MMM        	# 	# 	#& 
 ##	# *fm44 	NLMMMj(/:: 	YWXXX """""s   
 
-(-c                 L    |d S | j         j                            |           d S N)r   control	terminater   jobs     r   terminate_jobzCeleryManager.terminate_job9   s+    ;F%%c*****    c                 p    |                      |          }|r|j        dv r|                     |          S dS )N)FAILUREREVOKEDF)get_taskstatusr$   )r   r#   tasks      r   terminate_unhealthy_jobz%CeleryManager.terminate_unhealthy_job?   sA    }}S!! 	+DK#999%%c***ur%   c                 B    |                      |          }|o|j        dv S )N)PENDINGRECEIVEDSTARTEDRETRYPROGRESS)r)   r*   )r   r#   futures      r   job_runningzCeleryManager.job_runningE   s.    s## 
&- ,
 
 	
r%   c                 0    t          || j        ||          S r   )_make_job_fnr   )r   fnprogresskeys       r   make_job_fnzCeleryManager.make_job_fnO   s    BXs;;;r%   c                 >    |r| j                             |          S d S r   )r   AsyncResultr"   s     r   r)   zCeleryManager.get_taskR   s%     	0;**3///tr%   c                 D    | j         j                            |           d S r   )r   r   deleter   r9   s     r   clear_cache_entryzCeleryManager.clear_cache_entryX   s!    ""3'''''r%   c                 f    |                     ||                     |          ||          }|j        S r   )delay_make_progress_keytask_id)r   r9   job_fnargscontextr+   s         r   call_job_fnzCeleryManager.call_job_fn[   s/    ||C!8!8!=!=tWMM|r%   c                     |                      |          }| j        j                            |          }|r3| j        j                            |           t          j        |          S d S r   )rC   r   r   getr>   jsonloads)r   r9   progress_keyprogress_datas       r   get_progresszCeleryManager.get_progress_   sc    ..s33+//== 	-K&&|444:m,,,tr%   c                 D    | j         j                            |          d uS r   )r   r   rJ   r?   s     r   result_readyzCeleryManager.result_readyh   s     {"&&s++477r%   c                    | j         j                            |          }|| j        S t	          j        |          }| j        |                     |           n,| j        r%| j         j                            || j                   |                     | 	                    |                     | 
                    |           |S r   )r   r   rJ   	UNDEFINEDrK   rL   r   r@   r   rC   r$   )r   r9   r#   results       r   
get_resultzCeleryManager.get_resultk   s    $((-->>!F## = ""3''''{ =#**3<<<t66s;;<<<3r%   )NNr   )__name__
__module____qualname____doc__r   r$   r,   r4   r:   r)   r@   rH   rO   rQ   rU   __classcell__)r   s   @r   r
   r
      s        GG'# '# '# '# '# '#R+ + +  
 
 
< < < <  ( ( (    8 8 8      r%   r
   c                 h     |j         |                    d|           d fd	            }|S )Nlong_callback_)namec                      fd}
r|gng t                      }	 fd}|                    |           d S )Nc                     t          | t          t          f          s| g}                     t	          j        | t                               d S )Ncls)r   listtuplesetrK   dumpsr   )progress_valuecacherM   s    r   _set_progressz3_make_job_fn.<locals>.job_fn.<locals>._set_progress   sK    ntUm<< 2"0!1IIlDJ~CT$U$U$UVVVVVr%   c            
         t          di } d| _        t          j        |            	 t	          t
                    r	 i }n1t	          t          t          f          r g R  }n
 g R  }                    t          j	        |t                               d S # t          $ r5                     t          j	        ddit                               Y d S t          $ rV}                    t          j	        dt          |          t          j                    di                     Y d }~d S d }~ww xY w)NFr`   _dash_no_updatelong_callback_error)msgtb )r   ignore_register_pager   rd   r   dictrb   rc   rK   re   r   r   	Exceptionstr	traceback
format_exc)	cuser_callback_outputerrrg   rG   r7   maybe_progress
result_keyuser_callback_argss	      r   runz)_make_job_fn.<locals>.job_fn.<locals>.run   s   ((((A%*A"a   0$77 S+-2~+TAS+T+T(( 2T5MBB S+-2+S~+S@R+S+S+S((+-2+R~+R?Q+R+R+R(, 		
+?EV W W W    + !   		J*,=>DU           		J1'*3xx&/&:&<&<4 4 
 
 
 
 
 
 
 
 
s   AB* *;E(	E1AEE)r   r{   )ry   rM   rz   rG   rh   ctxr{   rx   rg   r7   r8   s   ````   @r   rE   z_make_job_fn.<locals>.job_fn   s    	W 	W 	W 	W 	W 	W -5<-"nn"	 "	 "	 "	 "	 "	 "	 "	 "	 "	H 	r%   r   )r   r+   )r7   r   r8   r9   rE   rg   s   ` `  @r   r6   r6      s_    E__0300_11/ / / / / / / 21/b Mr%   c                       e Zd ZdZdS )CeleryLongCallbackManagerz9Deprecated: use `from dash import CeleryManager` instead.N)rV   rW   rX   rY   rn   r%   r   r~   r~      s        CCCCr%   r~   )rK   rs   contextvarsr   _plotly_utils.utilsr   dash._callback_contextr   dash._utilsr   dash.exceptionsr   dash.long_callback.managersr   r
   r6   r~   rn   r%   r   <module>r      s        $ $ $ $ $ $ 1 1 1 1 1 1 0 0 0 0 0 0 % % % % % % ) ) ) ) ) ) ? ? ? ? ? ?p p p p p+ p p pf5 5 5pD D D D D D D D D Dr%   