§
    
 @gET  ã                  óè  — U d dl mZ d dlZd dlmZ d dlZd dlad dlZd dlm	Z	 d dl
Z
d dlZd dlmZ d dlmZ 	 dZt          j        d¦  «        ZdadadadadadadadZdadadadada e¦   «         Z  e¦   «         Z!da"d	e#d
<   d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1d„ Z2g Z3g Z4d„ Z5d„ Z6e5d„ ¦   «         Z7e5d„ ¦   «         Z8e6d„ ¦   «         Z9e6d„ ¦   «         Z:e5d „ ¦   «         Z;e6d!„ ¦   «         Z<e6d"„ ¦   «         Z=d#„ Z>e6d$„ ¦   «         Z?e6d%„ ¦   «         Z@e6d&„ ¦   «         ZAd'„ ZBd(„ ZCd)„ ZDd*„ ZEd+„ ZFd,„ ZGd-„ ZHd.„ ZId/„ ZJd0„ ZKd1„ ZLd2„ ZMd9d3„ZNd4„ ZOd5„ ZP G d6„ d7ejQ        ¦  «        ZRdaSd8„ ZTdS ):é    )ÚannotationsN)Ú	Namespace)ÚPath)ÚAny)ÚasyncioFzsqlalchemy.testing.plugin_baser   Úoptionsc                ó8  —  | ddt           t          d¬¦  «          | ddt           t          d¬¦  «          | ddt           d	d
¬¦  «          | ddt          d¬¦  «          | ddt           dd¬¦  «          | ddt           dd¬¦  «          | dddd¬¦  «          | ddd¬¦  «          | ddt          d¦  «        d¬¦  «          | d dt	          d!¦  «        d"¬¦  «          | d#dt	          d$¦  «        d%¬¦  «          | d&dt	          d'¦  «        d(¬¦  «          | d)t           d*d+d,¬-¦  «          | d.t           d/d0¬1¦  «          | d2dd3d4¬¦  «          | d5t           d6d7¬1¦  «          | d8dt           t
          d9¬¦  «          | d:dt          t           d;¬<¦  «          | d=dt          t           d>¬<¦  «          | d?dd@dAdB¬C¦  «          | dDddEdAdF¬C¦  «          | dGt           dHdI¬1¦  «          | dJt           dg dKdL¬M¦  «          | dNt           dO¬P¦  «          | dQddR¬¦  «         d S )SNz
--log-infoÚcallbackz,turn on info logging for <LOG> (multiple OK))ÚactionÚtyper
   Úhelpz--log-debugz-turn on debug logging for <LOG> (multiple OK)z--dbÚappendÚdbzBUse prefab database uri. Multiple OK, first one is run by default.)r   r   Údestr   z--dbszList available prefab dbs)r   Úzeroarg_callbackr   z--dburiÚdburiz8Database uri.  Multiple OK, first one is run by default.z
