
    Xj                     .   d dl m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  ee          Z ee
j        ddd	d
dddd          Z ej        ed          d             Z edde          Zdad Zed             Zd Zd Zed             ZdS )    )contextmanager)create_engineevent)sessionmaker)Pool)settings)
get_logger      Ti  Futf8z-c client_encoding=utf8)client_encodingoptions)	pool_sizemax_overflowpool_pre_pingpool_recycleechoconnect_argsconnectc                    t          | d          ryt          | j        t                    r| j                                        n%t          | j                                                  }d|v rt
                              d           d S | j        j                                        }d|v rt
                              d           d S 	 | 	                                }|
                    d           |                                 t
                              d           d S # t          $ r(}t
                              d|            Y d }~d S d }~ww xY w)Ndriversqlitez*Skipping search_path for SQLite connectionzDSkipping search_path for SQLite connection (detected via class name)zSET search_path TO publicz3Set search_path to public for PostgreSQL connectionzFailed to set search_path: )hasattr
isinstancer   strlowerloggerdebug	__class____name__cursorexecuteclose	Exceptionwarning)
dbapi_connconnection_recorddriver_name
conn_classr!   es         6/lsinfo/ai/hellotax_ai/base_platform/app/db/session.pyset_search_pathr,      sX   z8$$  *+S110J##%%%Z&''--// 	
 {""LLEFFFF%.4466J:[\\\:""$$2333JKKKKK : : :8Q88999999999:s   	AD" "
E,EE)
autocommit	autoflushbindNc                  t    t           +t          t          dd           } | rt          | ddd          a t           S )NDATA_CENTER_DATABASE_URL   T)r   r   r   )
_dc_enginegetattrr   r   )dc_urls    r+   _get_dc_enginer6   2   s@    #=tDD 	`&vZ^___J    c               #      K   t                      } | sd V  d S  t          |                       }	 |V  |                                 d S # |                                 w xY w)N)r/   )r6   r   r#   )enginesessions     r+   get_data_center_dbr;   ;   sp      F 


'l'''))Gs   A A"c               #     K   ddl m}  ddlm} t	                      }	  |             }|r4|                    ||           t                              d|            n0|                    |d            t                              d           |V  	 |                    |d            n4# t          $ r'}t          	                    d|            Y d }~nd }~ww xY w|
                                 d S # 	 |                    |d            n4# t          $ r'}t          	                    d|            Y d }~nd }~ww xY w|
                                 w xY w)Nr   get_current_tenant_idTenantSchemaManagerz'Database session created for tenant_id=z*Database session created for public schemaError resetting search_path: )app.core.tenant_contextr>   app.db.tenant_schemar@   SessionLocalr,   r   r   r$   r%   r#   )r>   r@   db	tenant_idr*   s        r+   get_dbrG   H   s     ======888888	B))++	 	G//I>>>LLN9NNOOOO//D999LLEFFF	@//D9999 	@ 	@ 	@NN>1>>????????	@





		@//D9999 	@ 	@ 	@NN>1>>????????	@




sN   A4C4 B* *
C4CC4E6DE
D>D94E9D>>Ec               #      K   t                      } 	 ddlm} |                    | d            | V  |                                  d S # |                                  w xY w)Nr   r?   )rD   rC   r@   r,   r#   )rE   r@   s     r+   get_db_without_tenantrI   ^   sh      	B<<<<<<++B555









s    A Ac               #   T  K   ddl m}  ddlm} ddlm} t                      }	  |            }|r|                    ||           n|                    |d            |V  |                                 nl# t          $ r_}|
                                 t                              dt          |                       | dt          |                     d d }~ww xY w	 	 |                    |d            n4# t          $ r'}t                              d|            Y d }~nd }~ww xY w|                                 d S # 	 |                    |d            n4# t          $ r'}t                              d|            Y d }~nd }~ww xY w|                                 w xY w)Nr   )DatabaseErrorr=   r?   z"Transaction failed, rolling back: zDatabase transaction failed: rA   )app.core.exceptionsrK   rB   r>   rC   r@   rD   r,   commitr$   rollbackr   errorr   r%   r#   )rK   r>   r@   rE   rF   r*   s         r+   get_db_with_transactionrP   i   s     111111======888888	B))++	 	://I>>>>//D999
		 P P P
B#a&&BBCCCmDCFFDDEE4OP 		@//D9999 	@ 	@ 	@NN>1>>????????	@





		@//D9999 	@ 	@ 	@NN>1>>????????	@




sm   AA6 5E 6
C ACCE $C; ;
D,D''D,F'EF'
F(F
F'
FF')
contextlibr   
sqlalchemyr   r   sqlalchemy.ormr   sqlalchemy.poolr   
app.configr   common_loggingr	   r    r   DATABASE_URLr9   listens_forr,   rD   r3   r6   r;   rG   rI   rP    r7   r+   <module>rZ      sr   % % % % % % + + + + + + + + ' ' ' ' ' '                   % % % % % %	H				%+8QRR
 
 
 4##: : $#:. |uFKKK
   	 	 	  ,       r7   