
    h                         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  e       Zd
ZdZd Z G d d      Zy# e$ r	 dd	lmZ Y &w xY w)zSQLAlchemy session.    N)register_after_fork)create_engine)DatabaseError)sessionmaker)NullPool) get_exponential_backoff_interval)declarative_base)SessionManager
   c                 $    | j                          y N)_after_fork)sessions    \/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/backends/database/session.py_after_fork_cleanup_sessionr      s        c                   6    e Zd ZdZd Zd Zd Zd	dZd Zd Z	y)
r
   zManage SQLAlchemy sessions.c                 j    i | _         i | _        d| _        d| _        t        t	        | t
               y y )NF)_engines	_sessionsforkedpreparedr   r   selfs    r   __init__zSessionManager.__init__    s4    *&AB +r   c                     d| _         y )NT)r   r   s    r   r   zSessionManager._after_fork(   s	    r   c                 *   | j                   r	 | j                  |   S |j	                         D ci c]  \  }}|j                  d      s|| }}}t        |fdt        i|S # t        $ r  t        |fi |x}| j                  |<   |cY S w xY wc c}}w )Npool	poolclass)r   r   KeyErrorr   items
startswithr   )r   dburikwargsenginekvs         r   
get_enginezSessionManager.get_engine+   s    ;;}}U++
 (.||~ 0tq!,,v. d 0F 0 E(EfEE  0=e0Nv0NNu-0s   A# B#&BBc                      | j                   |fi |}| j                  r:|s|| j                  vrt        |      | j                  |<   || j                  |   fS |t        |      fS )N)bind)r(   r   r   r   )r   r#   short_lived_sessionsr$   r%   s        r   create_sessionzSessionManager.create_session7   sc     1&1;;#uDNN'B(4&(Au%4>>%000|000r   c                     | j                   s,d}	 	 t        j                  j                  |       	 d| _         y y # t        $ r9 |t
        k  r,t        d|dd      }t        j                  |dz         |dz  }n Y nw xY wp)Nr   Tr   i     )	r   ResultModelBasemetadata
create_allr   PREPARE_MODELS_MAX_RETRIESr   timesleep)r   r%   retriessleep_amount_mss       r   prepare_modelszSessionManager.prepare_models?   s    }}
 G#,,77?  DM)  % !;;*Jt+ 

?T#9:1   s   : ?A<;A<c                 ^     | j                   |fi |\  }}| j                  |        |       S r   )r,   r7   )r   r#   r$   r%   r   s        r   session_factoryzSessionManager.session_factoryV   s3    -$--e>v>F#yr   N)F)
__name__
__module____qualname____doc__r   r   r(   r,   r7   r9    r   r   r
   r
      s%    %C
F1!.r   r
   )r=   r3   kombu.utils.compatr   
sqlalchemyr   sqlalchemy.excr   sqlalchemy.ormr   sqlalchemy.poolr   celery.utils.timer   r	   ImportErrorsqlalchemy.ext.declarativer/   __all__r2   r   r
   r>   r   r   <module>rH      s]      2 $ ( ' $ ></
 #$
 < <  <;<s   A AA