U
    ÌZjD  ã                   @   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   úg/var/www/html/TRUCKING_PROJECT/venv/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%   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:   








