zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
U
¸ý°dÇã@slddlZddlZddlmZddlmZddlmZddlm    Z    ddlm
Z
ddlm Z dd    lm Z dd
lm Z dd lmZdd lmZdd lmZddlmZdddddhZdd„Ze  d¡dd„ƒZ e
 d¡dd„ƒZe  d¡dd„ƒZe d¡dd„ƒZe     d¡dd „ƒZd!d"„Ze d¡d#d$„ƒZe d¡d%d&„ƒZe d¡d'd(„ƒZe d¡dd)d*œd+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_args)ÚupsertZpysqliteZ    aiosqliteÚ pysqlcipherZpysqlite_numericZpysqlite_dollarc    Cst |¡}|dkr| ¡}|j}|dk}d}|rê|dkrêd|ksDt‚t d|¡}|›}|D]:}|tkrv|dkrZ|}qZqZ|dkr‚qZqZ|dkrZ| d¡}qZ|sªtd|j›ƒ‚|›d|›}|rÊ|d|›7}|d    7}|rÞ|d
7}|j    |d }|rú|j    d d }|j    d|fd}|S)zUgiven a sqlite url + desired driver + ident, make a canonical
    URL out of it
 
    Nrú:memory:Z test_schemaz[_\.])ÚdbÚencÚ_z#sqlite filename has no name token: ú.dbz.enc)ÚdatabaseÚtest)Úpasswordz    sqlite+%s)Ú
drivername)
Úsa_urlÚmake_urlZget_driver_namerÚAssertionErrorÚreÚsplitÚ _drivernamesÚstripÚset)    rÚdriverÚidentÚfilenameZ    needs_encZ
name_tokenÚtokensZ new_filenameÚtoken©r&ú[d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/dialects/sqlite/provision.pyÚ _format_urls>
      r(ZsqlitecCs:t||dƒ}z | ¡Wntjk
r0YdSX|SdS©N)r(Ú get_dialectrZNoSuchModuleError)rr!Z    query_strr&r&r'rOs   rcCs t|d|ƒSr))r()rr"r&r&r'Ú_sqlite_follower_url_from_main[sr+csdddlm}|r$|›d|j›d‰n |j›d‰| |d¡‡fdd„ƒ}| |d¡‡fd    d
„ƒ}dS) Nr)Úeventrz_test_schema.dbÚconnectcs| dˆ›d¡dS)NzATTACH DATABASE "z" AS test_schema)Úexecute)Zdbapi_connectionZconnection_record©Z attach_pathr&r'r-is
 
ÿz._sqlite_post_configure_engine.<locals>.connectZengine_disposedcsDtj ˆ¡rt ˆ¡|jj}|r@|dkr@tj |¡r@t |¡dS)z¼most 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)ÚosÚpathÚexistsÚremoverr)Úenginer#r/r&r'Údisposews
 
 
z._sqlite_post_configure_engine.<locals>.dispose)Z
sqlalchemyr,r!Z listens_for)rr4Zfollower_identr,r-r5r&r/r'Ú_sqlite_post_configure_engine`s  
 
r6cCsdSr)r&©ÚcfgÚengr"r&r&r'Ú_sqlite_create_dbŠsr:cCst|jj|j|ƒdSr))Ú_drop_dbs_w_identrrr!r7r&r&r'Ú_sqlite_drop_dbsr<cCsJt d¡D]:}tj |¡\}}||kr
|dkr
t d|¡t |¡q
dS)NÚ.)rz.db.encz!deleting SQLite database file: %s)r0Úlistdirr1rr    Úinfor3)Z databasenamer!r"r1ÚfnameÚextr&r&r'r;”s
 r;cCs | ¡dSr))r5)ÚconfigrÚclsr&r&r'r œsr cCs
ddgiS)NÚprefixesÚ    TEMPORARYr&)r8r9r&r&r'Ú_sqlite_temp_table_keyword_args¡srFcCsNt d|¡t dd |¡¡t |¡}|D]}tD]}t|j||ƒq4q,dS)Nzdb reaper connecting to %rzidentifiers in file: %sz, )r    r?Újoinrrrr;r)rZidentsr"rr&r&r'Ú_reap_sqlite_dbs¦s  
rHF)Ú
set_lambdaÚsort_by_parameter_ordercCsHddlm}||ƒ}|r,|j||jƒd}n| ¡}|j|d|iŽ}|S)Nr)Úinsert)Úset_rJ)Zsqlalchemy.dialects.sqliterKZon_conflict_do_updateZexcludedZon_conflict_do_nothingÚ    returning)r8ÚtablerMrIrJrKZstmtr&r&r'Ú_upsert°s ÿÿrO)r0rÚrr4rrZtesting.provisionrrrrr    r
r r r rrr(Zfor_dbr+r6r:r<r;rFrHrOr&r&r&r'Ú<module>sR            û    1
 
 
)
 
 
 
 
    ÿ