
    `fG                        d 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 d	d
lmZmZmZ d	dlmZ 	 ddlmZmZ ddlmZ n# e$ r  ed          w xY w ej        e          ZdZed             Zd Z G d de	          Z dS )z SQLAlchemy result store backend.    N)contextmanagerwraps)states)BaseBackend)ImproperlyConfigured)maybe_timedelta   )TaskTaskExtendedTaskSet)SessionManager)DatabaseErrorInvalidRequestError)StaleDataErrorzhThe database result backend requires SQLAlchemy to be installed.See https://pypi.org/project/SQLAlchemy/)DatabaseBackendc              #      K   	 d V  n## t           $ r |                                   w xY w	 |                                  d S # |                                  w xY w)N)	Exceptionrollbackclose)sessions    S/var/www/html/env/lib/python3.11/site-packages/celery/backends/database/__init__.pysession_cleanupr      sp          	
 	s   	 A  )A Ac                 <     t                      fd            }|S )Nc                     |                     dd          }t          |          D ]\}	  | i |c S # t          t          t          f$ r6 t
                              dj        ||z
  dz
  d           |dz   |k    r Y Yw xY wd S )Nmax_retries   z-Failed operation %s.  Retrying %s more times.r
   T)exc_info)popranger   r   r   loggerwarning__name__)argskwargsr   retriesfuns       r   _innerzretry.<locals>._inner)   s    jj22[)) 		 		GsD+F+++++!#6G   CL+"7!";!  # # # Q;+-- .-		 		s   4A
B Br   )r'   r(   s   ` r   retryr)   '   s3    
3ZZ    Z M    c                       e Zd ZdZdZeZeZd fd	Z	e
d             Z e            fdZe	 	 dd            Z	 	 ddZed	             Zed
             Zed             Zed             Zed             Zd Zd fd	Z xZS )r   zThe database result backend.g      ?Nc                 v    t                      j        dt          |d| | j        j        }| j        rt          | _        |p|p|j        | _	        t          |pi fi |j        pi | _        |                    d|j                  | _        |j        pi }|j        pi }| j                            |                    d          |                    d                     | j                            |                    d          |                    d                     | j	        st)          d          d S )N)expires_typeurlshort_lived_sessionstask)schemanamegroupzTMissing connection string! Do you have the database_url setting set to a real value? )super__init__r	   appconfextended_resultr   task_clsdatabase_urlr.   dictdatabase_engine_optionsengine_optionsgetdatabase_short_lived_sessionsr/   database_table_schemasdatabase_table_names	configuretaskset_clsr   )	selfdburir>   r.   r%   r8   schemas
tablenames	__class__s	           r   r6   zDatabaseBackend.__init__E   s|    	 	,o 	, 	,$*	, 	, 	,x} 	)(DM4%44#4" b2 2*0b2 2 %+JJ".%0 %0! -3.4"
;;v&&'' 	  	) 	) 	) 	"";;w''(( 	# 	* 	* 	* x 	>&=> > >	> 	>r*   c                 B    | j         j                            dd          S )Nextendedresult)r7   r8   find_value_for_key)rE   s    r   r9   zDatabaseBackend.extended_resulte   s    x}//
HEEEr*   c                 @     |j         d| j        | j        d| j        S )N)rF   r/   r4   )session_factoryr.   r/   r>   )rE   session_managers     r   ResultSessionzDatabaseBackend.ResultSessioni   s;    .. #(!%!:# # !# # 	#r*   c                    |                                  }t          |          5  t          |                    | j                                      | j        j        |k                        }|o|d         }|sE|                     |          }||_        |                    |           |                                 | 	                    |||||           |
                                 ddd           dS # 1 swxY w Y   dS )z1Store return value and state of an executed task.r   )	tracebackrequestN)rQ   r   listqueryr:   filtertask_idaddflush_update_resultcommit)	rE   rX   rL   staterS   rT   r%   r   r0   s	            r   _store_resultzDatabaseBackend._store_resulto   s8    $$&&W%% 
	 
	dm44;;DM<QU\<\]]^^D#DGD  }}W--&D!!!feyRYZZZNN
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   CC99C= C=c                     |                      ||||dd          }d | j        j        j        D             }|D ](}|                    |          }	t          |||	           )d S )NFT)rL   r]   rS   rT   format_dateencodec                 .    g | ]}|j         d v|j         S )>   idrX   )r2   ).0columns     r   
<listcomp>z2DatabaseBackend._update_result.<locals>.<listcomp>   s1     < < <6k)::: ;:::r*   )_get_result_metar:   	__table__columnsr?   setattr)
rE   r0   rL   r]   rS   rT   metari   re   values
             r   r[   zDatabaseBackend._update_result   s     $$F%/8'16t % E E< <T]-D-L < < <  	) 	)FHHV$$ED&%((((	) 	)r*   c                    |                                  }t          |          5  t          |                    | j                                      | j        j        |k                        }|o|d         }|s-|                     |          }t          j        |_	        d|_
        |                                }|                    dd          |                     |d                   |d<   |                    dd          |                     |d                   |d<   |                     |          cddd           S # 1 swxY w Y   dS )z$Get task meta-data for a task by id.r   Nr$   r%   )rQ   r   rU   rV   r:   rW   rX   r   PENDINGstatusrL   to_dictr?   decodemeta_from_decoded)rE   rX   r   r0   datas        r   _get_task_meta_forz"DatabaseBackend._get_task_meta_for   sj    $$&&W%% 	0 	0dm44;;DM<QU\<\]]^^D#DGD #}}W--$n"<<>>Dxx%%1#{{4<88Vxx$''3!%T(^!<!<X))$//	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   DEE