--dbdriverÚdbdriverz|Additional database drivers to include in tests.  These are linked to the existing database URLs by the provisioning system.z--dropfirstÚ
store_trueÚ	dropfirstz,Drop all tables in the target database first)r   r   r   z--disable-asyncioz8disable test / fixtures / provisoning running in asyncio)r   r   z--backend-onlyÚbackendz}Run only tests marked with __backend__ or __sparse_backend__; this is now equivalent to the pytest -m backend mark expressionz
--nomemoryÚmemory_intensivezpDon't run memory profiling tests; this is now equivalent to the pytest -m 'not memory_intensive' mark expressionz--notimingintensiveÚtiming_intensivezpDon't run timing intensive tests; this is now equivalent to the pytest -m 'not timing_intensive' mark expressionz--nomypyÚmypyz_Don't run mypy typing tests; this is now equivalent to the pytest -m 'not mypy' mark expressionz--profile-sortÚ
cumulativeÚprofilesortz*Type of sort for profiling standard output)r   Údefaultr   r   z--profile-dumpÚprofiledumpz2Filename where a single profile run will be dumped)r   r   r   z--low-connectionsÚlow_connectionsz>Use a low number of distinct connections - i.e. for Oracle TNSz--write-identsÚwrite_identszCwrite out generated follower idents to <file>, when -n<num> is usedz--requirementsz3requirements class for testing, overrides setup.cfgz--include-tagzAInclude tests with tag <tag>; legacy, use pytest -m 'tag' instead)r   r
   r   r   z--exclude-tagzEExclude tests with tag <tag>; legacy, use pytest -m 'not tag' insteadz--write-profilesÚwrite_profilesFz$Write/update failing profiling data.)r   r   r   r   z--force-write-profilesÚforce_write_profilesz,Unconditionally write/update profiling data.z--dump-pyannotateÚdump_pyannotatez/Run pyannotate and dump json info to given filez--mypy-extra-test-pathÚmypy_extra_test_pathszlAdditional test directories to add to the mypy tests. This is used only when running mypy tests. Multiple OK)r   r   r   r   r   z--postgresql-templatedbz^name of template database to use for PostgreSQL CREATE DATABASE (defaults to current database))r   r   z--oracledb-thick-modez:enables the 'thick mode' when testing with oracle+oracledb)ÚstrÚ_logÚ	_list_dbsÚ_set_tag_includeÚ_set_tag_excludeÚ_requirements_optÚ_include_tagÚ_exclude_tag)Úmake_options    úY/var/www/piapp/venv/lib/python3.11/site-packages/sqlalchemy/testing/plugin/plugin_base.pyÚsetup_optionsr.   ;   s4  € Ø€KØØÝÝØ;ðñ ô ð ð €KØØÝÝØ<ðñ ô ð ð €KØØÝØð'ðñ ô ð ð €KØØÝ"Ø(ð	ñ ô ð ð €KØØÝØØJðñ ô ð ð €KØØÝØððñ ô ð ð €KØØØØ;ð	ñ ô ð ð €KØØØGðñ ô ð ð
 €KØØÝ)¨)Ñ4Ô4ðNðñ ô ð ð €KØØÝ)Ð*<Ñ=Ô=ðð	ñ ô ð ð €KØØÝ)Ð*<Ñ=Ô=ðð	ñ ô ð ð €KØØÝ)¨&Ñ1Ô1ðMð	ñ ô ð ð €KØÝØØØ9ðñ ô ð ð €KØÝØØAð	ñ ô ð ð €KØØØðð	ñ ô ð ð €KØÝØðð	ñ ô ð ð €KØØÝÝ"ØBðñ ô ð ð €KØØÝÝð.ðñ ô ð ð €KØØÝÝð2ðñ ô ð ð €KØØØØØ3ðñ ô ð ð €KØ ØØ#ØØ;ðñ ô ð ð €KØÝØØ>ð	ñ ô ð ð €KØ ÝØØØ$ðAðñ ô ð ð €KØ!Ýð9ðñ ô ð ð €KØØØIðñ ô ð ð ð ó    c                ó    — ddl m} | |_        dS )z„Configure required state for a follower.

    This invokes in the parent process and typically includes
    database creation.

    r   ©Ú	provisionN)Úsqlalchemy.testingr2   ÚFOLLOWER_IDENT)Úfollower_identr2   s     r-   Úconfigure_followerr6   ð   s$   € ð -Ð,Ð,Ð,Ð,Ð,à-€IÔÐÐr/   c                ó   — dS )z¯Store important configuration we will need to send to a follower.

    This invokes in the parent process after normal config is set up.

    Hook is currently not used.

    N© ©Údict_s    r-   Ú!memoize_important_follower_configr;   ü   ó   € € € r/   c                ó   — dS )z‡Restore important configuration needed by a follower.

    This invokes in the follower process.

    Hook is currently not used.

    Nr8   r9   s    r-   Ú!restore_important_follower_configr>     r<   r/   c                ó¤   — t          j        ¦   «         at                               t	          | dz  ¦  «        t	          | dz  ¦  «        g¦  «         d S )Nz	setup.cfgztest.cfg)ÚconfigparserÚConfigParserÚfile_configÚreadr$   )Ú	root_paths    r-   Úread_configrE     sT   € åÔ+Ñ-Ô-€KÝ×ÒÝ	ˆY˜Ñ$Ñ	%Ô	%¥s¨9°zÑ+AÑ'BÔ'BÐCñô ð ð ð r/   c                óJ   — | a t          D ]} |t           t          ¦  «         ŒdS )z7things to set up early, before coverage might be setup.N)r   Úpre_configurerB   )ÚoptÚfns     r-   Ú	pre_beginrJ     s7   € ð €GÝð !ð !ˆØ
ˆ�7•KÑ Ô Ð Ð ð!ð !r/   c                ó   — | t           _        d S ©N)r   Úhas_coverage)Úvalues    r-   Úset_coverage_flagrO      s   € Ø …GÔÐÐr/   c                 óÈ   — t           D ]}  | t          t          ¦  «         Œddlma ddlmamama ddlm	a	m
a
ma ddlmama ddlma t                               ¦   «          dS )z9things to set up later, once we know coverage is running.r   ©Útesting)ÚfixturesÚenginesÚ
exclusions)Ú
assertionsÚwarningsÚ	profiling)Úconfigr2   )ÚutilN)Úpost_configurer   rB   Ú
sqlalchemyrR   r3   rS   rT   rU   rV   rW   rX   rY   r2   rZ   Úsetup_filters©rI   s    r-   Ú
post_beginr_   $  sº   € õ ð !ð !ˆØ
ˆ�7•KÑ Ô Ð Ð ð
 #Ð"Ð"Ð"Ð"Ð"Ø@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ØBÐBÐBÐBÐBÐBÐBÐBÐBÐBØ4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÐÐÐÐÐå×ÒÑÔÐÐÐr/   c                ób  — t           sdd l a t          j        ¦   «          |                      d¦  «        r3t          j        |¦  «                             t           j        ¦  «         d S |                      d¦  «        r3t          j        |¦  «                             t           j        ¦  «         d S d S )Nr   z-infoz-debug)ÚloggingÚbasicConfigÚendswithÚ	getLoggerÚsetLevelÚINFOÚDEBUG©Úopt_strrN   Úparsers      r-   r%   r%   6  s¦   € åð ØˆˆˆåÔÑÔÐà×Ò˜Ñ Ô ð 9ÝÔ˜%Ñ Ô ×)Ò)­'¬,Ñ7Ô7Ð7Ð7Ð7Ø	×	Ò	˜(Ñ	#Ô	#ð 9ÝÔ˜%Ñ Ô ×)Ò)­'¬-Ñ8Ô8Ð8Ð8Ð8ð9ð 9r/   c            	     óJ  — t           € t          t          j        ¦   «         ¦  «         t	          d¦  «         t          t                                d¦  «        ¦  «        D ]0}t	          |d›dt                                d|¦  «        ›�¦  «         Œ1t          j	        d¦  «         d S )Nz0Available --db options (use --dburi to override)r   z>20ú	r   )
