50T`ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z ddlm Z e rd Z e xZZne rd ZexZZn ejZd Zd Zd ZGddeZdZdZdZdZdZdZedZdZdZd dZdZ Gdde!Z"d!dZ#dZ$dS)"N decorator) defaultdict)inspect_getfullargspec)jython)py2k)pypyctjtjdtjtjdS)z aggressive gc.collect for tests.g?r)gccollecttimesleepargss /srv/buildsys-work-dir/castor/build_node/builder-2/WGSG1/unpkd_srcs/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/sqlalchemy/testing/util.pyjython_gc_collectrs5  3  qcRtjtjdSN)r r rs rpypy_gc_collectr%s  rcdSrrrrlazy_gcr.s rc#Kt}tr+ ddl}||n#t$rYnwxYwddl}|||D])t d|jD]jfdfV*dS)Nrc0|Sr)dumps)dpickle_protocols rzpicklers..Cs7==H+E+Er) setr cPickleadd ImportErrorpicklerangeHIGHEST_PROTOCOLloads)picklersr$r'r r!s @@rr+r+2suuH   NNN LL ! ! ! !    D MMM LLFFb&"9:: F FH-!E!E!E!E!EE E E E E FFFs5 AAct|trt||S|tjdd|zzztjtd|z S)N10 ) isinstancefloatrounddecimalDecimal to_integral ROUND_FLOORpow)valueprecs r round_decimalr:Fsl%"UD!!! GOC#*$455 5 B B   B  rc2eZdZdZdZdZdZdZdZdS) RandomSetctt|}tj|t |Sr)listr#__iter__randomshuffleiter)selfls rr?zRandomSet.__iter__Qs6 d## $ $qAwwrctjdt|dz }tt||}|||S)Nr)r@randintlenr>r#r?remove)rCindexitems rpopz RandomSet.popVsRq#d))a-00CLL&&''. D rcRtt||Sr)r<r#unionrCothers rrNzRandomSet.union\s4//000rcRtt||Sr)r<r# differencerOs rrRzRandomSet.difference_se44555rcRtt||Sr)r<r# intersectionrOs rrTzRandomSet.intersectionbs ))$66777rc t|Sr)r<)rCs rcopyzRandomSet.copyesrN) __name__ __module__ __qualname__r?rLrNrRrTrVrrrr<r<Psn  111666888rr<ctt}|D] \}}|||!t|D] \}}||dD]}|||vrdS!dS)zATrue if the given sorting conforms to the given partial ordering.NFT)rr#r% enumerate)tuplessorted_elementsdepsparentchildinodens rconforms_partial_orderingrdis s  D   V _--4 $  AtAwuuu trctt|D] \}}||!fdt|S)Nc3 Kt|dkrt|VdS|D]V}t||g}||s|D] }|g|zV WdS)NrF)rHr>r#rRrT)elementselemsubset sub_ordering_all_orderingsedgess rrkz-all_partial_orderings.._all_orderings|s x==A  x..   4 4X114&99**5;774(6v(>(>44 #f|33333  4 4r)rr#r%rB)r\rgr_r`rkrls @@rall_partial_orderingsrmwsw   E!!  e      4 4 4 4 4 4 x(( ) ))rc ||_n<#t$r/tj|j|j||j|j}YnwxYw|S)acReturn a function with a given __name__. Will assign to __name__ and return the original function if possible on the Python implementation, otherwise a new function will be constructed. This function should be phased out as much as possible in favor of @decorator. Tests that "generate" many named tests should be modernized. )rW TypeErrortypes FunctionType__code__ __globals__ __defaults__ __closure__)fnnames rfunction_namedrxs[       Kr    Is 6AAc|} ||g|Ri|}|ddd|S#tj}|j|}|s|cYSxYw)aRun the given function under the given contextmanager, simulating the behavior of 'with' to support older Python versions. This is not necessary anymore as we have placed 2.6 as minimum Python version, however some tests are still using this structure. N) __enter____exit__sysexc_info)ctxrvargkwobjresultr}raise_s rrun_as_contextmanagerrs --//C C$#$$$$$ T4&&& <>>x(  MMMs $;$A!cd|DS)zConverts the results of sql execution into a plain set of column tuples. Useful for asserting the results of an unordered query. c,h|]}t|Srtuple).0rows r zrowset..s * * *3E#JJ * * *rr)resultss rrowsetrs + *' * * **rcJ|rr)msgs rfailrs#5rc>ddlm}ddlm}ddlm}||j}|d}t|dd}||_ ||i|| ||j||_S#| ||j||_wxYw)z>Provide bound MetaData for a single test, dropping afterwards.rFconfig)enginesrschemametadataN) rr sqlalchemyrMetaDatadbgetattrrdrop_all_tables) rvrrrrrrrC prev_metas rprovide_metadatars!!!!!!vy))H 7Dj$//IDM"r42&)444!  &)444! !!!!s A88$Bcddlm}t|D]}|t |jfd|Dddt zzddS)a A facade around @testing.combinations() oriented towards boolean keyword-based arguments. Basically generates a nice looking identifier based on the keywords and also sets up the argument names. E.g.:: @testing.flag_combinations( dict(lazy=False, passive=False), dict(lazy=True, passive=False), dict(lazy=False, passive=True), dict(lazy=False, passive=True, raiseload=True), ) would result in:: @testing.combinations( ('', False, False, False), ('lazy', True, False, False), ('lazy_passive', True, True, False), ('lazy_passive', True, True, True), id_='iaaa', argnames='lazy,passive,raiseload' ) rFrcg|]@dfdDftfdDzAS)_c3HK|]}|d|VdSFNgetrkrs r z/flag_combinations...s499Aq%9a999999rc3DK|]}|dVdSrrrs rrz/flag_combinations...s/22AEE!UOO222222r)joinr)rrkeyss @r z%flag_combinations..su   XX9999999 9 9 ;2222T22222 3   rraa,)id_argnames)rrr#updatesorted combinationsrHr)rrrrs @rflag_combinationsrs< 55D  A $<z"resolve_lambda..s%:::#S"&&++:::rr)rdictrsrrprqrr)__fnrpos_args pass_pos_argsglbnew_fns ` rresolve_lambdar sy&d++A.H:::::::M t CJJrNNN   s 3 3F 6 " "M " ""rfunctionc"ddlmfd}|S)z&Provide MetaData for a pytest fixture.rFrcPfd}|S)Nc3Kddlm}|x}|_ ||}|j|V|jdS#|jwxYw)Nrr)rrrr create_allrdrop_all)rCrrrrrvs rrun_ddlz3metadata_fixture..decorate..run_ddl s ) ) ) ) ) )'-'8'8 8Ht} -D(++##FI... !!&),,,,,!!&),,,,s *A,,B)scope)fixture)rvrrddls` rdecoratez"metadata_fixture..decoratesB - - - - - -)v~~C~((111r)rr)rrrs` @rmetadata_fixturers=222222 OrcLddlmddlmtfd}|S)ziForce the given table names to be dropped after test complete, isolating for foreign key cycles rFrr)inspectc ||i|tjjS#tjjwxYw)N) include_names)rr)rvrrrrnamess rgozforce_drop_names..go:sg P2t?r?? FIwwvy'9'9 O O O O OOFIwwvy'9'9 O O O O Os 0'A)rrrrr)rrrrs` @@rforce_drop_namesr2sf """"""PPPPPPYP Irc"eZdZdZdZdZeZdS)adictz,Dict keys available as attributes. Shadows.cj ||S#t$rt||cYSwxYwr)KeyErrorr__getattribute__)rCkeys rrzadict.__getattribute__HsH 49  4 4 4((s33 3 3 3 4s  %22c:tfd|DS)Nc g|] }| Srr)rrrCs rrz"adict.__call__..Os000Cd3i000rr)rCrs` r__call__zadict.__call__Ns&00004000111rN)rWrXrY__doc__rrget_allrrrrrEs966444 222GGGrrc ddlm}m}m}m}m}ddlm} m} |t|}| 5} t| |D]\} } | r:|| |vr| | || ||A| r|jjsP| D]x\} }|| |vr || ||d||d||}| | ||jjg|jjg|y ddddS#1swxYwYdS)Nr)ColumnTableIntegerrForeignKeyConstraint) DropTableDropConstraintrxy)rw)rrrrrrsqlalchemy.schemarrr#connectreversedget_sorted_table_and_fkc_namesexecutedialectsupports_altercrr)engine inspectorrrrrrrrrrconntnamefkcsfkctbs rrrTsJ<;;;;;;; M**   T#  4 4F 4 C C    KE4  ,m1K1K IeeE88::fEEEFF ~4"&JE3%1!66   sG,,sG,,% BLL&00"$&BDF8#NNN3 sC0D::D>D>c,tfd}|S)Ncp ||i|S#wxYwr)_clear)rvrr event_clss rrz!teardown_events..decoratesD 2s>b>>       I      s5r)rrs` rteardown_eventsrs-Y Or)r)NN)%r3r r@r|rrputilrrrrr r r gc_collectrrr r+r:r#r<rdrmrxrrrrrrrrrrrrrrrrsg ))))))  -,J  +*JJ   FFF(2   ***&(2+++ "" "$///d###"0&     D   ++++\r