
    "i              	       r   U 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	m
Z
mZ d dlmZ  e
       Zi Zeeef   ed<   i Zeeee	   f   ed<    e       Zee   ed	<   d
edeeef   fdZdd
edz  defdZdd
edz  defdZdd
edz  dee	   fdZdd
edz  dee	ddf   fdZedd
edz  dee	ddf   fd       Zy)    )	Generator)contextmanager)create_engine)Engine)Sessiondeclarative_basesessionmaker)get_settings_engine_cache_session_factory_cache_prepared_urlsdatabase_urlreturnc                 0    | j                  d      rddiS i S )Nsqlitecheck_same_threadF)
startswith)r   s    (apps/ordini/backend/app/core/database.py_connect_argsr      s     x(#U++I    Nc                     | xs t               j                  }t        j                  |      }|1t	        |d|j                  d       t        |            }|t        |<   |S )NTr   )futurepool_pre_pingconnect_args)r
   r   r   getr   r   r   r   
target_urlengines      r   
get_enginer      sc    <!<!<Jz*F~(33H==&z2	
 %+j!Mr   c                     | xs t               j                  }t        |      }|t        vr5t        j
                  j                  |       t        j                  |       |S )N)bind)r
   r   r   r   Basemetadata
create_alladdr   s      r   prepare_databaser&   '   sN    <!<!<J
#F'  f -:&Mr   c                     | xs t               j                  }t        j                  |      }|!t	        t        |      ddd      }|t        |<   |S )NFT)r!   	autoflush
autocommitr   )r
   r   r   r   r	   r&   )r   r   session_factorys      r   _get_session_factoryr+   0   sT    <!<!<J,00<O&,<Z,HTYfktxy-<z*r   c              #      K   t        |       } |       }	 | |j                          y # |j                          w xY wwNr+   closer   r*   dbs      r   open_db_sessionr2   9   s4     *<8O		B


   A + A =A c              #      K   t        |       } |       }	 | |j                          y # |j                          w xY wwr-   r.   r0   s      r   db_session_contextr5   B   s4     *<8O		B


r3   r-   )collections.abcr   
contextlibr   
sqlalchemyr   sqlalchemy.enginer   sqlalchemy.ormr   r   r	   app.core.configr
   r"   r   dictstr__annotations__r   setr   objectr   r   r&   r+   r2   r5    r   r   <module>rB      s   % % $ $ B B ( #%tCK  %;= S,w"778 =5C   S&[(9 S4Z 6 3:  sTz \'=R #* 	'4QUBU8V  S4Z 9WdTXEX;Y  r   