U
    Zf8                     @   s0   d dl mZ d dlZd dlZG dd deZdS )    )ABCNc                   @   s   e Zd Ze Zg Zg Zdd Zdd Zdd Z	dd Z
d#d
dZdd Zdd Zdd Zdd Zdd Zdd Zdd Zedd Zedd Zedd Zed$d!d"Zd	S )%BaseLongCallbackManagerc                 C   sJ   |d k	rt |ts|g}|| _tj|  i | _| jD ]}| j|  q6d S N)	
isinstancelistcache_byr   managersappendfunc_registry	functionsregister)selfr   Zfdetails r   H/tmp/pip-unpacked-wheel-47crqvv_/dash/long_callback/managers/__init__.py__init__   s    
z BaseLongCallbackManager.__init__c                 C   s   t d S r   NotImplementedErrorr   jobr   r   r   terminate_job   s    z%BaseLongCallbackManager.terminate_jobc                 C   s   t d S r   r   r   r   r   r   terminate_unhealthy_job!   s    z/BaseLongCallbackManager.terminate_unhealthy_jobc                 C   s   t d S r   r   r   r   r   r   job_running$   s    z#BaseLongCallbackManager.job_runningNc                 C   s   t d S r   r   )r   fnprogresskeyr   r   r   make_job_fn'   s    z#BaseLongCallbackManager.make_job_fnc                 C   s   t d S r   r   )r   r   Zjob_fnargscontextr   r   r   call_job_fn*   s    z#BaseLongCallbackManager.call_job_fnc                 C   s   t d S r   r   r   r   r   r   r   get_progress-   s    z$BaseLongCallbackManager.get_progressc                 C   s   t d S r   r   r   r   r   r   result_ready0   s    z$BaseLongCallbackManager.result_readyc                 C   s   t d S r   r   )r   r   r   r   r   r   
get_result3   s    z"BaseLongCallbackManager.get_resultc                 C   s   t d S r   r   r   r   r   r   get_updated_props6   s    z)BaseLongCallbackManager.get_updated_propsc                    s   t |}t ttfs g  rZt|trD fdd| D }n fddt|D }t||d}| jd k	rt| jD ]\}}| |d| < qzt	
t|d S )Nc                    s   i | ]\}}| kr||qS r   r   ).0kvcache_args_to_ignorer   r   
<dictcomp>A   s       z;BaseLongCallbackManager.build_cache_key.<locals>.<dictcomp>c                    s   g | ]\}}| kr|qS r   r   )r$   iargr'   r   r   
<listcomp>C   s     z;BaseLongCallbackManager.build_cache_key.<locals>.<listcomp>)r   	fn_sourceZ
cache_key_utf-8)inspect	getsourcer   r   tupledictitems	enumerater   hashlibsha256strencode	hexdigest)r   r   r   r(   r-   Z	hash_dictr*   Z
cache_itemr   r'   r   build_cache_key9   s    



z'BaseLongCallbackManager.build_cache_keyc                 C   s   |  |||| j|< d S r   )r   r
   )r   r   r   r   r   r   r   r   Q   s    z BaseLongCallbackManager.registerc                 C   s<   t | |}t j|| |f t jD ]}||| | q$|S r   )r   hash_functionr   r	   r   r   )r   r   callback_idr   managerr   r   r   register_funcT   s    
z%BaseLongCallbackManager.register_funcc                 C   s   | d S )Nz	-progressr   r   r   r   r   _make_progress_keyd   s    z*BaseLongCallbackManager._make_progress_keyc                 C   s
   |  dS )Nz
-set_propsr   r?   r   r   r   _make_set_props_keyh   s    z+BaseLongCallbackManager._make_set_props_key c                 C   sR   zt | }|}W n  tk
r2   t| dd}Y nX t|d|d  S )N__name__rB   r.   )r/   r0   OSErrorgetattrr5   r6   r8   r9   )r   r<   r-   Zfn_strr   r   r   r;   l   s    
z%BaseLongCallbackManager.hash_function)N)rB   )rC   
__module____qualname__object	UNDEFINEDr   r   r   r   r   r   r   r   r    r!   r"   r#   r:   r   staticmethodr>   r@   rA   r;   r   r   r   r   r      s.   



r   )abcr   r/   r5   r   r   r   r   r   <module>   s   