rB   rE   r   ÚcwdÚprintÚsortedr   ÚgetÚsysÚexit)ÚargsÚmacros     r-   r&   r&   C  s’   € ÝÐõ 	•D”H‘J”JÑÔÐÝ	Ð
<Ñ=Ô=Ð=Ý�×+Ò+¨DÑ1Ô1Ñ2Ô2ð Bð BˆÝ˜E˜E˜E˜E¥;§?¢?°4¸Ñ#?Ô#?Ð#?Ð@ÑAÔAÐAÐAÝ„HˆQ�K„K€K€K€Kr/   c                ó$   — t          |¦  «         d S rL   )Ú_setup_requirementsrh   s      r-   r)   r)   N  s   € Ý˜ÑÔÐÐÐr/   c                ó   ‡ — ˆ fd„}|S )Nc                ó*   •— t          | ‰|¦  «         d S rL   )r*   ©ri   rN   rj   Útags      €r-   Ú_do_include_tagz)_set_tag_include.<locals>._do_include_tagS  ó   ø€ Ý�W˜c 6Ñ*Ô*Ð*Ð*Ð*r/   r8   )rz   r{   s   ` r-   r'   r'   R  ó$   ø€ ð+ð +ð +ð +ð +ð Ðr/   c                ó   ‡ — ˆ fd„}|S )Nc                ó*   •— t          | ‰|¦  «         d S rL   )r+   ry   s      €r-   Ú_do_exclude_tagz)_set_tag_exclude.<locals>._do_exclude_tagZ  r|   r/   r8   )rz   r€   s   ` r-   r(   r(   Y  r}   r/   c                ób   — t                                |                     dd¦  «        ¦  «         d S ©Nú-Ú_)Úexclude_tagsÚaddÚreplacerh   s      r-   r+   r+   `  ó*   € Ý×Ò�U—]’] 3¨Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-r/   c                ób   — t                                |                     dd¦  «        ¦  «         d S r‚   )Úinclude_tagsr†   r‡   rh   s      r-   r*   r*   d  rˆ   r/   c                ó:   — t                                | ¦  «         | S rL   )rG   r   r^   s    r-   ÚprerŒ   l  s   € Ý×Ò˜ÑÔÐØ€Ir/   c                ó:   — t                                | ¦  «         | S rL   )r[   r   r^   s    r-   ÚpostrŽ   q  s   € Ý×Ò˜"ÑÔÐØ€Ir/   c                ó
   — | a d S rL   ©r   ©rH   rB   s     r-   Ú_setup_optionsr’   v  s   € ð €G€G€Gr/   c                ón   — ddl m} |                     ddd¦  «         |                     ddd¦  «         d S )Nr   )Úregistryzsqlite.pysqlite_numericz#sqlalchemy.dialects.sqlite.pysqliteÚ_SQLiteDialect_pysqlite_numericzsqlite.pysqlite_dollarÚ_SQLiteDialect_pysqlite_dollar)Úsqlalchemy.dialectsr”   Úregister)rH   rB   r”   s      r-   Ú _register_sqlite_numeric_dialectr™   |  sb   € à,Ð,Ð,Ð,Ð,Ð,à×ÒØ!Ø-Ø)ñô ð ð
 ×ÒØ Ø-Ø(ñô ð ð ð r/   c                ó¼   — t           j                             dd¦  «        dk    r7ddlm} 	  |d¬¦  «         d S # t
          $ r}t          d¦  «        |‚d }~ww xY wd S )	NÚREQUIRE_SQLALCHEMY_CEXTÚ0Ú1r   )Úhas_compiled_extT)Úraise_zEREQUIRE_SQLALCHEMY_CEXT is set but can't import the cython extensions)ÚosÚenvironrp   Úsqlalchemy.utilrž   ÚImportErrorÚAssertionError)rH   rB   rž   Úerrs       r-   Ú__ensure_cextr¦   Œ  s’   € å	„z‡~‚~Ð/°Ñ5Ô5¸Ò<Ð<Ø4Ð4Ð4Ð4Ð4Ð4ð	ØÐ DÐ)Ñ)Ô)Ð)Ð)Ð)øÝð 	ð 	ð 	Ý ð$ñô ð ðøøøøð	øøøð =Ð<s   ¬: º
