a
    xd                     @   s   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 zdd	lmZ W n ey   dd	lmZ Y n0 e Zd
ZdZdd ZG d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                 C   s   |    d S N)_after_fork)session r   X/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/backends/database/session.py_after_fork_cleanup_session   s    r   c                   @   sB   e Zd ZdZdd Zdd Zdd Zdd	d
Zdd Zdd Z	dS )r	   zManage SQLAlchemy sessions.c                 C   s.   i | _ i | _d| _d| _td ur*t| t d S )NF)_engines	_sessionsforkedpreparedr   r   selfr   r   r   __init__    s    zSessionManager.__init__c                 C   s
   d| _ d S )NT)r   r   r   r   r   r   (   s    zSessionManager._after_forkc                 K   sp   | j rFz| j| W S  tyB   t|fi | }| j|< | Y S 0 n&dd | D }t|fdti|S d S )Nc                 S   s    i | ]\}}| d s||qS )pool)
startswith).0kvr   r   r   
<dictcomp>3   s   
z-SessionManager.get_engine.<locals>.<dictcomp>Z	poolclass)r   r   KeyErrorr   itemsr   )r   dburikwargsenginer   r   r   
get_engine+   s    zSessionManager.get_engineFc                 K   sR   | j |fi |}| jrD|s&|| jvr6t|d| j|< || j| fS |t|dfS )N)bind)r#   r   r   r   )r   r    Zshort_lived_sessionsr!   r"   r   r   r   create_session7   s    zSessionManager.create_sessionc                 C   sl   | j shd}ztj| W qb ty\   |tk rVtd|dd}t|d  |d7 }n Y q
0 qbq
d| _ d S )Nr   r
   i  T   )	r   ResultModelBasemetadataZ
create_allr   PREPARE_MODELS_MAX_RETRIESr   timesleep)r   r"   retriesZsleep_amount_msr   r   r   prepare_models?   s    
zSessionManager.prepare_modelsc                 K   s&   | j |fi |\}}| | | S r   )r%   r-   )r   r    r!   r"   r   r   r   r   session_factoryV   s    
zSessionManager.session_factoryN)F)
__name__
__module____qualname____doc__r   r   r#   r%   r-   r.   r   r   r   r   r	      s   
r	   )r2   r*   Zkombu.utils.compatr   Z
sqlalchemyr   Zsqlalchemy.excr   Zsqlalchemy.ormr   Zsqlalchemy.poolr   Zcelery.utils.timer   r   ImportErrorZsqlalchemy.ext.declarativer'   __all__r)   r   r	   r   r   r   r   <module>   s    