o
    ›¨ÊhÃ  ã                   @   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yA   dd	lmZ Y nw 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   úR/var/www/html/env/lib/python3.10/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   s2   i | _ i | _d| _d| _td urt| tƒ d S 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   sj   | j r"z| j| W S  ty!   t|fi |¤Ž }| j|< | Y S w dd„ | ¡ D ƒ}t|fdti|¤Ž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>Ú	poolclass)r   r   ÚKeyErrorr   Úitemsr   )r   ÚdburiÚkwargsÚenginer   r   r   Ú
get_engine+   s   þzSessionManager.get_engineFc                 K   sR   | j |fi |¤Ž}| jr"|s|| jvrt|d�| j|< || j| fS |t|d�fS )N)Úbind)r$   r   r   r   )r   r!   Úshort_lived_sessionsr"   r#   r   r   r   Úcreate_session7   s   zSessionManager.create_sessionc                 C   sr   | j s7d}	 ztj |¡ W n! ty/   |tk r,td|ddƒ}t |d ¡ |d7 }n‚ Y nw nqd| _ d S d S )Nr   Tr
   iè  é   )	r   ÚResultModelBaseÚmetadataÚ
create_allr   ÚPREPARE_MODELS_MAX_RETRIESr   ÚtimeÚsleep)r   r#   ÚretriesÚsleep_amount_msr   r   r   Úprepare_models?   s&   ÿ
þú
ó
ìzSessionManager.prepare_modelsc                 K   s&   | j |fi |¤Ž\}}|  |¡ |ƒ S r   )r'   r1   )r   r!   r"   r#   r   r   r   r   Úsession_factoryV   s   
zSessionManager.session_factoryN)F)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r'   r1   r2   r   r   r   r   r	      s    
r	   )r6   r-   Úkombu.utils.compatr   Ú
sqlalchemyr   Úsqlalchemy.excr   Úsqlalchemy.ormr   Úsqlalchemy.poolr   Úcelery.utils.timer   r   ÚImportErrorÚsqlalchemy.ext.declarativer)   Ú__all__r,   r   r	   r   r   r   r   Ú<module>   s$    þ