AÁAÁAc                ó8   — ddl m} t          ¦   «         |_        d S ©Nr   ©rY   )r3   rY   Ú_fixture_fn_classÚ_fixture_functions)r   rB   rY   s      r-   Ú_init_symbolsr¬   š  s(   € à)Ð)Ð)Ð)Ð)Ð)å 1Ñ 3Ô 3€FÔÐÐr/   c                ó0   — | j         rdt          _        d S d S ©NF)Údisable_asyncior   ÚENABLE_ASYNCIOr‘   s     r-   Ú_set_disable_asyncior±   ¡  s%   € à
Ôð 'Ø!&�ÔÐÐð'ð 'r/   c           	     óÚ  ‡— ddl m} ddlm} ddlm} ddlmŠ | j        rt          | j        ¦  «        }ng }| j	        pg }| j
        rt| j
        D ]l}t          j        d|¦  «        D ]T}||                     d¦  «        vrt          d|z  ¦  «        ‚|                     |                     d|¦  «        ¦  «         ŒUŒm|s)|                     |                     dd	¦  «        ¦  «         d |_        | j        ry|j        rrˆfd
„|D ¦   «         D ]c}	t)          | j        d¦  «        5 }
|
                     |j        › d|	                     d¬¦  «        › d�¦  «         d d d ¦  «         n# 1 swxY w Y   Œdt          |                     ||¦  «        ¦  «        }|D ]W}	t0                               d|	¦  «         |                     |	| ||j        ¦  «        }|j        s|                     ||¦  «         ŒXd S )Nr   rQ   r©   r1   )Úurlz[,\s]+r   z:Unknown URI specifier '%s'.  Specify --dbs for known uris.r   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r8   )Úmake_url)Ú.0Údb_urlÚsa_urls     €r-   ú
