
    `f                         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 n# e$ r	 dd	lmZ Y nw xY w e            Zd
ZdZd Z G d d          ZdS )zSQLAlchemy session.    N)register_after_fork)create_engine)DatabaseError)sessionmaker)NullPool) get_exponential_backoff_interval)declarative_base)SessionManager
   c                 .    |                                   d S N)_after_fork)sessions    R/var/www/html/env/lib/python3.11/site-packages/celery/backends/database/session.py_after_fork_cleanup_sessionr      s        c                   8    e Zd ZdZd Zd Zd Zd
dZd Zd Z	d	S )r
   zManage SQLAlchemy sessions.c                 z    i | _         i | _        d| _        d| _        t          t	          | t
                     d S d S )NF)_engines	_sessionsforkedpreparedr   r   selfs    r   __init__zSessionManager.__init__    sC    *&ABBBBB +*r   c                     d| _         d S )NT)r   r   s    r   r   zSessionManager._after_fork(   s    r   c                     | j         r7	 | j        |         S # t          $ r t          |fi |x}| j        |<   |cY S w xY wd |                                D             }t          |fdt
          i|S )Nc                 D    i | ]\  }}|                     d           ||S )pool)
startswith).0kvs      r   
<dictcomp>z-SessionManager.get_engine.<locals>.<dictcomp>3   s>     0 0 0tq!,,v..0a 0 0 0r   	poolclass)r   r   KeyErrorr   itemsr   )r   dburikwargsengines       r   
get_enginezSessionManager.get_engine+   s    ; 		F}U++   0=e0N0Nv0N0NNu-0 0v||~~ 0 0 0F EE(EfEEEs    #<<Fc                      | j         |fi |}| j        r2|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   sy     11&11; 	1# BuDN'B'B(4&(A(A(Au%4>%000|00000r   c                    | j         syd}	 	 t          j                            |           nL# t          $ r> |t
          k     r/t          d|dd          }t          j        |dz             |dz  }n Y nw xY wmd| _         d S d S )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???  %   !;;;*Jt+ + 
?T#9:::1   !DMMM)	! 	!s   , AA43A4c                 b     | j         |fi |\  }}|                     |            |            S r   )r/   r:   )r   r(   r)   r*   r   s        r   session_factoryzSessionManager.session_factoryV   s@    -$-e>>v>>F###wyyr   N)F)
__name__
__module____qualname____doc__r   r   r+   r/   r:   r<    r   r   r
   r
      s        %%C C C  
F 
F 
F1 1 1 1! ! !.    r   r
   )r@   r6   kombu.utils.compatr   
sqlalchemyr   sqlalchemy.excr   sqlalchemy.ormr   sqlalchemy.poolr   celery.utils.timer   r	   ImportErrorsqlalchemy.ext.declarativer2   __all__r5   r   r
   rA   r   r   <module>rK      s)      2 2 2 2 2 2 $ $ $ $ $ $ ( ( ( ( ( ( ' ' ' ' ' ' $ $ $ $ $ $ > > > > > ></////// < < <;;;;;;;;< #"$$
   < < < < < < < < < <s   3 A A