§ w<ˆjÄãóÄ—ddlZddlZddlmZddlmZddlmZddlm Z ej e ¦«Z dZ Gd„d e¦«Zd „Zd „Zd „Zd „Zejd„¦«Zejd„¦«Zejd„¦«Zejd„¦«Zejd„¦«Zejd„¦«Zejd„¦«Zd„Zejd„¦«Zejd„¦«ZdS)éNé)Úconfig)Úenginesé)Úurl)Úcompatcó6—eZdZd„Zed„¦«Zd„Zd„ZdS)Úregistercó—i|_dS©N©Úfns)Úselfs úp/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib64/python3.11/site-packages/sqlalchemy/testing/provision.pyÚ__init__zregister.__init__s €ØˆŒˆˆócóV—t¦« d¦«|¦«S©NÚ*)r Úfor_db)ÚclsÚfns rÚinitz register.inits$€à%�x‰zŒz× Ò  Ñ%Ô% bÑ)Ô)Ð)rc󇇗ˆˆfd„}|S)Ncó•—|‰j‰<‰Sr r )rÚdbnamers €€rÚdecoratez!register.for_db..decoratesø€Ø!ˆDŒH�VÑ ØˆKr©)rrrs`` rrzregister.for_dbs)øø€ð ð ð ð ð ð ðˆrcó<—t|tj¦«rtj|¦«}n)t|tj¦«r|}n |jj}| ¦«}||j vr|j ||g|¢RŽS|j d|g|¢RŽSr) Ú isinstancerÚ string_typesÚsa_urlÚmake_urlÚURLÚdbrÚget_backend_namer)rÚcfgÚargrÚbackends rÚ__call__zregister.__call__s§€Ý �c�6Ô.Ñ /Ô /ð Ý”/ #Ñ&Ô&ˆCˆCÝ ˜�VœZÑ (Ô (ð ØˆCˆCà”&”*ˆCØ×&Ò&Ñ(Ô(ˆØ �d”hÐ Ð Ø$�4”8˜GÔ$ SÐ/¨3Ð/Ð/Ð/Ð /à �4”8˜C”= Ð+ sÐ+Ð+Ð+Ð +rN)Ú__name__Ú __module__Ú __qualname__rÚ classmethodrrr*rrrr r s\€€€€€ððððð*ð*ñ„[ð*ðððð ,ð ,ð ,ð ,ð ,rr có —t¦«D]>}t d||jj¦«t ||j|¦«Œ?dS)NzCREATE database %s, URI %r)Ú_configs_for_db_operationÚlogÚinfor%rÚ create_db©Úfollower_identr's rÚcreate_follower_dbr6+sS€Ý(Ñ*Ô*ð/ð/ˆÝ �ŠÐ-¨~¸s¼v¼zÑJÔJÐJÝ�#�s”v˜~Ñ.Ô.Ð.Ð.ð/ð/rcó—tj|¦« ¦«}| ¦«|rt ||¦«}i}t ||¦«t j||¦«}t|||¦«|  ¦«  ¦«tj   ||||¦«}|rt||¦«|Sr )r"r#Ú get_dialectÚload_provisioningÚfollower_url_from_mainÚupdate_db_optsrÚtesting_engineÚpost_configure_engineÚconnectÚcloserÚConfigr Úconfigure_follower)Údb_urlÚoptionsÚ file_configr5ÚdialectÚdb_optsÚengr's rÚ setup_configrH1sÔ€õŒo˜fÑ%Ô%×1Ò1Ñ3Ô3€GØ ×ÒÑÔÐàð@Ý'¨°Ñ?Ô?ˆØ€GÝ�6˜7Ñ#Ô#Ð#Ý Ô  ¨Ñ 1Ô 1€Cݘ& # ~Ñ6Ô6Ð6؇K‚K�M„M×ÒÑÔÐå Œ-× Ò   g¨w¸ Ñ DÔ D€CØð0ݘ3 Ñ/Ô/Ð/Ø €Jrcó —t¦«D]>}t d||jj¦«t ||j|¦«Œ?dS)NzDROP database %s, URI %r)r0r1r2r%rÚdrop_dbr4s rÚdrop_follower_dbrKFsS€Ý(Ñ*Ô*ð-ð-ˆÝ �ŠÐ+¨^¸S¼V¼ZÑHÔHÐHÝ��S”V˜^Ñ,Ô,Ð,Ð,ð-ð-rc#óôK—t¦«}tj ¦«D]}|j ¦«Œtj ¦«D]T}|jj}| ¦«}||j|j |j f}||vr|V—|  |¦«ŒUtj ¦«D]}|j ¦«ŒdSr ) Úsetrr@Ú all_configsr%Údisposerr&ÚusernameÚhostÚdatabaseÚadd)Úhostsr'rr)Ú host_confs rr0r0Lsïèè€Ý ‰EŒE€EåŒ}×(Ò(Ñ*Ô*ððˆØ Œ�ŠÑÔÐÐåŒ}×(Ò(Ñ*Ô*ð!ð!ˆØŒfŒjˆØ×&Ò&Ñ(Ô(ˆØ˜cœl¨C¬H°c´lÐCˆ à ˜EÐ !Ð !؈IˆIˆIØ �IŠI�iÑ Ô Ð øåŒ}×(Ò(Ñ*Ô*ððˆØ Œ�ŠÑÔÐÐððrcó0—td|jz¦«‚)z—Dynamically create a database for testing. Used when a test run will employ multiple processes, e.g., when run via `tox` or `pytest -n4`. z"no DB creation routine for cfg: %s©ÚNotImplementedErrorr©r'rGÚidents rr3r3_s€õ ÐBÀSÄWÑLÑ MÔ MÐMrcó0—td|jz¦«‚)z8Drop a database that we dynamically created for testing.zno DB drop routine for cfg: %srWrYs rrJrJis€õ Ð>ÀÄÑHÑ IÔ IÐIrcó—dS)zCSet database options (db_opts) for a test database that we created.Nr)rBrFs rr;r;oó €ð €Drcó—dS)z‚Perform extra steps after configuring an engine for testing. (For the internal dialects, currently only used by sqlite.) Nr)rÚenginer5s rr=r=us €ð  €Drcó<—tj|¦«}||_|S)zúCreate a connection URL for a dynamically-created test database. :param url: the connection URL specified when the test run was invoked :param ident: the pytest-xdist "worker identifier" to be used as the database name )r"r#rR©rrZs rr:r:~s€õ Œ/˜#Ñ Ô €CØ€C„LØ €Jrcó—dS)z@Create dialect-specific config settings for a follower database.Nr)r'rZs rrArA‹r]rcó—dS)a[Remove databases that were created during the test process, after the process has ended. This is an optional step that is invoked for certain backends that do not reliably release locks on the database as long as a process is still in use. For the internal dialects, this is currently only necessary for mssql and oracle. Nrras rÚ run_reap_dbsrd‘s €ð €Drcóø—t d¦«tjt¦«}tjt¦«}i}t |¦«5}|D]È}| ¦«}| d¦«\}}tj |¦«}||vr1|  ¦«||<||  ¦«|  ¦«|j f} ||  |¦«||  |¦«ŒÉ ddd¦«n #1swxYwY|D]5} t|| ¦«d} || } t!| | ¦«Œ6dS)NzReaping databases...ú r)r1r2Ú collectionsÚ defaultdictrMÚopenÚstripÚsplitr"r#r8r9r&rQrSÚlistrd) Ú idents_fileÚurlsÚidentsÚdialectsÚfile_ÚlineÚdb_namerBÚurl_objÚurl_keyrrZs rÚreap_dbsrvžs­€Ý‡H‚HÐ #Ñ$Ô$Ð$å Ô "¥3Ñ 'Ô '€DÝ Ô $¥SÑ )Ô )€FØ€Hå ˆkÑ Ô ð )˜eØð )ð )ˆDØ—:’:‘<”<ˆDØ"Ÿjšj¨™oœo‰OˆG�VÝ”o fÑ-Ô-ˆGؘhÐ&Ð&Ø$+×$7Ò$7Ñ$9Ô$9�˜Ñ!ؘÔ!×3Ò3Ñ5Ô5Ð5Ø×/Ò/Ñ1Ô1°7´<Ð@ˆGØ �ŒM× Ò ˜fÑ %Ô %Ð %Ø �7ŒO× Ò  Ñ (Ô (Ð (Ð (ð )ð )ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ðð!ð!ˆÝ�4˜”=Ñ!Ô! !Ô$ˆØ�w”ˆÝ�S˜%Ñ Ô Ð Ð ð!ð!sÁC D7Ä7D;Ä>D;có0—td|jz¦«‚)aOSpecify keyword arguments for creating a temporary Table. Dialect-specific implementations of this method will return the kwargs that are passed to the Table method when creating a temporary table for testing, e.g., in the define_temp_tables method of the ComponentReflectionTest class in suite/test_reflection.py z.no temp table keyword args routine for cfg: %srW)r'rGs rÚtemp_table_keyword_argsrx·s €õ Ø8¸3¼7ÑBñ ô ðrcó—dSr r)rr%Útestclss rÚstop_test_classr{Ås€à€Dr)rgÚloggingÚrrr_rr"ÚutilrÚ getLoggerr+r1ÚFOLLOWER_IDENTÚobjectr r6rHrKr0rr3rJr;r=r:rArdrvrxr{rrrúr‚sðØÐÐÐØ€€€àÐÐÐÐÐØÐÐÐÐÐØ"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐà€gÔ˜Ñ!Ô!€à€ð,ð,ð,ð,ð,ˆvñ,ô,ð,ð:/ð/ð/ð ððð*-ð-ð-ð ððð& „ðNðNñ„ðNð „ðJðJñ„ðJð  „ð ð ñ„ð ð  „ð ð ñ„ð ð „ð ð ñ„ð ð „ð ð ñ„ð ð  „ð  ð  ñ„ð  ð!ð!ð!ð2 „ð ð ñ„ð ð „ð ð ñ„ð ð ð r