<listcomp>z_engine_uri.<locals>.<listcomp>Æ  s%   ø€ ÐEÐEÐE°6�v—’ vÑ.Ô.ÐEÐEÐEr/   Úaú F)Úhide_passwordú
zAdding database URL: %s)r\   rR   r3   rY   r2   Úsqlalchemy.enginer³   r   Úlistr   r   ÚreÚsplitr   ÚRuntimeErrorr   rp   Ú_currentr   r4   ÚopenÚwriteÚrender_as_stringÚgenerate_db_urlsÚlogÚinfoÚsetup_configÚset_as_current)r   rB   rR   rY   r2   Údb_urlsÚextra_driversÚdb_tokenr   r·   Úfile_Úexpanded_urlsÚcfgr¸   s                @r-   Ú_engine_urirÒ   §  s¾  ø€ à"Ð"Ð"Ð"Ð"Ð"Ø)Ð)Ð)Ð)Ð)Ð)Ø,Ð,Ð,Ð,Ð,Ð,Ø/Ð/Ð/Ð/Ð/Ð/à„}ð Ý�w”}Ñ%Ô%ˆˆàˆàÔ$Ð*¨€Mà„zð 	>Øœ
ð 	>ð 	>ˆHÝ”h˜y¨(Ñ3Ô3ð >ð >�Ø˜[×0Ò0°Ñ6Ô6Ð6Ð6Ý&ð8Ø:<ñ=ñô ð ð
 —N’N ;§?¢?°4¸Ñ#<Ô#<Ñ=Ô=Ð=Ð=ð>ð ð 9Ø�Š�{—’ t¨YÑ7Ô7Ñ8Ô8Ð8à€F„OàÔð  	Ô 8ð ØEÐEÐEÐE¸WÐEÑEÔEð 	ð 	ˆFÝ�gÔ*¨CÑ0Ô0ð °EØ—’Ø Ô/ð Hð HØ×.Ò.¸UÐ.ÑCÔCðHð Hð Hñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øõ ˜×3Ò3°G¸]ÑKÔKÑLÔL€Màð -ð -ˆÝ�ŠÐ*¨FÑ3Ô3Ð3à×$Ò$Ø�G˜[¨)Ô*Bñ
ô 
ˆð Œð 	-Ø×Ò˜s GÑ,Ô,Ð,øð-ð -s   Ä!5E"Å"E&	Å)E&	c                óP   — |                      dd¦  «        }t          |¦  «         d S )NÚsqla_testingÚrequirement_cls)rp   rv   )r   rB   rÕ   s      r-   Ú_requirementsrÖ   Ù  s*   € à!—o’o nÐ6GÑHÔH€OÝ˜Ñ(Ô(Ð(Ð(Ð(r/   c                ó0  — ddl m} ddlm} |                      d¦  «        \  }}t          |¦  «        }|                     d¦  «        dd …         D ]}t          ||¦  «        }Œt          ||¦  «        } |¦   «         x|_        |_        t          |_	        d S )Nr   r©   rQ   ú:ú.é   )
r3   rY   r\   rR   rÁ   Ú
__import__ÚgetattrÚrequirementsÚrequiresÚbootstrapped_as_sqlalchemy)ÚargumentrY   rR   ÚmodnameÚclsnameÚmodÚ	componentÚreq_clss           r-   rv   rv   ß  s³   € Ø)Ð)Ð)Ð)Ð)Ð)Ø"Ð"Ð"Ð"Ð"Ð"à—~’~ cÑ*Ô*Ñ€GˆWõ �WÑ
Ô
€CØ—]’] 3Ñ'Ô'¨¨¨Ô+ð &ð &ˆ	Ý�c˜9Ñ%Ô%ˆˆÝ�c˜7Ñ#Ô#€Gà-4¨W©Y¬YÐ6€FÔ˜'Ô*å(B€FÔ%Ð%Ð%r/   c                óž   — ddl m} | j        r=ddl m} |j                             ¦   «         D ]}|                     ||j        ¦  «         Œd S d S )Nr   r©   r1   )r3   rY   r   r2   ÚConfigÚall_configsÚdrop_all_schema_objectsr   )r   rB   rY   r2   rÑ   s        r-   Ú_prep_testing_databaserê   ñ  s}   € à)Ð)Ð)Ð)Ð)Ð)àÔð ;Ø0Ð0Ð0Ð0Ð0Ð0à”=×,Ò,Ñ.Ô.ð 	;ð 	;ˆCØ×-Ò-¨c°3´6Ñ:Ô:Ð:Ð:ð	;ð ;ð	;ð 	;r/   c                ó8   — ddl m} t          |_        ||_        d S r¨   )r3   rY   r   rB   )rH   rB   rY   s      r-   Ú_post_setup_optionsrì   ü  s)   € à)Ð)Ð)Ð)Ð)Ð)å€F„NØ$€FÔÐÐr/   c                óˆ   — ddl m} |                     |                     dd¦  «        | j        | j        ¬¦  «        |_        d S )Nr   )rX   rÔ   Úprofile_file)ÚsortÚdump)r3   rX   ÚProfileStatsFilerp   r   r   Ú_profile_stats)r   rB   rX   s      r-   Ú_setup_profilingró     sT   € à,Ð,Ð,Ð,Ð,Ð,à(×9Ò9Ø�Š˜¨Ñ7Ô7ØÔ ØÔ ð  :ñ  ô  €IÔÐÐr/   c                ól   — t          |t          j        ¦  «        sdS |                      d¦  «        rdS dS )NFr„   T)Ú
issubclassrS   ÚTestBaseÚ
startswith)ÚnameÚclss     r-   Ú
want_classrú     s:   € Ý�c�8Ô,Ñ-Ô-ð ØˆuØ	�Š˜Ñ	Ô	ð Øˆuàˆtr/   c                óP   — |j                              d¦  «        sdS |j        €dS dS )NÚtest_FT)Ú__name__r÷   Ú
__module__)rù   rI   s     r-   Úwant_methodrÿ     s1   € ØŒ;×!Ò! 'Ñ*Ô*ð ØˆuØ	ŒÐ	Øˆuàˆtr/   c              #  ó2  K  — d|v sd|v rˆd|v }t          | |¬¦  «        D ]p}| j        }t          j        dd|j        ¦  «        }t          j        dd|¦  «        }| j        ›d|›�}t          || f||dœ¦  «        }t          |||¦  «         |V — Œqd S | V — d S )	Nr   Úsparse_backend)Úsparsez
[_\[\]\.]+r„   z_+$Ú )Ú_sa_orig_cls_nameÚ__only_on_config__)Ú_possible_configs_for_clsrý   rÀ   Úsubrø   r   Úsetattr)	rù   ÚmoduleÚmarkersr  rÑ   Ú	orig_nameÚ
alpha_namerø   Úsubclss	            r-   Úgenerate_sub_testsr  !  sß   è è € Ø�GÐÐÐ/°7Ð:Ð:Ø! WÐ,ˆÝ,¨S¸Ð@Ñ@Ô@ð 	ð 	ˆCØœˆIõ œ ¨s°C´HÑ=Ô=ˆJÝœ ¨¨JÑ7Ô7ˆJØ!œl˜l˜l¨J¨JÐ7ˆDÝØØ�Ø&/ÀsÐKÐKñô ˆFõ
 �F˜D &Ñ)Ô)Ð)ØˆLˆLˆLˆLð!	ð 	ð$ ˆ	ˆ	ˆ	ˆ	ˆ	r/   c                óB   — t          | ¦  «         t          | ¦  «         d S rL   )Ú	_do_skipsÚ_setup_engine©rù   s    r-   Ú!start_test_class_outside_fixturesr  9  s!   € Ýˆc�N„N€NÝ�#ÑÔÐÐÐr/   c                óv   — t                                | ¦  «         t          j                             ¦   «          d S rL   )rS   Ústop_test_class_inside_fixturesrT   Útesting_reaperr  s    r-   Ústop_test_classr  >  s3   € å×,Ò,¨SÑ1Ô1Ð1õ Ô×:Ò:Ñ<Ô<Ð<Ð<Ð<r/   c                ó&  — t           j                             ¦   «          t                               t          t          j        | ¦  «         	 t          j        st           	                    ¦   «          t          ¦   «          d S # t          ¦   «          w xY wrL   )rT   r  Ú stop_test_class_outside_fixturesr2   rY   r   r   r   rV   Úglobal_cleanup_assertionsÚ_restore_enginer  s    r-   r  r  G  sw   € ÝÔ×;Ò;Ñ=Ô=Ð=Ý×.Ò.­vµv´yÀ#ÑFÔFÐFðÝÔ&ð 	3Ý×0Ò0Ñ2Ô2Ð2åÑÔÐÐÐø�ÑÔÐÐøøøs   Á%B  Â Bc                 ój   — t           j        r&t           j                             t          ¦  «         d S d S rL   )rY   rÃ   ÚresetrR   r8   r/   r-   r  r  Q  s2   € Ý„ð 'ÝŒ×Ò�gÑ&Ô&Ð&Ð&Ð&ð'ð 'r/   c                 ó�   — t           j                             ¦   «          t                               ¦   «          t          ¦   «          d S rL   )rT   r  Úfinal_cleanuprV   r  r  r8   r/   r-   Úfinal_process_cleanupr   V  s;   € ÝÔ×(Ò(Ñ*Ô*Ð*Ý×(Ò(Ñ*Ô*Ð*ÝÑÔÐÐÐr/   c                óÞ   — t          | dd ¦  «        r[t          | j        ¦  «        }d|d<   t                               |¬¦  «        }t
          j                             |t          ¦  «         d S d S )NÚ__engine_options__ÚclassÚscoper�   )	rÜ   Údictr"  rT   Útesting_enginerY   rÃ   Úpush_enginerR   )rù   ÚoptsÚengs      r-   r  r  \  sn   € ÝˆsÐ(¨$Ñ/Ô/ð 2Ý�CÔ*Ñ+Ô+ˆØˆˆW‰Ý×$Ò$¨TÐ$Ñ2Ô2ˆÝŒ×#Ò# C­Ñ1Ô1Ð1Ð1Ð1ð	2ð 2r/   c                óz   — t          |d|j        ¦  «        }|›d|›d|›�}t                               |¦  «         d S )Nr  rÙ   )rÜ   rý   rX   Ú_start_current_test)ÚtestÚtest_module_nameÚ
