U
    ccD                     @   s2  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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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_argsZpysqliteZ	aiosqlitepysqlcipherZ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   H/tmp/pip-unpacked-wheel-8u86ls_i/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%   8   s    z._sqlite_post_configure_engine.<locals>.connect)Z
sqlalchemyr$   Zlistens_for)r   r(   r)   r$   r%   r   r'   r   _sqlite_post_configure_engine4   s    
r*   c                 C   s   d S )Nr   )cfgengr   r   r   r   _sqlite_create_dbM   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   r0   r   r   r   _sqlite_drop_dbR   s    r4   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>`   s   z4stop_test_class_outside_fixtures.<locals>.<listcomp>zPRAGMA database_list)r%   Zexec_driver_sqlZdisposer/   r0   r1   r3   )configdbclsconnfilesfile_r   r   r   r   ]   s    
r   c                 C   s
   ddgiS )Nprefixes	TEMPORARYr   )r+   r,   r   r   r   _sqlite_temp_table_keyword_argso   s    rA   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   r6   r   r"   r   r   r   r8      s   z$_reap_sqlite_dbs.<locals>.<listcomp>c                    s   g | ]}d | f qS )z%s_test_schema.%sr   rB   )r"   r   r   r8      s   c                    s   g | ]}d | f qS )z%s_%s_test_schema.%sr   rB   rC   r   r   r8      s   r.   )r	   r2   join_drivernamesr/   r0   r1   r3   )r   Zidentsr0   r   rC   r   _reap_sqlite_dbst   s*    
	rF   )r/   r    r   r(   r   r   Ztesting.provisionr   r   r   r   r	   r
   r   r   r   rE   Zfor_dbr#   r*   r-   r4   rA   rF   r   r   r   r   <module>   s:   








