L ipddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZddlmZhdZdZe j(ddZ e j(ddZe j(ddZej(ddZe j(ddZdZej(ddZej(ddZej(ddZej(dddddZy)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)upsert>pysqlite aiosqlite pysqlcipherpysqlite_dollarpysqlite_numericctj|}||j}|j}|dk(}d}|r|dk7rd|vsJt j d|}|D](}|t vr||}|dvr||jd}*|sJd|j|d|}|r|d|z }|d z }|r|d z }|j| }|r|jd }|jd|}|S)zUgiven a sqlite url + desired driver + ident, make a canonical URL out of it Nr:memory: test_schemaz[_\.])dbenc_z#sqlite filename has no name token: .dbz.enc)databasetest)passwordzsqlite+) drivername) sa_urlmake_urlget_driver_namerresplit _drivernamesstripset) rdriveridentfilename needs_enc name_tokentokenstoken new_filenames j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/dialects/sqlite/provision.py _format_urlr1$s8 //# C ~$$&||H-'IJH *H,,,(H- .E $>"F-'#"[[-  .O@OOz$Qvh/  awK 'L  F "Lgg|g,ggvg& ''F4' 5C Jsqlitectt||d} |j|S#tj$rYywxYwN)r1 get_dialectrNoSuchModuleError)rr( query_strs r0r r Ss@ c64 (C    s !77ct|d|Sr5)r1)rr)s r0_sqlite_follower_url_from_mainr:_s sD% ((r2cddlm}|r|d|jdn|jd|j|dfd}|j|dfd}y) Nr)eventrz_test_schema.dbconnectc0|jddy)NzATTACH DATABASE "z" AS test_schema)execute)dbapi_connectionconnection_record attach_paths r0r=z._sqlite_post_configure_engine..connectms     },< = r2engine_disposedctjjrtj|jj }|r<|dk7r6tjj|rtj|yyyy)zmost databases should be dropped using stop_test_class_outside_fixtures however a few tests like AttachedDBTest might not get triggered on that main hook rN)ospathexistsremoverr)enginer*rBs r0disposez._sqlite_post_configure_engine..dispose{s` 77>>+ & IIk "::&& J.277>>(3K IIh 4L.8r2) sqlalchemyr<r( listens_for)rrIfollower_identr<r=rJrBs @r0_sqlite_post_configure_enginerNdsq '(&--H 7  vy)  *   v01 2 r2cyr5cfgengr)s r0_sqlite_create_dbrTsr2cZt|jj|j|yr5)_drop_dbs_w_identrrr(rQs r0_sqlite_drop_dbrWscgg&& E:r2ctjdD]Y}tjj|\}}||vs*|dvs/t j d|tj |[y)N.)rz.db.encz!deleting SQLite database file: %s)rElistdirrFr$r inforH) databasenamer(r)rFfnameexts r0rVrVsX 3WW]]4( s E>c%77 HH8$ ? IIdO r2c$|jyr5)rJ)configrclss r0r r s JJLr2c ddgiS)Nprefixes TEMPORARYrP)rRrSs r0_sqlite_temp_table_keyword_argsres  &&r2ctjd|tjddj|tj|}|D]$}t D]}t |j||&y)Nzdb reaper connecting to %rzidentifiers in file: %sz, )r r[joinr r!r%rVr)ridentsr)rs r0_reap_sqlite_dbsriseHH )3/HH & &(9: //# C?& ?J cllJ > ??r2F) set_lambdasort_by_parameter_ordercddlm}||}|r#|j||j}n|j }|j |d|i}|S)Nr)insert)set_rk)sqlalchemy.dialects.sqlitermon_conflict_do_updateexcludedon_conflict_do_nothing returning)rRtablersrjrkrmstmts r0_upsertrvs_2 %=D))z$--/H)I**, 4>>  ,C D Kr2)rEr#rrIrr testing.provisionrrrr r r r r rrr%r1for_dbr:rNrTrWrVrerirvrPr2r0rzss #*(74$6-A8' ,^H%&x()))h'& (& R(  ;;)!((23 )'*'X??x)-ur2