Ec                 &   |                                  }t          |          5  |                     ||          }|                    |           |                                 |                                 |cddd           S # 1 swxY w Y   dS )z&Store the result of an executed group.N)rQ   r   rD   rY   rZ   r\   )rE   group_idrL   r   r3   s        r   _save_groupzDatabaseBackend._save_group   s     $$&&W%% 	 	$$Xv66EKKMMOOONN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABB
B
c                 ^   |                                  }t          |          5  |                    | j                                      | j        j        |k                                              }|r |                                cddd           S 	 ddd           dS # 1 swxY w Y   dS )zGet meta-data for group by id.N)rQ   r   rV   rD   rW   
taskset_idfirstrp   )rE   rv   r   r3   s       r   _restore_groupzDatabaseBackend._restore_group   s    $$&&W%% 	' 	'MM$"233:: +x79 99>  '}}		' 	' 	' 	' 	' 	' 	' 	''	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A#B""B&)B&c                 h   |                                  }t          |          5  |                    | j                                      | j        j        |k                                               |                                 |                                 ddd           dS # 1 swxY w Y   dS )z!Delete meta-data for group by id.N)	rQ   r   rV   rD   rW   ry   deleterZ   r\   )rE   rv   r   s      r   _delete_groupzDatabaseBackend._delete_group   s     $$&&W%% 	 	MM$*++22 +x79 99?MMOOONN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A6B''B+.B+c                 @   |                                  }t          |          5  |                    | j                                      | j        j        |k                                               |                                 ddd           dS # 1 swxY w Y   dS )zForget about result.N)rQ   r   rV   r:   rW   rX   r}   r\   )rE   rX   r   s      r   _forgetzDatabaseBackend._forget   s     $$&&W%% 	 	MM$-((//0E0PQQXXZZZNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A"BBBc                 &   |                                  }| j        }| j                                        }t	          |          5  |                    | j                                      | j        j        ||z
  k               	                                 |                    | j
                                      | j
        j        ||z
  k               	                                 |                                 ddd           dS # 1 swxY w Y   dS )zDelete expired meta-data.N)rQ   expiresr7   nowr   rV   r:   rW   	date_doner}   rD   r\   )rE   r   r   r   s       r   cleanupzDatabaseBackend.cleanup   s'   $$&&,hllnnW%% 	 	MM$-((//'3=9; ;;A6888MM$*++22 *cGm<> >>DfhhhNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B5DD
D
r4   c                     |si n|}|                     | j        | j        | j        d           t	                                          ||          S )N)rF   r   r>   )updater.   r   r>   r5   
__reduce__)rE   r$   r%   rI   s      r   r   zDatabaseBackend.__reduce__   s]    !-vh#24 4	5 	5 	5 ww!!$///r*   )NNN)NN)r4   N)r#   
__module____qualname____doc__subpolling_intervalr   r:   r   rD   r6   propertyr9   r   rQ   r)   r^   r[   rt   rw   r{   r~   r   r   r   __classcell__)rI   s   @r   r   r   ;   s       && HK> > > > > >@ F F XF -;N,<,< # # # # >B"   U  =A#) ) ) )& 0 0 U0"   U ' ' U'   U   U
 
 
0 0 0 0 0 0 0 0 0 0r*   r   )!r   logging
contextlibr   
vine.utilsr   celeryr   celery.backends.baser   celery.exceptionsr   celery.utils.timer	   modelsr   r   r   r   r   sqlalchemy.excr   r   sqlalchemy.orm.excr   ImportError	getLoggerr#   r!   __all__r   r)   r   r4   r*   r   <module>r      s   & &  % % % % % %             , , , , , , 2 2 2 2 2 2 - - - - - - / / / / / / / / / / # # # # # #4AAAAAAAA1111111 4 4 4

	34 4 44
 
	8	$	$
     (c0 c0 c0 c0 c0k c0 c0 c0 c0 c0s   A A