test_classÚ	test_namerø   Úid_s         r-   Úbefore_testr1  d  sK   € õ �:Ð2°JÔ4GÑHÔH€Dà(Ð(Ð(¨$¨$¨$°	°	Ð
:€Cå×!Ò! #Ñ&Ô&Ð&Ð&Ð&r/   c                ót   — t                                ¦   «          t          j                             ¦   «          d S rL   )rS   Ú
after_testrT   r  ©r,  s    r-   r3  r3  o  s/   € Ý×ÒÑÔÐÝÔ×%Ò%Ñ'Ô'Ð'Ð'Ð'r/   c                óD   — t           j                             | ¦  «         d S rL   )rT   r  Úafter_test_outside_fixturesr4  s    r-   Úafter_test_fixturesr7  t  s   € ÝÔ×6Ò6°tÑ<Ô<Ð<Ð<Ð<r/   c                ó4  — t          t          j                             ¦   «         ¦  «        }| j        rEt          j        | j        Ž }t          |¦  «        D ]"} ||¦  «        r|                     |¦  «         Œ#t          | dd ¦  «        r]t          j        t                               | j        ¦  «        Ž }t          |¦  «        D ]"} ||¦  «        s|                     |¦  «         Œ#t          | dd ¦  «        r|                     | j        g¦  «         t          | d¦  «        r}t          j        }t          |¦  «        D ]a}| j        D ]W}t          ||¦  «        }|                     |¦  «        }	|	r.|                     |¦  «         |�|                     |	¦  «          nŒXŒbt          | d¦  «        ršt          ¦   «         }
t          j        }t          |¦  «        D ]F}| j        D ]<}t          ||¦  «        }|                     |¦  «        s|
                     |¦  «         Œ=ŒG|                     |
