a
    [g                     @   s  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 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 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 ddlmZ eddd Zeddd Zeddd Zeddd Zdd Zedd d! Zedd"d# Zedd$d% Zedd&d' Zedd(d) Zd*S )+    )inspect)Integer   )create_engine)exc)Column)DropConstraint)ForeignKeyConstraint)MetaData)Table)	create_db)"drop_all_schema_objects_pre_tables)drop_db)generate_driver_url)get_temp_table_name)log)normalize_sequence)post_configure_engine)run_reap_dbs)temp_table_keyword_argsZmssqlc                 C   s   |j dkrd|jj_d S )NpyodbcF)driverdialectZdbapiZpooling)urlZengineZfollower_ident r   q/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/sqlalchemy/dialects/mssql/provision.pyr      s    
r   c                 C   s   |   }| jd||f d}|dvr0|jdd}|dkrF|ddi}|rT||}z|  W n tjyv   Y d S 0 |S d S )	Nz%s+%s)Z
drivername)r   aioodbc )queryr   ZMARS_ConnectionZYes)Zget_backend_namesetZupdate_query_dictZupdate_query_stringget_dialectr   ZNoSuchModuleError)r   r   Z	query_strbackendnew_urlr   r   r   r   $   s    
r   c                 C   s   |  jdd\}|d|  |d|  |d|  |d|  |d |d W d    n1 sr0    Y  d S )	N
AUTOCOMMITZisolation_levelzcreate database %sz1ALTER DATABASE %s SET ALLOW_SNAPSHOT_ISOLATION ONz0ALTER DATABASE %s SET READ_COMMITTED_SNAPSHOT ONzuse %szcreate schema test_schemazcreate schema test_schema_2)connectexecution_optionsexec_driver_sqlcfgengidentconnr   r   r   _mssql_create_db;   s    
r-   c                 C   s>   |  jdd}t|| W d    n1 s00    Y  d S )Nr#   r$   )r%   r&   _mssql_drop_ignorer(   r   r   r   _mssql_drop_dbJ   s    r/   c              
   C   sZ   z |  d|  td| W dS  tjyT } ztd| W Y d }~dS d }~0 0 d S )Nzdrop database %szReaped db: %sTzcouldn't drop db: %sF)r'   r   infor   ZDatabaseErrorwarning)r,   r+   errr   r   r   r.   P   s    r.   c                 C   s   t d|  t| }| jdd}t dd| |d}dd |D }t }|D ]}||v rZ|| qZd	 }}	t	|d
D ]\}	}
t
||
r|d
7 }qt d||	 W d    n1 s0    Y  d S )Nzdb reaper connecting to %rr#   r$   zidentifiers in file: %sz, zselect d.name from sys.databases as d where name like 'TEST_%' and not exists (select session_id from sys.dm_exec_sessions where database_id=d.database_id)c                 S   s   h | ]\}|  qS r   )lower).0dbnamer   r   r   	<setcomp>n       z"_reap_mssql_dbs.<locals>.<setcomp>r      z-Dropped %d out of %d stale databases detected)r   r0   r   r%   r&   joinr'   r   add	enumerater.   )r   Zidentsr*   r,   Zto_reapZ	all_namesZto_dropnameZdroppedtotalr5   r   r   r   _reap_mssql_dbsa   s&    

r>   c                 C   s   i S )Nr   )r)   r*   r   r   r   _mssql_temp_table_keyword_args}   s    r?   c                 C   s   d| S )Nz##r   )r)   r*   	base_namer   r   r   _mssql_get_temp_table_name   s    rA   c                 C   s   |  jdd}t|}d d| j| jfD ]v}|j|dD ]d}t|t tdt	tdt	|d}t|j
||dD ],}|tt|jjg|jjg|d d qpq:q*W d    n1 s0    Y  d S )	Nr#   r$   Zdbo)schemaxyr<   )r<   )r%   r&   r   Ztest_schemaZtest_schema_2Zget_table_namesr   r
   r   r   Zget_foreign_keysexecuter   r	   crC   rD   )r)   r*   r,   Z	inspectorrB   ZtnametbZfkr   r   r   r      s&    r   c                 C   s   |j d u rd|_ |S )Nr8   )start)r)   sequencer   r   r   r      s    
r   N)Z
sqlalchemyr   r   r   r   r   rB   r   r   r	   r
   r   Ztesting.provisionr   r   r   r   r   r   r   r   r   r   Zfor_dbr-   r/   r.   r>   r?   rA   r   r   r   r   <module>	   sJ   







