o
    =aD                     @   s0  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 h 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 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>   pysqlite	aiosqlitepysqlciphersqlitec                 C   sp   |dkr|   dkr| jr| j| jd d} | jdd} | jd|f d} z|   W | S  tjy7   Y d S w )Nr   z.enc)databasetest)passwordz	sqlite+%s)
drivername)get_driver_namer   setget_dialectr   NoSuchModuleError)r   driver	query_str r   Z/var/www/html/gps/gps/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/provision.pyr      s   
r   c                 C   sZ   t | } | jr| jdkr| S td| j}|dd\}}|  }t d||||f S )Nz:memory:z(.+?)\.(.+)$      zsqlite+%s:///%s_%s.%s)sa_url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                    s2   s|  d jf  d S |  d jf  d S )Nz2ATTACH DATABASE "%s_test_schema.db" AS test_schemaz5ATTACH DATABASE "%s_%s_test_schema.db" AS test_schema)executer   )dbapi_connectionconnection_recordenginefollower_identr   r   r+   8   s   z._sqlite_post_configure_engine.<locals>.connect)
sqlalchemyr*   listens_for)r   r0   r1   r*   r+   r   r/   r   _sqlite_post_configure_engine4   s   
r4   c                 C   s   d S )Nr   )cfgengr%   r   r   r   _sqlite_create_dbM   s   r7   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)r5   r6   r%   r:   r   r   r   _sqlite_drop_dbR   s   
r>   c                 C   st   |  }dd |dD }W d    n1 sw   Y  |r6|  |D ]}|r5tj|r5t| q&d S d 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+   exec_driver_sqldisposer9   r:   r;   r=   )configdbclsconnfilesfile_r   r   r   r   ]   s   

r   c                 C   s
   ddgiS )Nprefixes	TEMPORARYr   )r5   r6   r   r   r   _sqlite_temp_table_keyword_argso   s   
rM   c                    s   t d|  t dd| |D ]@dD ]; d f g fddtD   fddtD   fd	dtD  D ]}tj|rOt d
|  t| q;qqd S )Nzdb reaper connecting to %rzidentifiers in file: %sz, )rF   zdb.encz%s.%sc                    s   g | ]	}d | f qS )z%s_%s.%sr   r@   r   r(   r%   r   r   rB          z$_reap_sqlite_dbs.<locals>.<listcomp>c                    s   g | ]}d | f qS )z%s_test_schema.%sr   rN   )r(   r   r   rB      s    
c                    s   g | ]	}d | f qS )z%s_%s_test_schema.%sr   rN   rO   r   r   rB      rP   r8   )r	   r<   join_drivernamesr9   r:   r;   r=   )r   identsr:   r   rO   r   _reap_sqlite_dbst   s2   
	
rT   )r9   r"    r   r0   r   r    testing.provisionr   r   r   r   r	   r
   r   r   r   rR   for_dbr)   r4   r7   r>   rM   rT   r   r   r   r   <module>   s<    







