U a@s2ddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZdddhZe dddZ e dddZe dddZedddZe dddZedddZedddZedd d!ZdS)"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_argsZpysqliteZ aiosqlite pysqlcipherZsqlitecCsx|dkr8|dkr8|jr,|j|jdd}|jdd}|jd|fd}z |Wntjk rnYdSX|SdS)Nrz.enc)databasetest)passwordz sqlite+%s) drivername)get_driver_namerset get_dialectrZNoSuchModuleError)rdriverZ query_strreC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\dialects\sqlite\provision.pyrs  rcCs^t|}|jr|jdkr|Std|j}|dd\}}|}td||||fSdS)Nz:memory:z (.+?)\.(.+)$zsqlite+%s:///%s_%s.%s)sa_urlZmake_urlrrematchgroupr)ridentmnameextrrrr_sqlite_follower_url_from_main$s r#cs*ddlm}|dfdd}dS)Nr)eventconnectcs0s|djfn|djfdS)Nz2ATTACH DATABASE "%s_test_schema.db" AS test_schemaz5ATTACH DATABASE "%s_%s_test_schema.db" AS test_schema)executer)Zdbapi_connectionZconnection_recordenginefollower_identrrr%8sz._sqlite_post_configure_engine..connect)Z sqlalchemyr$Z listens_for)rr(r)r$r%rr'r_sqlite_post_configure_engine4s  r*cCsdS)Nr)cfgengrrrr_sqlite_create_dbMsr-cCsDd|d||jffD](}tj|rtd|t|qdS)Nz%s.dbz%s_%s_test_schema.db!deleting SQLite database file: %s)rospathexistsr inforemove)r+r,rr0rrr_sqlite_drop_dbRs   r4c Cs\|}dd|dD}W5QRX|rX||D]}|r8tj|r8t|q8dS)NcSsg|]}|jr|jqSr)file).0rowrrr `sz4stop_test_class_outside_fixtures..zPRAGMA database_list)r%Zexec_driver_sqlZdisposer/r0r1r3)configdbclsconnfilesfile_rrrr ]s r cCs ddgiS)Nprefixes TEMPORARYr)r+r,rrr_sqlite_temp_table_keyword_argsosrAcstd|tdd||D]dD]vdfgfddtDfddtDfd dtDD](}tj|rvtd |t|qvq*q"dS) Nzdb reaper connecting to %rzidentifiers in file: %sz, )r:zdb.encz%s.%scsg|]}d|fqS)z%s_%s.%srr6rr"rrrr8sz$_reap_sqlite_dbs..csg|]}d|fqS)z%s_test_schema.%srrB)r"rrr8scsg|]}d|fqS)z%s_%s_test_schema.%srrBrCrrr8sr.)r r2join _drivernamesr/r0r1r3)rZidentsr0rrCr_reap_sqlite_dbsts*      rF)r/rrr(rrZtesting.provisionrrrrr r r r r rEZfor_dbr#r*r-r4rArFrrrrs: