B 4]:@s0ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z e rdd Z e Z Zn$e rd d ZeZ ZnejZ d d ZddZddZGdddeZddZddZddZddZddZddZed d!Zd"d#ZGd$d%d%eZd*d&d'Zd(d)Z dS)+N) decorator) defaultdict)jython)py2k)pypycGs&ttdttdS)z aggressive gc.collect for tests.g?r)gccollecttimeZsleep)argsr J/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/testing/util.pyjython_gc_collects  rcGsttdS)N)rr )r r r r pypy_gc_collect$srcCsdS)Nr r r r r lazy_gc-src#st}tr6yddl}||Wntk r4YnXddl}||x8|D]0x*td|jD]jfddfVq`WqNWdS)Nrcs |S)N)dumps)d)pickle_protocolr r Bzpicklers..) setrcPickleadd ImportErrorpicklerangeZHIGHEST_PROTOCOLloads)picklersrrr )rrr r1s  rcCs<t|trt||S|tdd|tjtd|S)N10 ) isinstancefloatrounddecimalZDecimalZ to_integralZ ROUND_FLOORpow)valueZprecr r r round_decimalEs   r)c@s<eZdZddZddZddZddZd d Zd d Zd S) RandomSetcCs tt|}t|t|S)N)listr__iter__randomZshuffleiter)selflr r r r,Ps zRandomSet.__iter__cCs4tdt|d}tt||}|||S)Nr)r-Zrandintlenr+rr,remove)r/indexitemr r r popUs z RandomSet.popcCstt||S)N)r*runion)r/otherr r r r7[szRandomSet.unioncCstt||S)N)r*r difference)r/r8r r r r9^szRandomSet.differencecCstt||S)N)r*r intersection)r/r8r r r r:aszRandomSet.intersectioncCst|S)N)r*)r/r r r copydszRandomSet.copyN) __name__ __module__ __qualname__r,r6r7r9r:r;r r r r r*Os r*cCsltt}x|D]\}}|||qWx>t|D].\}}x$||dD]}|||krHdSqHWq2WdSdS)zATrue if the given sorting conforms to the given partial ordering.NFT)rrr enumerate)tuplesZsorted_elementsZdepsparentchildiZnodenr r r conforms_partial_orderinghs  rEcsBttx|D]\}}||qWfddt|S)Nc3sft|dkrt|VnJxH|D]@}t||g}||sx|D]}|g|VqJWqWdS)Nr1)r2r+rr9r:)elementselemZsubsetZ sub_ordering)_all_orderingsedgesr r rH{s   z-all_partial_orderings.._all_orderings)rrrr.)r@rFrArBr )rHrIr all_partial_orderingsvs  rJc Cs>y ||_Wn.tk r8t|j|j||j|j}YnX|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. )r< TypeErrortypes FunctionType__code__ __globals__ __defaults__ __closure__)fnnamer r r function_nameds  rTcOsZ|}y"||f||}|ddd|St}|j|}|sLn|SYnXdS)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)ZctxrRargkwobjresultrXZraise_r r r run_as_contextmanagers  r]cCsdd|DS)zConverts the results of sql execution into a plain set of column tuples. Useful for asserting the results of an unordered query. cSsh|] }t|qSr )tuple).0rowr r r szrowset..r )resultsr r r rowsetsrccCsds t|dS)NF)AssertionError)msgr r r failsrfc Ospddlm}ddlm}ddlm}||j}|d}t|dd}||_z |||S| ||j||_XdS)z>Provide bound MetaData for a single test, dropping afterwards.r1)config)enginesr)schemametadataN) rgrh sqlalchemyriMetaDatadbgetattrrjdrop_all_tables) rRr rZrgrhrirjr/Z prev_metar r r provide_metadatas      rqcs0ddlmddlmtfdd}|S)ziForce the given table names to be dropped after test complete, isolating for foreign key cycles r1)rgr)inspectc s(z |||StjjdXdS)N) include_names)rprn)rRr rZ)rgrrnamesr r gos zforce_drop_names..go)rkrgrlrrr)rtrur )rgrrrtr force_drop_namess  rvc@s$eZdZdZddZddZeZdS)adictz,Dict keys available as attributes. Shadows.cCs*y||Stk r$t||SXdS)N)KeyErrordict__getattribute__)r/keyr r r rzszadict.__getattribute__cstfdd|DS)Ncsg|] }|qSr r )r_r{)r/r r sz"adict.__call__..)r^)r/keysr )r/r __call__szadict.__call__N)r<r=r>__doc__rzr~Zget_allr r r r rwsrwc Csddlm}m}m}m}m}ddlm} m} |dk r.decorate)r)rrr )rr teardown_events&sr)NN)!r&rr-rWr rLutilrrrrrrZ gc_collectrrr rr)rr*rErJrTr]rcrfrqrvryrwrprr r r r s@           .