3
aD                 @   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jddd Ze
jddd Zejddd Zejddd Ze	jddd Zejddd Zejddd Zej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   sv   |dkr8| j  dkr8| jr,| j| jd d} | jdd} | jd|f d} y| j  W n tjk
rl   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   J/tmp/pip-build-6_cqtusv/SQLAlchemy/sqlalchemy/dialects/sqlite/provision.pyr      s    r   c             C   s`   t j| } | j s| jdkr | S tjd| j}|jdd\}}| j }t j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} |j d fdd}d S )Nr   )eventconnectc                s0   s| j d jf  n| j 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(   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   sH   xBd| d||j f gD ](}tjj|rtjd|  tj| qW d S )Nz%s.dbz%s_%s_test_schema.dbz!deleting SQLite database file: %s)r   ospathexistsr	   inforemove)r*   r+   r   r.   r   r   r   _sqlite_drop_dbR   s    r2   c          
   C   s`   |j  }dd |jdD }W d Q R X |r\|j  x&|D ]}|r:tjj|r:tj| q:W d S )Nc             S   s   g | ]}|j r|j qS r   )file).0rowr   r   r   
<listcomp>a   s   z4stop_test_class_outside_fixtures.<locals>.<listcomp>zPRAGMA database_list)r%   Zexec_driver_sqlZdisposer-   r.   r/   r1   )configdbclsconnfilesZ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    r>   c                s   t jd|  t jddj| x|D ]xdD ]z xtd f g fddtD   fd	dtD   fd
dtD  D ](}tjj|r|t jd|  tj| q|W q.W q$W d S )Nzdb reaper connecting to %rzidentifiers in file: %sz, r8   db.encz%s.%sc                s   g | ]}d | f qS )z%s_%s.%sr   )r4   r   )r"   r   r   r   r6      s   z$_reap_sqlite_dbs.<locals>.<listcomp>c                s   g | ]}d | f qS )z%s_test_schema.%sr   )r4   r   )r"   r   r   r6      s   c                s   g | ]}d | f qS )z%s_%s_test_schema.%sr   )r4   r   )r"   r   r   r   r6      s   z!deleting SQLite database file: %s)r8   r?   )r	   r0   join_drivernamesr-   r.   r/   r1   )r   Zidentsr.   r   )r"   r   r   _reap_sqlite_dbst   s    


2rB   )r-   r    r   r'   r   r   Ztesting.provisionr   r   r   r   r	   r
   r   r   r   rA   Zfor_dbr#   r)   r,   r2   r>   rB   r   r   r   r   <module>   s*   
