U
    ÌZjŸ  ã                   @   s8  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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)Úget_temp_table_name)Úlog)Úrun_reap_dbs)Útemp_table_keyword_argsZmssqlc              	   C   sl   |  ¡ jdd��R}| d| ¡ | d| ¡ | d| ¡ | d| ¡ | d¡ | d¡ W 5 Q R X 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Úconn© r   úf/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/dialects/mssql/provision.pyÚ_mssql_create_db   s    ÿÿ
r   c              	   C   s*   |  ¡ jdd��}t||ƒ W 5 Q R X d S )Nr   r   )r   r   Ú_mssql_drop_ignorer   r   r   r   Ú_mssql_drop_db"   s    r!   c              
   C   s\   z |   d| ¡ t d|¡ W dS  tjk
rV } zt d|¡ W Y ¢dS d }~X Y nX 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    (   s    r    c              	   C   s¼   t  d| ¡ t| ƒ}| ¡ jdd��Ž}t  dd |¡¡ | d¡}dd„ |D ƒ}tƒ }|D ]}||krZ| |¡ qZd	 }}	t	|d
ƒD ]\}	}
t
||
ƒr„|d
7 }q„t  d||	¡ W 5 Q R X d S )Nzdb reaper connecting to %rr   r   zidentifiers in file: %sz, z›select 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>G   s     z"_reap_mssql_dbs.<locals>.<setcomp>r   é   z-Dropped %d out of %d stale databases detected)r   r"   r   r   r   Újoinr   ÚsetÚaddÚ	enumerater    )ÚurlZidentsr   r   Zto_reapZ	all_namesZto_dropÚnameZdroppedÚtotalr'   r   r   r   Ú_reap_mssql_dbs9   s*    ÿ

  ÿr1   c                 C   s   i S )Nr   )r   r   r   r   r   Ú_mssql_temp_table_keyword_argsV   s    r2   c                 C   s   d| S )Nz##r   )r   r   Ú	base_namer   r   r   Ú_mssql_get_temp_table_name[   s    r4   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 5 Q R X 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	   Úcr6   r7   )r   r   r   Z	inspectorr5   ZtnameÚtbZfkr   r   r   r   `   s*    û  ÿÿÿr   N)Z
sqlalchemyr   r   Ú r   r   r5   r   r   r	   r
   r   Ztesting.provisionr   r   r   r   r   r   r   Zfor_dbr   r!   r    r1   r2   r4   r   r   r   r   Ú<module>   s8   