¦  «        r|                     |
¦  «         |rMi }t3          t5          |d„ ¬¦  «        ¦  «        D ]}|j        j        }||vr|||<   Œ|                     ¦   «         S |S )NÚ__only_on__r  Ú__requires__Ú__prefer_requires__c                óR   — | j         j        | j         j        | j         j        j        fS rL   )r   rø   ÚdriverÚdialectÚserver_version_info)rÑ   s    r-   ú<lambda>z+_possible_configs_for_cls.<locals>.<lambda>«  s!   € Ø”F”KØ”F”MØ”F”NÔ6ð!€ r/   )Úkey)ÚsetrY   rç   rè   Ú__unsupported_on__rU   Údb_specr¿   ÚremoverÜ   rZ   Úto_listr9  Úintersection_updater  ÚhasattrrÝ   r:  Úmatching_config_reasonsÚextendr;  Úenabled_for_configr†   Ú
differenceÚdifference_updateÚreversedro   r   rø   Úvalues)rù   Úreasonsr  rè   ÚspecÚ
config_objrÝ   ÚrequirementÚcheckÚskip_reasonsÚnon_preferredÚper_dialectrÑ   r   s                 r-   r  r  x  sð  € Ý•f”m×/Ò/Ñ1Ô1Ñ2Ô2€Kà
Ôð /ÝÔ! 3Ô#9Ð:ˆÝ˜{Ñ+Ô+ð 	/ð 	/ˆJØˆt�JÑÔð /Ø×"Ò" :Ñ.Ô.Ð.øåˆs�M 4Ñ(Ô(ð /ÝÔ!¥4§<¢<°´Ñ#@Ô#@ÐAˆÝ˜{Ñ+Ô+ð 	/ð 	/ˆJØ�4˜
Ñ#Ô#ð /Ø×"Ò" :Ñ.Ô.Ð.øåˆsÐ(¨$Ñ/Ô/ð BØ×'Ò'¨Ô)?Ð(@ÑAÔAÐAåˆs�NÑ#Ô#ð ÝÔ*ˆÝ˜{Ñ+Ô+ð 		ð 		ˆJØ"Ô/ð ð �Ý ¨kÑ:Ô:�à$×<Ò<¸ZÑHÔH�Øð Ø×&Ò& zÑ2Ô2Ð2ØÐ*ØŸš |Ñ4Ô4Ð4Ø�Eð	øõ ˆsÐ)Ñ*Ô*ð 
9Ý™œˆÝÔ*ˆÝ˜{Ñ+Ô+ð 	2ð 	2ˆJØ"Ô6ð 2ð 2�Ý ¨kÑ:Ô:�à×/Ò/°
Ñ;Ô;ð 2Ø!×%Ò% jÑ1Ô1Ð1øð	2ð
 ×!Ò! -Ñ0Ô0ð 	9Ø×)Ò)¨-Ñ8Ô8Ð8àð $ð ˆÝÝØðð ðñ ô ñ	
ô 	
ð 	&ð 	&ˆCð ””ˆBØ˜Ð$Ð$Ø"%�˜B‘øØ×!Ò!Ñ#Ô#Ð#àÐr/   c           
     ón  — g }t          | |¦  «        }t          | dd¦  «        rGt          | d¦  «        D ]6} |¦   «         r*t                               d| j        ›d|j        ›�¦  «         Œ7|s~d| j        ›d| j        ›dd                     d„ t          j                             ¦   «         D ¦   «         ¦  «        ›d                     |¦  «        ›�}t                               |¦  «         n˜t          | d	¦  «        rˆt          ¦   «         }t          j        t                               | j        ¦  «        Ž }|D ]"} ||¦  «        s|                     |¦  «         Œ#|                     |¦  «        r|                     |¦  «         t          j        |vr$t)          |                     ¦   «         | ¦  «         d S d S )
NÚ__skip_if__Fú'z' skipped by rÙ   z'' unsupported on any DB implementation z, c           
   3  óÊ   K  — | ]^}d |j         j        ›dd                     d„ t                               |j         ¦  «        D ¦   «         ¦  «        ›d|j         j        ›d �V — Œ_dS )rZ  ú(rÙ   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rL   )r$   )r¶   Údigs     r-   ú	<genexpr>z&_do_skips.<locals>.<genexpr>.<genexpr>Í  s<   è è € ð ð àõ ˜C™œðð ð ð ð ð r/   z)+N)r   rø   ÚjoinrU   Ú_server_versionr=  )r¶   rR  s     r-   r_  z_do_skips.<locals>.<genexpr>É  s¡   è è € ð ð ð �Jð ”MÔ&Ð&Ð&Ø—H’Hð ð å#-×#=Ò#=¸j¼mÑ#LÔ#Lðñ ô ñ ô ð ð ð ”MÔ(Ð(Ð(ððð ð ð ð ð r/   Ú__prefer_backends__)r  rÜ   rY   Ú	skip_testrý   rþ   r`  rç   rè   rH  rB  rU   rD  rZ   rF  rb  r†   rL  rM  rÃ   Ú_setup_configÚpop)rù   rP  rè   ÚcÚmsgrV  rQ  rR  s           r-   r  r  º  sã  € Ø€GÝ+¨C°Ñ9Ô9€Kåˆs�M 5Ñ)Ô)ð Ý˜˜mÑ,Ô,ð 	ð 	ˆAØˆq‰sŒsð Ý× Ò Ð Ø,/¬L¨L¨L¸!¼*¸*ÐEñô ð øð ð 9ð 9àŒNˆNˆNØŒLˆLˆLØ�IŠIð ð õ #)¤-×";Ò";Ñ"=Ô"=ðñ ô ñ ô ð ð �IŠI�gÑÔÐð
