o
    wvXjè  ã                   @   sv   d Z ddlmZ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	d
„ ZG dd„ deƒZdS )zSQLAlchemy session.é    )Úabsolute_importÚunicode_literals)Úregister_after_fork)Úcreate_engine)Údeclarative_base)Úsessionmaker)ÚNullPool)ÚSessionManagerc                 C   s   |   ¡  d S ©N)Ú_after_fork)Úsession© r   ú]/var/www/html/myproject/venv/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   sn   | j r"z| j| W S  ty!   t|fi |¤Ž }| j|< | Y S w tdd„ | ¡ D ƒƒ}t|fdti|¤ŽS )Nc                 S   s"   g | ]\}}|  d ¡s||f‘qS )Úpool)Ú
startswith)Ú.0ÚkÚvr   r   r   Ú
<listcomp>*   s    ÿz-SessionManager.get_engine.<locals>.<listcomp>Ú	poolclass)r   r   ÚKeyErrorr   ÚdictÚ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_session.   s   zSessionManager.create_sessionc                 C   s    | j stj |¡ d| _ d S d S r   )r   ÚResultModelBaseÚmetadataÚ
create_all)r   r$   r   r   r   Úprepare_models6   s   
þzSessionManager.prepare_modelsc                 K   s&   | j |fi |¤Ž\}}|  |¡ |ƒ S r
   )r(   r,   )r   r"   r#   r$   r   r   r   r   Úsession_factory;   s   
zSessionManager.session_factoryN)F)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r%   r(   r,   r-   r   r   r   r   r	      s    
r	   N)r1   Ú
__future__r   r   Úkombu.utils.compatr   Ú
sqlalchemyr   Úsqlalchemy.ext.declarativer   Úsqlalchemy.ormr   Úsqlalchemy.poolr   r)   Ú__all__r   Úobjectr	   r   r   r   r   Ú<module>   s   