§ w<ˆj¥'ãó`—ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z ddlm Z e rd „Z e xZZne rd „ZexZZn ejZd „Zd „Zd „ZGd„de¦«Zd„Zd„Zd„Zd„Zd„Zd„Zed„¦«Zd„Zd„Zd d„Zd„Z Gd„de!¦«Z"d!d„Z#d„Z$dS)"éNé©Ú decorator)Ú defaultdict)Úinspect_getfullargspec)Újython)Úpy2k)Úpypycó —tj¦«tjd¦«tj¦«tj¦«dS)z aggressive gc.collect for tests.gš™™™™™¹?r)ÚgcÚcollectÚtimeÚsleep©Úargss úk/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib64/python3.11/site-packages/sqlalchemy/testing/util.pyÚjython_gc_collectrs5€å Œ ‰ Œ ˆ Ý Œ �3‰ŒˆÝ Œ ‰ Œ ˆ Ý Œ ‰ Œ ˆ ؈qócóR—tj¦«tj¦«dS©N)r r rs rÚpypy_gc_collectr%s€Ý Œ ‰ Œ ˆ Ý Œ ‰ Œ ˆ ˆ ˆ rcó—dSr©rrrÚlazy_gcr.s€Ø ˆrc#ó‡‡K—t¦«}tr+ ddl}| |¦«n#t$rYnwxYwddl}| |¦«|D])Št d|j¦«D]Љjˆˆfd„fV—ŒŒ*dS)Nréþÿÿÿcó0•—‰ |‰¦«Sr)Údumps)ÚdÚpickle_Úprotocols €€rúzpicklers..Csø€¨7¯=ª=¸¸HÑ+EÔ+E€r) Úsetr ÚcPickleÚaddÚ ImportErrorÚpickleÚrangeÚHIGHEST_PROTOCOLÚloads)Úpicklersr$r'r r!s @@rr+r+2sßøøèè€Ý‰uŒu€HÝ ðð Ø ˆNˆNˆNà �LŠL˜Ñ !Ô !Ð !Ð !øÝð ð ð Ø ˆDð øøøð€M€M€Mà ‡L‚L�ÑÔÐððFðFˆÝ˜b &Ô"9Ñ:Ô:ð Fð FˆHØ”-Ð!EÐ!EÐ!EÐ!EÐ!EÐEÐ EÐ EÐ EÐ Eð FðFðFs›5µ AÁAcóâ—t|t¦«rt||¦«S|tjdd|zz¦«z tj¦«td|¦«z S)NÚ1Ú0é )Ú isinstanceÚfloatÚroundÚdecimalÚDecimalÚ to_integralÚ ROUND_FLOORÚpow)ÚvalueÚprecs rÚ round_decimalr:Fsl€Ý�%�ÑÔð"Ý�U˜DÑ!Ô!Ð!ð •G”O C¨#°©*Ñ$4Ñ5Ô5Ñ 5× BÒ BÝÔñ ô å ˆB�‰ Œ ñ ðrcó2—eZdZd„Zd„Zd„Zd„Zd„Zd„ZdS)Ú RandomSetcó–—tt |¦«¦«}tj|¦«t |¦«Sr)Úlistr#Ú__iter__ÚrandomÚshuffleÚiter)ÚselfÚls rr?zRandomSet.__iter__Qs6€Ý •—’˜dÑ#Ô#Ñ $Ô $ˆÝŒ�qÑÔÐÝ�A‰wŒwˆrcóÔ—tjdt|¦«dz ¦«}tt |¦«¦«|}| |¦«|S)Nré)r@ÚrandintÚlenr>r#r?Úremove)rCÚindexÚitems rÚpopz RandomSet.popVsR€Ý”˜q¥# d¡)¤)¨a¡-Ñ0Ô0ˆÝ•C—L’L Ñ&Ô&Ñ'Ô'¨Ô.ˆØ � Š �DÑÔÐØˆ rcóR—tt ||¦«¦«Sr)r<r#Úunion©rCÚothers rrNzRandomSet.union\s€Ý�Ÿš 4¨Ñ/Ô/Ñ0Ô0Ð0rcóR—tt ||¦«¦«Sr)r<r#Ú differencerOs rrRzRandomSet.difference_s€Ý�Ÿš¨¨eÑ4Ô4Ñ5Ô5Ð5rcóR—tt ||¦«¦«Sr)r<r#Ú intersectionrOs rrTzRandomSet.intersectionbs €Ý�×)Ò)¨$°Ñ6Ô6Ñ7Ô7Ð7rcó —t|¦«Sr)r<)rCs rÚcopyzRandomSet.copyes€Ý˜‰ŒÐrN) Ú__name__Ú __module__Ú __qualname__r?rLrNrRrTrVrrrr<r<Psn€€€€€ðððð ððð 1ð1ð1ð6ð6ð6ð8ð8ð8ðððððrr<cóÔ—tt¦«}|D] \}}|| |¦«Œ!t|¦«D] \}}||d…D]}|||vrdSŒŒ!dS)zATrue if the given sorting conforms to the given partial ordering.NFT)rr#r%Ú enumerate)ÚtuplesÚsorted_elementsÚdepsÚparentÚchildÚiÚnodeÚns rÚconforms_partial_orderingrdis™€õ •sÑ Ô €DØð ð ‰ ˆ�Ø ˆVŒ ×Ò˜ÑÔÐÐݘ_Ñ-Ô-ðð‰ˆˆ4Ø    Ô$ð ð ˆAØ�t˜A”wˆˆØ�u�u�uðð ðˆtrc󰇇—tt¦«Š|D] \}}‰| |¦«Œ!ˆˆfd„Št‰|¦«¦«S)Nc3ó •K—t|¦«dkrt|¦«V—dS|D]V}t|¦« |g¦«}| ‰|¦«s‰|¦«D] }|g|zV—Œ ŒWdS)NrF)rHr>r#rRrT)ÚelementsÚelemÚsubsetÚ sub_orderingÚ_all_orderingsÚedgess €€rrkz-all_partial_orderings.._all_orderings|s®øèè€å ˆx‰=Œ=˜AÒ Ð Ý�x‘.”.Ð Ð Ð Ð Ð à ð 4ð 4�ݘX™œ×1Ò1°4°&Ñ9Ô9�Ø×*Ò*¨5°¬;Ñ7Ô7ð4Ø(6¨°vÑ(>Ô(>ð4ð4˜ Ø#˜f |Ñ3Ð3Ð3Ð3Ð3øð  4ð 4r)rr#r%rB)r\rgr_r`rkrls @@rÚall_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Ú TypeErrorÚtypesÚ FunctionTypeÚ__code__Ú __globals__Ú __defaults__Ú __closure__)ÚfnÚnames rÚfunction_namedrxŠs[€ð ؈Œ ˆ øÝ ð ð ð Ý Ô Ø ŒK˜œ¨¨r¬ÀÄñ ô ˆˆˆð øøøð €Is‚ Š6AÁAcóÈ—| ¦«} ||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__ÚsysÚexc_info)ÚctxrvÚargÚkwÚobjÚresultr}Úraise_s rÚrun_as_contextmanagerr„žs†€ð �-Š-‰/Œ/€Cð Ø��CÐ$˜#Ð$Ð$Ð$ Ð$Ð$ˆØ � Š �T˜4 Ñ&Ô&Ð&؈ øðÝ”<‘>”>ˆØ�”˜xÐ(ˆØð Ø àˆMˆMˆMøøøs –$;»$A!có—d„|D¦«S)zŠConverts the results of sql execution into a plain set of column tuples. Useful for asserting the results of an unordered query. có,—h|]}t|¦«’ŒSr©Útuple)Ú.0Úrows rú zrowset..½s€Ð *Ð *Ð *˜3�E�#‰JŒJÐ *Ð *Ð *rr)Úresultss rÚrowsetr�·s€ð +Ð * 'Ð *Ñ *Ô *Ð*rcó—J|¦«‚rr)Úmsgs rÚfailr�Às€Ø�#ÑÔˆ5rcó>—ddlm}ddlm}ddlm}| |j¦«}|d}t|dd¦«}||_ ||i|¤Ž|  ||j¦«||_S#|  ||j¦«||_wxYw)z>Provide bound MetaData for a single test, dropping afterwards.rF©Úconfig)Úenginesr©ÚschemaÚmetadataN) Úr“r”Ú sqlalchemyr–ÚMetaDataÚdbÚgetattrr—Údrop_all_tables) rvrr€r“r”r–r—rCÚ prev_metas rÚprovide_metadatarŸÄsÑ€ðÐÐÐÐÐØÐÐÐÐÐØ!Ð!Ð!Ð!Ð!Ð!à�Š˜vœyÑ)Ô)€HØ �Œ7€Dݘ˜j¨$Ñ/Ô/€IØ€D„Mð"؈r�4ˆ˜2ˆˆà×Ò ¨&¬)Ñ4Ô4Ð4Ø!ˆŒ ˆ øð ×Ò ¨&¬)Ñ4Ô4Ð4Ø!ˆŒ Ð!Ð!Ð!Ð!s ÁA8Á8$Bcóþ‡—ddlm}t¦«Š|D]}‰ |¦«Œt ‰¦«Š|jˆfd„|D¦«ddt ‰¦«zzd ‰¦«dœŽS)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' ) rFr’c󎕇—g|]@Šd ˆfd„‰D¦«¦«ftˆfd„‰D¦«¦«z‘ŒAS)Ú_c3óH•K—|]}‰ |d¦«¯|V—ŒdS©FN©Úget©r‰Úkrs €rú z/flag_combinations...s4øèè€Ð9Ð9˜A¨¯ª¨q°%©¬Ð9�aÐ9Ð9Ð9Ð9Ð9Ð9rc3óD•K—|]}‰ |d¦«V—ŒdSr¤r¥r§s €rr©z/flag_combinations...s/øèè€Ð2Ð2¨�A—E’E˜!˜U‘O”OÐ2Ð2Ð2Ð2Ð2Ð2r)Újoinrˆ)r‰rÚkeyss @€rú z%flag_combinations..ÿsuøø€ð ð ð ðð�XŠXÐ9Ð9Ð9Ð9 Ð9Ñ9Ô9Ñ 9Ô 9Ð ;ÝÐ2Ð2Ð2Ð2¨TÐ2Ñ2Ô2Ñ2Ô2ñ 3ð ð ð rraÚaú,)Úid_Úargnames)r˜r“r#ÚupdateÚsortedÚ combinationsrHr«)r´r“rr¬s @rÚflag_combinationsrµ×s°ø€ð<ÐÐÐÐÐå ‰5Œ5€Dà ððˆØ � Š �A‰Œˆˆå �$‰<Œ<€Dà ˆ6Ô ð ð ð ð ð"ð ñ ô ð �3�˜T™œ‘?Ñ #Ø—’˜$‘”ð ð ð ðrc óà‡—t|¦«d}ˆfd„|D¦«}t|j¦«}| ‰¦«t j|j|¦«}|di|¤ŽS)zÝGiven a no-arg lambda and a namespace, return a new lambda that has all the values filled in. This is used so that we can have module-level fixtures that refer to instance-level variables using lambdas. rcó<•—i|]}|‰ |¦«“ŒSr)rL)r‰rr€s €rú z"resolve_lambda..s%ø€Ð:Ð:Ð:¨#�S˜"Ÿ&š& ™+œ+Ð:Ð:Ð:rr)rÚdictrsr²rprqrr)Ú__fnr€Úpos_argsÚ pass_pos_argsÚglbÚnew_fns ` rÚresolve_lambdar¿ syø€õ& dÑ+Ô+¨AÔ.€HØ:Ð:Ð:Ð:°Ð:Ñ:Ô:€MÝ ˆtÔÑ Ô €C؇J‚Jˆr�N„N€NÝ Ô  ¤ ¨sÑ 3Ô 3€FØ ˆ6Ð "Ð "�MÐ "Ð "Ð"rÚfunctioncó"‡‡—ddlmŠˆˆfd„}|S)z&Provide MetaData for a pytest fixture.rFr’cóP•‡—ˆˆfd„}‰ ‰¬¦«|¦«S)Nc3ó•K—ddlm}| ¦«x}|_ ‰||¦«}| ‰j¦«|V—| ‰j¦«dS#| ‰j¦«wxYw)Nrr•)r™r–ršr—Ú create_allr›Údrop_all)rCr–r—r‚r“rvs €€rÚrun_ddlz3metadata_fixture..decorate..run_ddl sžøèè€Ø )Ð )Ð )Ð )Ð )Ð )à'-§¢Ñ'8Ô'8Ð 8ˆH�t”}ð -ؘ˜D (Ñ+Ô+�Ø×#Ò# F¤IÑ.Ô.Ð.ð� � � à×!Ò! &¤)Ñ,Ô,Ð,Ð,Ð,ø�×!Ò! &¤)Ñ,Ô,Ð,Ð,øøøs ¦*A,Á,B)Úscope)Úfixture)rvrÆr“Úddls` €€rÚdecoratez"metadata_fixture..decoratesBøø€ð -ð -ð -ð -ð -ð -ð)ˆv�~Š~ Cˆ~Ñ(Ô(¨Ñ1Ô1Ð1r)r˜r“)rÉrÊr“s` @rÚmetadata_fixturerËs=øø€ðÐÐÐÐÐð2ð2ð2ð2ð2ð2ð €OrcóL‡‡‡—ddlmŠddlmŠtˆˆˆfd„¦«}|S)ziForce the given table names to be dropped after test complete, isolating for foreign key cycles rFr’r)Úinspectcó´•— ||i|¤Žt‰j‰‰j¦«‰¬¦«S#t‰j‰‰j¦«‰¬¦«wxYw)N)Ú include_names)r�r›)rvrr€r“rÍÚnamess €€€rÚgozforce_drop_names..go:sgø€ð PØ�2�t�?˜r�?�?å ˜FœI w w¨v¬yÑ'9Ô'9ÈÐ OÑ OÔ OÐ OÐ Oø�O˜FœI w w¨v¬yÑ'9Ô'9ÈÐ OÑ OÔ OÐ OÐ Oøøøs ƒ0°'A)r˜r“r™rÍr)rÐrÑr“rÍs` @@rÚforce_drop_namesrÒ2sføøø€ð ÐÐÐÐÐØ"Ð"Ð"Ð"Ð"Ð"åðPðPðPðPðPðPñ„YðPð €Ircó"—eZdZdZd„Zd„ZeZdS)Úadictz,Dict keys available as attributes. Shadows.cój— ||S#t$rt ||¦«cYSwxYwr)ÚKeyErrorr¹Ú__getattribute__)rCÚkeys rr×zadict.__getattribute__HsH€ð 4ؘ”9Ð øÝð 4ð 4ð 4Ý×(Ò(¨¨sÑ3Ô3Ð 3Ð 3Ð 3ð 4øøøs ‚ Š%2±2có:‡—tˆfd„|D¦«¦«S)Ncó •—g|] }‰|‘Œ Srr)r‰rØrCs €rr­z"adict.__call__..Osø€Ð0Ð0Ð0 C�d˜3”iÐ0Ð0Ð0rr‡)rCr¬s` rÚ__call__zadict.__call__Ns&ø€ÝÐ0Ð0Ð0Ð0¨4Ð0Ñ0Ô0Ñ1Ô1Ð1rN)rWrXrYÚ__doc__r×rÛÚget_allrrrrÔrÔEs9€€€€€Ø6Ð6ð4ð4ð4ð 2ð2ð2ð€G€G€GrrÔc óŽ—ddlm}m}m}m}m}ddlm} m} |�t|¦«}|  ¦«5} t|  |¬¦«¦«D]Ë\} } | r:|�| |vrŒ|   | || |¦«|¬¦«¦«¦«ŒA| rˆ|jjsŒP| D]x\} }|�| |vrŒ || |¦«|d|¦«|d|¦«|¬¦«}|   | ||jjg|jjg|¬¦«¦«¦«ŒyŒÌ ddd¦«dS#1swxYwYdS)Nr)ÚColumnÚTableÚIntegerršÚForeignKeyConstraint)Ú DropTableÚDropConstraintr•ÚxÚy)rw)r™rßràráršrâÚsqlalchemy.schemarãrär#ÚconnectÚreversedÚget_sorted_table_and_fkc_namesÚexecuteÚdialectÚsupports_alterÚcråræ)ÚengineÚ inspectorr–rÏrßràráršrârãräÚconnÚtnameÚfkcsÚfkcÚtbs rr�r�TsJ€ððððððððððððððð<Ð;Ð;Ð;Ð;Ð;Ð;Ð;àРݘMÑ*Ô*ˆ à �ŠÑ Ô ð˜TÝ#Ø × 4Ò 4¸FÐ 4Ñ CÔ Cñ ô ð ð ‰KˆE�4ðð Ø Ð,°¸mÐ1KÐ1KØØ— ’ Ø�I˜e˜e E¨8¨8©:¬:¸fÐEÑEÔEÑFÔFñôðððð Ø”~Ô4ðØØ"&ðð‘J�E˜3à%Ð1Ø!¨Ð6Ð6à Ø˜ØØ ˜™ œ ؘ˜s GÑ,Ô,ؘ˜s GÑ,Ô,Ø%ð ñô�Bð—L’LØ&˜Ø0Ð0°"´$´&°¸B¼D¼F¸8È#ÐNÑNÔNñôñôððøð3 ðððñôðððððððøøøððððððs¼C0D:Ä:D>ÅD>có,‡—tˆfd„¦«}|S)Ncóp•— ||i|¤Ž‰ ¦«S#‰ ¦«wxYwr)Ú_clear)rvrr€Ú event_clss €rrÊz!teardown_events..decorateƒsDø€ð Ø�2�s�>˜b�>�>à × Ò Ñ Ô Ð Ð øˆI× Ò Ñ Ô Ð Ð øøøsƒŸ5r)rùrÊs` rÚteardown_eventsrú‚s-ø€Ýððððñ„Yðð €Or)rÀ)NN)%r3r r@r|rrpÚutilrrrrr r rÚ gc_collectrrr r+r:r#r<rdrmrxr„r�r�rŸrµr¿rËrÒr¹rÔr�rúrrrúrýsgðð€€€Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € àÐÐÐÐÐØÐÐÐÐÐØ)Ð)Ð)Ð)Ð)Ð)ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐð ð ðððð-Ð,€J��Ø ð  ðððð+Ð*€J��ð”€Jð ð ð ðFðFðFð(ððððððð�ñôðð2 ð ð ð*ð*ð*ð&ððð(ððð2+ð+ð+ðððð ð"ð"ñ „ð"ð$/ð/ð/ðd#ð#ð#ð"ðððð0ððð& ð ð ð ð ˆDñ ô ð ð+ð+ð+ð+ð\ððððr