U
    yc)                     @   sV  d dl Z d dl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dddh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eddd  Zedd!d" Zedd#d$ Zedd'd%d&ZdS )(    N   )exc)url)	create_db)drop_db)follower_url_from_main)generate_driver_url)log)post_configure_engine)run_reap_dbs) stop_test_class_outside_fixtures)temp_table_keyword_args)upsertZpysqliteZ	aiosqlitepysqlcipherZpysqlite_numericZpysqlite_dollarZsqlitec                 C   sx   |dkr8|   dkr8| jr,| j| jd d} | jdd} | jd|f d} z|   W n tjk
rn   Y d S X | S d S )Nr   z.enc)databasetest)passwordz	sqlite+%s)
drivername)get_driver_namer   setget_dialectr   ZNoSuchModuleError)r   driverZ	query_str r   q/var/www/sbouman/reportbro-server-tornado/env/lib/python3.8/site-packages/sqlalchemy/dialects/sqlite/provision.pyr      s    r   c                 C   s^   t | } | jr| jdkr| S td| j}|dd\}}|  }t d||||f S d S )Nz:memory:z(.+?)\.(.+)$      zsqlite+%s:///%s_%s.%s)sa_urlZmake_urlr   rematchgroupr   )r   identmnameextr   r   r   r   _sqlite_follower_url_from_main-   s    
r$   c                    s*   ddl m} | d fdd}d S )Nr   )eventconnectc                    s0   s|  d jf  n|  d jf  d S )Nz2ATTACH DATABASE "%s_test_schema.db" AS test_schemaz5ATTACH DATABASE "%s_%s_test_schema.db" AS test_schema)executer   )Zdbapi_connectionZconnection_recordenginefollower_identr   r   r&   A   s    z._sqlite_post_configure_engine.<locals>.connect)Z
sqlalchemyr%   Zlistens_for)r   r)   r*   r%   r&   r   r(   r   _sqlite_post_configure_engine=   s    
r+   c                 C   s   d S )Nr   )cfgengr    r   r   r   _sqlite_create_dbV   s    r.   c                 C   sD   d| d||j f fD ](}tj|rtd|  t| qd S )Nz%s.dbz%s_%s_test_schema.db!deleting SQLite database file: %s)r   ospathexistsr	   inforemove)r,   r-   r    r1   r   r   r   _sqlite_drop_db[   s    r5   c              	   C   s\   |  }dd |dD }W 5 Q R X |rX|  |D ]}|r8tj|r8t| q8d S )Nc                 S   s   g | ]}|j r|j qS r   )file).0rowr   r   r   
<listcomp>i   s   z4stop_test_class_outside_fixtures.<locals>.<listcomp>zPRAGMA database_list)r&   Zexec_driver_sqlZdisposer0   r1   r2   r4   )configdbclsconnfilesfile_r   r   r   r   f   s    
r   c                 C   s
   ddgiS )Nprefixes	TEMPORARYr   )r,   r-   r   r   r   _sqlite_temp_table_keyword_argsx   s    rB   c                    s   t d|  t dd| |D ]dD ]v d f g fddtD   fddtD   fd	dtD  D ](}tj|rvt d
|  t| qvq*q"d S )Nzdb reaper connecting to %rzidentifiers in file: %sz, )r;   zdb.encz%s.%sc                    s   g | ]}d | f qS )z%s_%s.%sr   r7   r   r#   r    r   r   r9      s   z$_reap_sqlite_dbs.<locals>.<listcomp>c                    s   g | ]}d | f qS )z%s_test_schema.%sr   rC   )r#   r   r   r9      s   c                    s   g | ]}d | f qS )z%s_%s_test_schema.%sr   rC   rD   r   r   r9      s   r/   )r	   r3   join_drivernamesr0   r1   r2   r4   )r   Zidentsr1   r   rD   r   _reap_sqlite_dbs}   s*    
	rG   c                 C   sB   ddl m} ||}|r,|j||jd}n| }|j| }|S )Nr   )insert)set_)Zsqlalchemy.dialects.sqliterH   Zon_conflict_do_updateexcludedZon_conflict_do_nothing	returning)r,   tablerK   Z
set_lambdarH   stmtr   r   r   _upsert   s    
rN   )N)r0   r    r   r)   r   r   Ztesting.provisionr   r   r   r   r	   r
   r   r   r   r   rF   Zfor_dbr$   r+   r.   r5   rB   rG   rN   r   r   r   r   <module>   sJ   	








