L if4:ddlmZddlZddlZddlZddlmZddlmZddlmZddlZddl Z ddl m Z ddl m Z dd l mZd d l mZd d l mZd d l mZd dlmZej(rd dlmZd dlmZd dlmZGddZeZe dZe dZe dZe dZ d$dZ!GddZ"d%dZ#ejH d& d'dZ%ejH d( d)dZ% d*dZ%d$dZ&Gd d!Z'Gd"d#Z(y)+) annotationsN)Any)Dict)Optional)config) decorator) gc_collect)event)pool) await_only)Literal)Engine)URL) AsyncEnginecreZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZy)ConnectionKillerctj|_tjt |_t |_yN)weakrefWeakKeyDictionary proxy_refs collections defaultdictsettesting_enginesdbapi_connectionsselfs `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/testing/engines.py__init__zConnectionKiller.__init__%s/!335*66s;!$c tj|d|jtj|d|jtj|d|jtj|d|jy)Ncheckoutcheckincloseclose_detached)r listen _add_conn _remove_conn)r r s r!add_poolzConnectionKiller.add_pool*sY T:t~~6 T9d&7&78 T7D$5$56 T+T->->?r#cX|jj|d|j|<y)NT)raddr)r dbapi_con con_record con_proxys r!r*zConnectionKiller._add_conn2s$ ""9-%) "r#c:|jj|yr)rdiscard)r dbapi_connargs r!r+zConnectionKiller._remove_conn6s &&z2r#c|j|j|dvsJ|j|j|y)N)classglobalfunctionfixture)r,r rr.)r enginescopes r! add_enginezConnectionKiller.add_engine9s: fkk"BBBB U#''/r#cp |y#t$r"}tjd|zYd}~yd}~wwxYw)Nz5testing_reaper couldn't rollback/close connection: %s Exceptionwarningswarnr fnes r!_safezConnectionKiller._safe?s5  D  MMG!K    505ct|jD]-}||js|j|j/yr)listris_validrFrollbackr recs r! rollback_allzConnectionKiller.rollback_allGs5( )C3<< 3<<( )r#cdt|jD]R}||js|jj |j |j |jT|jD]}|j |j|jjyr) rIrrJrr3dbapi_connectionrF_checkinrKclear)r rMcons r! checkin_allzConnectionKiller.checkin_allLs( )C3<<&&..s/C/CD 3<<( ))) %C JJs|| $ % $$&r#c$|jyr)rTrs r! close_allzConnectionKiller.close_all[s r#c~tjsyddlm}|j |j j |yNr) provision)rbootstrapped_as_sqlalchemyrYprepare_for_drop_tablesr;url)r connectionrYs r!r\z(ConnectionKiller.prepare_for_drop_tables^s-00 ))**;*;*?*?Lr#c|j|}t|D]}t|jD]S}||js|j |j|j us9|j |jUt|drt|j|j|jy)N sync_engine) rrIrrJ_poolr rFrQhasattrrdisposerR)r r<engrM proxy_refs r!_drop_testing_enginesz&ConnectionKiller._drop_testing_enginesgs""5)9 C!$//2 7 (Y-?-?!3%OOsxx7 9#5#56  7sM*3;;=)   r#c&|jdy)Nr9)rfrs r! after_testzConnectionKiller.after_testxs "":.r#c2tjsy|jjry|j ddlm}tjj5}|j|jj|dddy#1swYyxYwrX) rrZ __class__"__leave_connections_for_teardown__rTr[rYdbconnectr\r;r])r testrYconns r!after_test_outside_fixturesz,ConnectionKiller.after_test_outside_fixtures{sr00  >> < <   YY    ED  - -dkkoot D E E Es 'B  Bch|j|jd|jdy)Nr9r7)rTrfrs r!stop_test_class_inside_fixturesz0ConnectionKiller.stop_test_class_inside_fixturess*  "":. ""7+r#c.tjjr{ttjjrVt tjj}tjjj  Jd|zyy)Nz/%d connection recs not cleared after test suite)r base_strong_ref_connection_recordsr lenrR)r lns r! stop_test_class_outside_fixturesz1ConnectionKiller.stop_test_class_outside_fixturessq 99 3 3 Lyy77AAB 88>>@LDKL 8 4r#ch|j|jD]}|j|yr)rTrrf)r r<s r! final_cleanupzConnectionKiller.final_cleanups1 )) .E  & &u - .r#cB|jD]}|jsJyr)rrJrLs r!assert_all_closedz"ConnectionKiller.assert_all_closeds!?? C||u r#N)__name__ __module__ __qualname__r"r,r*r+r=rFrNrTrVr\rfrhrprrrxrzr|r#r!rr$s[' @*30 ) 'M"/E$, L. r#rcp ||i|tjy#tjwxYwr)testing_reaperr|rDargskws r!assert_conns_closedrs++ DB((*((*5cp ||i|tjy#tjwxYw)zBDecorator that rolls back all open connections after fn execution.N)rrNrs r!rollback_open_connectionsrs+& DB##%##%rc<tj||i|y)z:Decorator that closes all connections before fn execution.NrrTrs r! close_firstrs OOr#cp ||i|tjy#tjwxYw)z9Decorator that closes all connections after fn execution.Nrrs r!close_open_connectionsrs+% DB""$""$rc#Kddlm}|jD]L}|r||vr t||d}|s"tt d|zj|}|j Nyw)Nrzsqlalchemy.dialects.%s)sqlalchemy.dialectsdialects__all__getattr __import__dialect)excludednamemods r! all_dialectsrsg#  tw at$3d:;DDdCkkm sA#A%c2eZdZdZdZdZdZddZdZy) ReconnectFixturec.||_g|_d|_yNF)dbapi connections is_stopped)r rs r!r"zReconnectFixture.__init__s r#c.t|j|Sr)rrr keys r! __getattr__zReconnectFixture.__getattr__stzz3''r#c|jj|i|}|jrC|j|j|j }|j dJd|jj||S)Nzselect 1z%simulated connect failure didn't work) rrmrrFr'cursorexecuterappend)r rkwargsrocurss r!rmzReconnectFixture.connectsq!tzz!!4262 ?? JJtzz ";;=D LL $ AA A5    # #D )Kr#cp |y#t$r"}tjd|zYd}~yd}~wwxYw)Nz.ReconnectFixture couldn't close connection: %sr?rCs r!rFzReconnectFixture._safes4 P D P MMJQN O O PrGc||_t|jD]}|j|jg|_yr)rrIrrFr')r stopcs r!shutdownzReconnectFixture.shutdowns= d&&' A JJqww  r#cd|_yr)rrs r!restartzReconnectFixture.restarts r#N)F) r}r~rr"rrmrFrrrr#r!rrs! ( P  r#rc|xstjj}tjjj}|si}t ||d<t ||jfd}jjj_ jjj_ |_S)Nmodulecjjjdjj_yr)rrrr)_disposer;sr!rcz$reconnecting_engine..disposes0%%'*/' r#) rrlr]rrrtesting_enginercr test_shutdownr test_restart)r]optionsrrcrr;s @@r!reconnecting_enginer s C II   # #E (/GH C )F~~H ">>//88F ....66FFN Mr#cyrrr]rasynciotransfer_staticpools r!rrs r#cyrrrs r!rr's r#c|r |rJddlm}nddlm}ddlm}|sd}d} d} n6|j dd}|j d d} |j d d} |xstjj}||}tj1|jtjjjk(r/tjrtjj} ni} || j|||fi| } | rG| jd k(r8tj | d d } tj | dd}|rpddlm}tj{t'tjj(|rWd}| j(j+tjj(n!|rtjj(| _| dk(r|rd| j,_nd| _t'| j(t(j0r.d| vr*d| vr&d| vr"d| j(_d| j(_|rt6j9| | | S)Nr)create_async_engine) create_engine)make_urlTr9F use_reaperr<sqlite_savepointsqlitermcd|_yr)isolation_level)rPconnection_records r! do_connectz"testing_engine..do_connect\s /3  ,r#beginc&|jdy)NBEGIN)exec_driver_sql)ros r!do_beginz testing_engine..do_begin`s   )r#) StaticPoolr8r pool_timeout max_overflow)sqlalchemy.ext.asyncior sqlalchemyrsqlalchemy.engine.urlrpoprrlr] drivernamedb_optscopyupdaterr listens_forsqlalchemy.poolr isinstancer _transfer_fromr` _has_events QueuePool_timeout _max_overflowrr=)r]rrr share_pool_sqlite_savepointrrrr<r use_optionsr;rrrs r!rr0s$$$  -.   [[t4  GZ0";;'95A C 3-C  S^^vyy}}/G/GG ..nn))+  7# 3 .+ .FFKK83   69 - 4 . 4   67 + * , *. 99 Z  %KJ KK & &vyy~~ 6 iinn   -1F   *   6;;/ + % + - + -  $% !!!&%0 Mr#cddlm}|stjj}gfd}fd}fd}||dz|t drJ_|_|_S)a'Provides a mocking engine based on the current testing.db. This is normally used to test DDL generation flow as emitted by an Engine. It should not be used in other cases, as assert_compile() and assert_sql_execution() are much better choices with fewer moving parts. r)create_mock_enginec(j|yr)r)sqlarbuffers r!executorzmock_engine..executors cr#c Dcgc]"}tjddt|$}}||k(sJ|ycc}w)Nz[\n\t]r[)resubstr)stmtssrecvrs r! assert_sqlzmock_engine..assert_sqls=7=>!y"c!f->>u}"d"}?s'<cfjdjfdjDS)N c3TK|]}t|j!yw))rN)rcompile).0rrs r! z1mock_engine..print_sql..s!HqQYYqY12Hs%()rjoinmock)rr;s@r! print_sqlzmock_engine..print_sqls% NNyyHFKKHHHr#z://r) rrrrlrrbrrr) dialect_namerrrrrr;s @@r! mock_enginersl. yy~~ F#I u 4h ?Fvv&& &FK"F F Mr#c0eZdZdZdZddZdZdZdZy) DBAPIProxyCursorzuProxy a DBAPI cursor. Tests can provide subclasses of this to intercept DBAPI-level cursor operations. cN||_||_|j|i||_yr)r;r^r)r r;rorrs r!r"zDBAPIProxyCursor.__init__s' !dkk4262 r#Nc ||r|jj||fi|S|jj|fi|Sr)rr)r stmt parametersrs r!rzDBAPIProxyCursor.executes? &4;;&&tZ>2> >&4;;&&t2r2 2r#c >|jj||fi|Sr)r executemany)r rparamsrs r!rzDBAPIProxyCursor.executemanys &t{{&&tV:r::r#c,t|jSr)iterrrs r!__iter__zDBAPIProxyCursor.__iter__sDKK  r#c.t|j|Sr)rrrs r!rzDBAPIProxyCursor.__getattr__st{{C((r#r) r}r~r__doc__r"rrr rrr#r!rrs 3 3 ;!)r#rc(eZdZdZdZdZdZdZy)DBAPIProxyConnectionz}Proxy a DBAPI connection. Tests can provide subclasses of this to intercept DBAPI-level connection operations. c.||_||_||_yr)ror; cursor_cls)r r;rors r!r"zDBAPIProxyConnection.__init__s  $r#cX|j|j|jg|i|Sr)rr;ro)r rrs r!rzDBAPIProxyConnection.cursors'tt{{DIIGGGGr#c8|jjyr)ror'rs r!r'zDBAPIProxyConnection.closes r#c.t|j|Sr)rrors r!rz DBAPIProxyConnection.__getattr__styy#&&r#N)r}r~rrr"rr'rrr#r!rrs% H'r#rr)NN)NNFF) r] Optional[URL]rOptional[Dict[str, Any]]rzLiteral[False]rboolreturnr)NNTF) r]rrrrz Literal[True]rrrr)NNFFFF)) __future__rrrtypingrrrrArr[rutilr r r r r util.typingr TYPE_CHECKINGr;r engine.urlr ext.asynciorrrrrrrrrroverloadrrrrrr#r!r"s# !  )CCL"# + + & &   % % ( ( V((,# %   %   (,! %   %      Pf#L)):''r#