ˆõ" 	×Ò˜ÑÔÐÐÝ	�Ð+Ñ	,Ô	,ð 9Ý™œˆÝÔ!¥4§<¢<°Ô0GÑ#HÔ#HÐIˆØ%ð 	.ð 	.ˆJØ�4˜
Ñ#Ô#ð .Ø×!Ò! *Ñ-Ô-Ð-øØ×!Ò! -Ñ0Ô0ð 	9Ø×)Ò)¨-Ñ8Ô8Ð8å„˜kÐ)Ð)Ý�k—o’oÑ'Ô'¨Ñ-Ô-Ð-Ð-Ð-ð *Ð)r/   c                óP   — t           j                             | t          ¦  «         d S rL   )rY   rÃ   ÚpushrR   )rR  Úctxs     r-   rd  rd  å  s    € Ý
„O×Ò˜¥WÑ-Ô-Ð-Ð-Ð-r/   c                  óÖ   — e Zd Zej        d„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         Zd„ Z	ej        dd„¦   «         Z
ej        d	„ ¦   «         Zd
S )ÚFixtureFunctionsc                ó   — t          ¦   «         ‚rL   ©ÚNotImplementedError©ÚselfÚargÚkws      r-   Úskip_test_exceptionz$FixtureFunctions.skip_test_exceptionê  ó   € å!Ñ#Ô#Ð#r/   c                ó   — t          ¦   «         ‚rL   rn  ©rq  rs   rs  s      r-   ÚcombinationszFixtureFunctions.combinationsî  ru  r/   c                ó   — t          ¦   «         ‚rL   rn  rw  s      r-   Úparam_identzFixtureFunctions.param_identò  ru  r/   c                ó   — t          ¦   «         ‚rL   rn  rp  s      r-   ÚfixturezFixtureFunctions.fixtureö  ru  r/   c                ó   — t          ¦   «         ‚rL   rn  ©rq  s    r-   Úget_current_test_namez&FixtureFunctions.get_current_test_nameú  s   € Ý!Ñ#Ô#Ð#r/   Úreturnr   c                ó   — t          ¦   «         ‚rL   rn  r~  s    r-   Úmark_base_test_classz%FixtureFunctions.mark_base_test_classý  ru  r/   c                ó   — t          ¦   «         ‚rL   rn  r~  s    r-   Úadd_to_markerzFixtureFunctions.add_to_marker  ru  r/   N)r€  r   )rý   rþ   Ú__qualname__ÚabcÚabstractmethodrt  rx  rz  r|  r  r‚  Úabstractpropertyr„  r8   r/   r-   rl  rl  é  sà   € € € € € ØÔð$ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð$ð $ð $ð 	Ôð$ð $ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð $ð $r/   rl  c                ó
   — | a d S rL   )rª   )Úfixture_fn_classs    r-   Úset_fixture_functionsr‹  	  s   € à(ÐÐÐr/   r®   )UÚ
__future__r   r†  Úargparser   r@   ra   r    Úpathlibr   rÀ   rq   Útypingr   r3   r   rß   rd   rÈ   rS   rT   rU   rW   rX   r2   rV   rÝ   rY   rR   rZ   rB   rB  rŠ   r…   r   Ú__annotations__r.   r6   r;   r>   rE   rJ   rO   r_   r%   r&   r)   r'   r(   r+   r*   rG   r[   rŒ   rŽ   r’   r™   r¦   r¬   r±   rÒ   rÖ   rv   rê   rì   ró   rú   rÿ   r  r  r  r  r  r   r  r1  r3  r7  r  r  rd  ÚABCrl  rª   r‹  r8   r/   r-   ú<module>r’     sŠ  ðð #Ð "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &ðð #Ð åÔÐ8Ñ9Ô9€ð €Ø
€Ø€
Ø€Ø€	Ø€	Ø€
Ø€Ø	€Ø
€Ø€Ø€à
€Øˆs‰uŒu€Øˆs‰uŒu€Ø€Ð Ð Ð Ñ ðrð rð rðj	.ð 	.ð 	.ðð ð ðð ð ðð ð ð!ð !ð !ð!ð !ð !ðð ð ð$
9ð 
9ð 
9ðð ð ðð ð ðð ð ðð ð ð.ð .ð .ð.ð .ð .ð €Ø€ðð ð ð
ð ð ð
 ðð ñ „ðð
 ðð ñ „ðð ð
ð 
ñ „ð
ð ð4ð 4ñ „ð4ð ð'ð 'ñ „ð'ð
 ð.-ð .-ñ „ð.-ðb ð)ð )ñ „ð)ð
Cð Cð Cð$ ð;ð ;ñ „ð;ð ð%ð %ñ „ð%ð ðð ñ „ððð ð ðð ð ðð ð ð0ð ð ð
=ð =ð =ðð ð ð'ð 'ð 'ð
ð ð ð2ð 2ð 2ð'ð 'ð 'ð(ð (ð (ð
=ð =ð =ð?ð ?ð ?ð ?ðD(.ð (.ð (.ðV.ð .ð .ð$ð $ð $ð $ð $�s”wñ $ô $ð $ð: Ð ð)ð )ð )ð )ð )r/   