Ë
    ðmxi>Z  ã                  ó¦  — 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„ ZM	 d9d3„ZNd4„ ZOd5„ ZP G d6„ d7ej¢                  «      ZRdaSd8„ ZTy):é    )ÚannotationsN)Ú	Namespace)ÚPath)ÚAny)ÚasyncioFzsqlalchemy.testing.plugin_baser   Úoptionsc                óX  —  | 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¬«       y )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-asyncioz9disable test / fixtures / provisioning 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    ú\/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/testing/plugin/plugin_base.pyÚsetup_optionsr.   ;   su  € ÙØØÜÜØ;õñ ØØÜÜØ<õñ ØØÜØð'õñ ØØÜ"Ø(õ	ñ ØØÜØØGõñ ØØÜØðõñ ØØØØ;õ	ñ ØØØHõñ
 ØØÜ)¨)Ó4ðNõñ ØØÜ)Ð*<Ó=ðõ	ñ ØØÜ)Ð*<Ó=ðõ	ñ ØØÜ)¨&Ó1ðMõ	ñ ØÜØØØ9õñ ØÜØØAõ	ñ ØØØðõ	ñ ØÜØðõ	ñ ØØÜÜ"ØBõñ ØØÜÜð.õñ ØØÜÜð2õñ ØØØØØ3õñ Ø ØØ#ØØ;õñ ØÜØØ>õ	ñ Ø ÜØØØ$ðAõñ Ø!Üð9õñ ØØØIöó    c                ó   — ddl m} | |_        y)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                 ó   — y)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                 ó   — y)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        j                  t	        | dz  «      t	        | dz  «      g«       y )Nz	setup.cfgztest.cfg)ÚconfigparserÚConfigParserÚfile_configÚreadr$   )Ú	root_paths    r-   Úread_configrE     s:   € ä×+Ñ+Ó-€KÜ×ÑÜ	ˆY˜Ñ$Ó	%¤s¨9°zÑ+AÓ'BÐCõr/   c                ó@   — | a t        D ]  } |t         t        «       Œ y)z7things to set up early, before coverage might be setup.N)r   Úpre_configurerB   )ÚoptÚfns     r-   Ú	pre_beginrJ     s"   € ð €GÜò !ˆÙ
Œ7”KÕ ñ!r/   c                ó   — | t         _        y ©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        j                  «        y)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ß4Ýä×ÑÕr/   c                óP  — t         sdd l a t        j                  «        | j                  d«      r3t        j                  |«      j	                  t         j
                  «       y | j                  d«      r3t        j                  |«      j	                  t         j                  «       y y )Nr   z-infoz-debug)ÚloggingÚbasicConfigÚendswithÚ	getLoggerÚsetLevelÚINFOÚDEBUG©Úopt_strrN   Úparsers      r-   r%   r%   6  so   € åÛä×ÑÔà×Ñ˜Ô Ü×Ñ˜%Ó ×)Ñ)¬'¯,©,Õ7Ø	×	Ñ	˜(Ô	#Ü×Ñ˜%Ó ×)Ñ)¬'¯-©-Õ8ð 
$r/   c            	     ó  — t         €t        t        j                  «       «       t	        d«       t        t         j                  d«      «      D ]'  }t	        |d›dt         j                  d|«      ›�«       Œ) t        j                  d«       y )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  se   € ÜÐô 	”D—H‘H“JÔÜ	Ð
<Ô=Üœ×+Ñ+¨DÓ1Ó2ò BˆÜ›E¤;§?¡?°4¸Ô#?Ð@ÕAðBä‡H�HˆQ…Kr/   c                ó   — t        |«       y rL   )Ú_setup_requirementsrh   s      r-   r)   r)   N  s
   € Ü˜Õr/   c                ó   ‡ — ˆ fd„}|S )Nc                ó    •— t        | ‰|«       y 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        | ‰|«       y 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                óN   — t         j                  |j                  dd«      «       y ©Nú-Ú_)Úexclude_tagsÚaddÚreplacerh   s      r-   r+   r+   `  ó   € Ü×Ñ�U—]‘] 3¨Ó,Õ-r/   c                óN   — t         j                  |j                  dd«      «       y r‚   )Úinclude_tagsr†   r‡   rh   s      r-   r*   r*   d  rˆ   r/   c                ó0   — t         j                  | «       | S rL   )rG   r   r^   s    r-   ÚprerŒ   l  s   € Ü×Ñ˜ÔØ€Ir/   c                ó0   — t         j                  | «       | S rL   )r[   r   r^   s    r-   ÚpostrŽ   q  s   € Ü×Ñ˜"ÔØ€Ir/   c                ó   — | a y rL   ©r   ©rH   rB   s     r-   Ú_setup_optionsr’   v  s	   € ð �Gr/   c                ó\   — ddl m} |j                  ddd«       |j                  ddd«       y )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™   |  s5   € å,à×ÑØ!Ø-Ø)ôð
 ×ÑØ Ø-Ø(õr/   c                ó¦   — t         j                  j                  dd«      dk(  rddlm} 	  |d¬«       y y # t
        $ r}t        d«      |‚d }~ww xY w)	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¦   Œ  sX   € ä	‡z�z‡~�~Ð/°Ó5¸Ò<Ý4ð	Ù DÖ)ð	 =øô
 ò 	Ü ð$óð ðûð	ús   «	6 ¶	A¿AÁAc                ó.   — ddl m} t        «       |_        y ©Nr   ©rY   )r3   rY   Ú_fixture_fn_classÚ_fixture_functions)r   rB   rY   s      r-   Ú_init_symbolsr¬   š  s   € å)ä 1Ó 3€FÕr/   c                ó4   — | j                   rdt        _        y y )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                  xs g }| j                  rn| j                  D ]_  }t        j                  d|«      D ]D  }	|	|j                  d«      vrt        d|	z  «      ‚|j                  |j!                  d|	«      «       ŒF Œa |s!|j                  |j!                  dd	«      «       d |_        | j$                  r€|j&                  rt|D �
cg c]  }
|j)                  |
«      ‘Œ c}
D ]R  }
t+        | j$                  d
«      5 }|j-                  |j&                  › d|
j/                  d¬«      › d�«       d d d «       ŒT t        |j1                  ||«      «      }|D ]U  }
t2        j5                  d|
«       |j7                  |
| ||j&                  «      }|j"                  rŒD|j9                  ||«       ŒW y c c}
w # 1 sw Y   ŒÙxY w)Nr   rQ   r©   r1   )Úurlz[,\s]+r   z:Unknown URI specifier '%s'.  Specify --dbs for known uris.r   Ú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   Úmake_urlÚopenÚwriteÚrender_as_stringÚgenerate_db_urlsÚlogÚinfoÚsetup_configÚset_as_current)r   rB   rR   rY   r2   Úsa_urlÚdb_urlsÚextra_driversÚdb_tokenr   Údb_urlÚfile_Úexpanded_urlsÚcfgs                 r-   Ú_engine_urirÎ   §  sà  € å"Ý)Ý,Ý/à‡}‚}Ü�w—}‘}Ó%‰àˆà×$Ñ$Ò*¨€Mà‡z‚zØŸ
™
ò 	>ˆHÜ—h‘h˜y¨(Ó3ò >�Ø˜[×0Ñ0°Ó6Ñ6Ü&ð8Ø:<ñ=óð ð
 —N‘N ;§?¡?°4¸Ó#<Õ=ñ>ð	>ñ Ø�‰�{—‘ t¨YÓ7Ô8à€F„Oà×Ò 	× 8Ò 8Ø=DÖE°6�v—‘ vÕ.ÒEò 	ˆFÜ�g×*Ñ*¨CÓ0ð °EØ—‘Ø ×/Ñ/Ð0°Ø×.Ñ.¸UÐ.ÓCÐDÀBðHô÷ð ð	ô ˜×3Ñ3°G¸]ÓKÓL€Màò -ˆÜ�‰Ð*¨FÔ3à×$Ñ$Ø�G˜[¨)×*BÑ*Bó
ˆð �‹Ø×Ñ˜s GÕ,ñ-ùò F÷ð ús   ÄG3Å2G8Ç8H	c                ó>   — |j                  dd«      }t        |«       y )NÚsqla_testingÚrequirement_cls)rp   rv   )r   rB   rÑ   s      r-   Ú_requirementsrÒ   Ù  s   € à!—o‘o nÐ6GÓH€OÜ˜Õ(r/   c                óø   — ddl m} ddlm} | j	                  d«      \  }}t        |«      }|j	                  d«      dd  D ]  }t        ||«      }Œ t        ||«      } |«       x|_        |_        t        |_	        y )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   ß  sx   € Ý)Ý"à—~‘~ cÓ*Ñ€GˆWô �WÓ
€CØ—]‘] 3Ó'¨¨Ð+ò &ˆ	Ü�c˜9Ó%‰ð&ä�c˜7Ó#€Gá-4«YÐ6€FÔ˜'Ô*ä(B€FÕ%r/   c                ó¬   — ddl m} | j                  rBddl m} |j                  j                  «       D ]  }|j                  ||j                  «       Œ  y y )Nr   r©   r1   )r3   rY   r   r2   ÚConfigÚall_configsÚdrop_all_schema_objectsr   )r   rB   rY   r2   rÍ   s        r-   Ú_prep_testing_databaseræ   ñ  sF   € å)à×ÒÝ0à—=‘=×,Ñ,Ó.ò 	;ˆCØ×-Ñ-¨c°3·6±6Õ:ñ	;ð r/   c                ó4   — ddl m} t        |_        ||_        y r¨   )r3   rY   r   rB   )rH   rB   rY   s      r-   Ú_post_setup_optionsrè   ü  s   € å)ä€F„NØ$€FÕr/   c                óŠ   — ddl m} |j                  |j                  dd«      | j                  | j
                  ¬«      |_        y )Nr   )rX   rÐ   Úprofile_file)ÚsortÚdump)r3   rX   ÚProfileStatsFilerp   r   r   Ú_profile_stats)r   rB   rX   s      r-   Ú_setup_profilingrï     s=   € å,à(×9Ñ9Ø�‰˜¨Ó7Ø× Ñ Ø× Ñ ð  :ó  €IÕr/   c                ó^   — t        |t        j                  «      sy| j                  d«      ryy)NFr„   T)Ú
issubclassrS   ÚTestBaseÚ
startswith)ÚnameÚclss     r-   Ú
want_classrö     s'   € Ü�cœ8×,Ñ,Ô-ØØ	�‰˜Ô	Øàr/   c                óV   — |j                   j                  d«      sy|j                  €yy)NÚtest_FT)Ú__name__ró   Ú
__module__)rõ   rI   s     r-   Úwant_methodrû     s'   € Ø�;‰;×!Ñ! 'Ô*ØØ	�‰Ð	Øàr/   c              #  óR  K  — d|v sd|v sd|v r“d|v }d|v }t        | ||¬«      D ]y  }| j                  }t        j                  dd|j                  «      }t        j                  dd|«      }| j                  ›d|›�}t        || f||d	œ«      }	t        |||	«       |	–— Œ{ y | –— y ­w)
Nr   Úsparse_backendÚsparse_driver_backend)ÚsparseÚsparse_driverz
[_\[\]\.]+r„   z_+$Ú )Ú_sa_orig_cls_nameÚ__only_on_config__)Ú_possible_configs_for_clsrù   r¹   Úsubrô   r   Úsetattr)
rõ   ÚmoduleÚmarkersrÿ   r   rÍ   Ú	orig_nameÚ
alpha_namerô   Úsubclss
             r-   Úgenerate_sub_testsr  !  sÄ   è ø€ à�WÑØ˜wÑ&Ø" gÑ-à! WÐ,ˆØ/°7Ð:ˆÜ,Ø˜¨mô
ò 	ˆCð Ÿ™ˆIô Ÿ™ ¨s°C·H±HÓ=ˆJÜŸ™ ¨¨JÓ7ˆJØ!Ÿl›l©JÐ7ˆDÜØØ�Ø&/ÀsÑKóˆFô
 �F˜D &Ô)Ø‹Lñ%	ð( ‹	ùs   ‚B%B'c                ó0   — t        | «       t        | «       y rL   )Ú	_do_skipsÚ_setup_engine©rõ   s    r-   Ú!start_test_class_outside_fixturesr  @  s   € Üˆc„NÜ�#Õr/   c                ój   — t         j                  | «       t        j                  j                  «        y rL   )rS   Ústop_test_class_inside_fixturesrT   Útesting_reaperr  s    r-   Ústop_test_classr  E  s$   € ä×,Ñ,¨SÔ1ô ×Ñ×:Ñ:Õ<r/   c                ó  — t         j                  t        t        j                  | «       t        j
                  j                  «        	 t        j                  st        j                  «        t        «        y # t        «        w xY wrL   )r2   Ú stop_test_class_outside_fixturesrY   r   rT   r  r   r   rV   Úglobal_cleanup_assertionsÚ_restore_enginer  s    r-   r  r  N  sQ   € Ü×.Ñ.¬v´v·y±yÀ#ÔFÜ×Ñ×;Ñ;Ô=ðÜ×&Ò&Ü×0Ñ0Ô2äÕøŒÕús   Á	$A8 Á8Bc                 ól   — t         j                  r$t         j                  j                  t        «       y y rL   )rY   r¼   ÚresetrR   r8   r/   r-   r  r  X  s    € Ü‡‚Ü�‰×ÑœgÕ&ð r/   c                 ó|   — t         j                  j                  «        t        j	                  «        t        «        y rL   )rT   r  Úfinal_cleanuprV   r  r  r8   r/   r-   Úfinal_process_cleanupr  ]  s&   € Ü×Ñ×(Ñ(Ô*Ü×(Ñ(Ô*ÜÕr/   c                óÈ   — t        | dd «      rUt        | j                  «      }d|d<   t        j	                  |¬«      }t
        j                  j                  |t        «       y y )NÚ__engine_options__ÚclassÚscoper�   )	rØ   Údictr   rT   Útesting_enginerY   r¼   Úpush_enginerR   )rõ   ÚoptsÚengs      r-   r  r  c  sT   € ÜˆsÐ(¨$Ô/Ü�C×*Ñ*Ó+ˆØˆˆW‰Ü×$Ñ$¨TÐ$Ó2ˆÜ�‰×#Ñ# C¬Õ1ð	 0r/   c                óp   — t        |d|j                  «      }|›d|›d|›�}t        j                  |«       y )Nr  rÕ   )rØ   rù   rX   Ú_start_current_test)ÚtestÚtest_module_nameÚ
test_classÚ	test_namerô   Úid_s         r-   Úbefore_testr/  k  s3   € ô �:Ð2°J×4GÑ4GÓH€Dâ(ª$±	Ð
:€Cä×!Ñ! #Õ&r/   c                óh   — t         j                  «        t        j                  j                  «        y rL   )rS   Ú
after_testrT   r  ©r*  s    r-   r1  r1  v  s    € Ü×ÑÔÜ×Ñ×%Ñ%Õ'r/   c                óB   — t         j                  j                  | «       y rL   )rT   r  Úafter_test_outside_fixturesr2  s    r-   Úafter_test_fixturesr5  {  s   € Ü×Ñ×6Ñ6°tÕ<r/   c                ó¬  — t        t        j                  j                  «       «      }| j                  rFt        j                  | j                  Ž }t        |«      D ]  } ||«      sŒ|j                  |«       Œ t        | dd «      rYt        j                  t        j                  | j                  «      Ž }t        |«      D ]  } ||«      rŒ|j                  |«       Œ t        | dd «      r|j                  | j                  g«       t        | d«      r¨t        j                   }t        |«      D ]Š  }| j"                  D ]y  }t        ||«      }	|	j%                  |«      }
|
r&|j                  |«       |�|j'                  |
«        ŒW|	j)                  |«      }|sŒ\t        | dd«      t+        |«      z   | _        Œ{ ŒŒ t        | d«      rŒt        «       }t        j                   }t        |«      D ]B  }| j.                  D ]1  }t        ||«      }	|	j1                  |«      rŒ!|j3                  |«       Œ3 ŒD |j5                  |«      r|j7                  |«       |rPi }t9        t;        |d„ ¬«      «      }|D ]"  }|j<                  j>                  }||vsŒ|||<   Œ$ |jA                  «       S |r¦i }t        t9        t;        |d	„ ¬«      «      «      }|D ]Q  }|j<                  j>                  |j<                  jB                  jD                  f}||v r||   jF                  rŒM|||<   ŒS t        |jA                  «       «      }|D �cg c]	  }||v sŒ|‘Œ c}S |S c c}w )
NÚ__only_on__r  Ú__requires__Ú__warnings__r8   Ú__prefer_requires__c                óô   — | j                   rdnd| j                  j                  | j                  j                  | j                  j                  j
                  | j                  j                  j                  fS )NÚzr³   )Úis_default_dialectr   rô   ÚdriverÚdialectÚserver_version_infoÚis_async©rÍ   s    r-   ú<lambda>z+_possible_configs_for_cls.<locals>.<lambda>»  sN   € Ø×1Ò1‘C°sØ—F‘F—K‘KØ—F‘F—M‘MØ—F‘F—N‘N×6Ñ6Ø—F‘F—N‘N×+Ñ+ð!€ r/   )Úkeyc                óÖ   — | j                   j                  | j                   j                  | j                   j                  j                  | j                   j                  j
                  fS rL   )r   rô   r>  r?  r@  rA  rB  s    r-   rC  z+_possible_configs_for_cls.<locals>.<lambda>Ô  sA   € ØŸ™Ÿ™ØŸ™Ÿ™ØŸ™Ÿ™×:Ñ:ØŸ™Ÿ™×/Ñ/ð	%€ r/   )$ÚsetrY   rã   rä   Ú__unsupported_on__rU   Údb_specr¸   ÚremoverØ   rZ   Úto_listr7  Úintersection_updater  ÚhasattrrÙ   r8  Úmatching_config_reasonsÚextendÚmatching_warningsÚtupler9  r:  Úenabled_for_configr†   Ú
differenceÚdifference_updateÚreversedro   r   rô   Úvaluesr?  r@  r=  )rõ   Úreasonsrÿ   r   rä   ÚspecÚ
config_objrÙ   ÚrequirementÚcheckÚskip_reasonsrW   Únon_preferredÚper_dialectÚsorted_all_configsrÍ   r   ÚdbsrD  Úchosen_cfgss                       r-   r  r    s8  € ô ”f—m‘m×/Ñ/Ó1Ó2€Kà
×ÒÜ×!Ñ! 3×#9Ñ#9Ð:ˆÜ˜{Ó+ò 	/ˆJÙ�JÕØ×"Ñ" :Õ.ð	/ô ˆs�M 4Ô(Ü×!Ñ!¤4§<¡<°·±Ó#@ÐAˆÜ˜{Ó+ò 	/ˆJÙ˜
Õ#Ø×"Ñ" :Õ.ð	/ô ˆsÐ(¨$Ô/Ø×'Ñ'¨×)?Ñ)?Ð(@ÔAäˆs�NÔ#Ü×*Ñ*ˆÜ˜{Ó+ò 	(ˆJØ"×/Ñ/ò (�Ü ¨kÓ:�à$×<Ñ<¸ZÓH�ÙØ×&Ñ& zÔ2ØÐ*ØŸ™ |Ô4Ùà ×2Ñ2°:Ó>�ÚÜ'.Ø˜^¨Ró(ä˜h›ñ((�CÕ$ñ(ð	(ô" ˆsÐ)Ô*Ü›ˆÜ×*Ñ*ˆÜ˜{Ó+ò 	2ˆJØ"×6Ñ6ò 2�Ü ¨kÓ:�à×/Ñ/°
Õ;Ø!×%Ñ% jÕ1ñ	2ð	2ð ×!Ñ! -Ô0Ø×)Ñ)¨-Ô8áð ˆä%ÜØñô	ó
Ðð &ò 	&ˆCØ—‘—‘ˆBØ˜Ò$Ø"%�˜B’ð	&ð ×!Ñ!Ó#Ð#Ù	ð ˆä!ÜÜØñôó
ó
Ðð &ò 	ˆCØ—6‘6—;‘; §¡§¡× BÑ BÐCˆCØ�c‰z˜c #™h×9Ò9Øà��C’ð	ô ˜#Ÿ*™*›,Ó'ˆØ1ÖH˜°S¸KÒ5G’ÒHÐHàÐùò Is   Ì>	MÍMc           
     ó(  — g }t        | |«      }t        | dd«      rHt        | d«      D ]9  } |«       sŒt        j                  d| j                  ›d|j                  ›�«       Œ; |sxd| j
                  ›d| j                  ›ddj                  d„ t        j                  j                  «       D «       «      ›dj                  |«      ›�}t        j                  |«       nˆt        | d	«      r|t        «       }t        j                  t        j                  | j                  «      Ž }|D ]  } ||«      rŒ|j!                  |«       Œ |j#                  |«      r|j%                  |«       t        j&                  |vrt)        |j+                  «       | «       y y )
NÚ__skip_if__Fú'z' skipped by rÕ   z'' unsupported on any DB implementation z, c           
   3  óê   K  — | ]k  }d |j                   j                  ›ddj                  d„ t        j	                  |j                   «      D «       «      ›d|j                   j
                  ›d �–— Œm y­w)rc  ú(rÕ   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrL   )r$   )Ú.0Údigs     r-   ú	<genexpr>z&_do_skips.<locals>.<genexpr>.<genexpr>þ  s   è ø€ ò àô ˜CŸñùs   ‚z)+N)r   rô   ÚjoinrU   Ú_server_versionr>  )rg  rX  s     r-   ri  z_do_skips.<locals>.<genexpr>ú  s`   è ø€ ò ñ ð —M‘M×&Ó&Ø—H‘Hñ ä#-×#=Ñ#=¸j¿m¹mÓ#Lôõ ð —M‘M×(Ó(ôñùs   ‚A1A3Ú__prefer_backends__)r  rØ   rY   Ú	skip_testrù   rú   rj  rã   rä   rL  rF  rU   rH  rZ   rJ  rl  r†   rR  rS  r¼   Ú_setup_configÚpop)rõ   rV  rä   ÚcÚmsgr\  rW  rX  s           r-   r  r  ë  sN  € Ø€GÜ+¨C°Ó9€Käˆs�M 5Ô)Ü˜˜mÓ,ò 	ˆAÙ�sÜ× Ò Ø,/¯L«L¸!¿*º*ÐEõð	ò à�N‹NØ�L‹LØ�I‰Iñ ô #)§-¡-×";Ñ";Ó"=ôô ð �I‰I�gÔð
ˆô" 	×Ñ˜ÕÜ	�Ð+Ô	,Ü›ˆÜ×!Ñ!¤4§<¡<°×0GÑ0GÓ#HÐIˆØ%ò 	.ˆJÙ˜
Õ#Ø×!Ñ! *Õ-ð	.ð ×!Ñ! -Ô0Ø×)Ñ)¨-Ô8ä‡�˜kÑ)Ü�k—o‘oÓ'¨Õ-ð *r/   c                óL   — t         j                  j                  | t        «       y rL   )rY   r¼   ÚpushrR   )rX  Úctxs     r-   rn  rn    s   € Ü
‡O�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y)
ÚFixtureFunctionsc                ó   — t        «       ‚rL   ©ÚNotImplementedError©ÚselfÚargÚkws      r-   Úskip_test_exceptionz$FixtureFunctions.skip_test_exception  ó   € ä!Ó#Ð#r/   c                ó   — t        «       ‚rL   rx  ©r{  rs   r}  s      r-   ÚcombinationszFixtureFunctions.combinations  r  r/   c                ó   — t        «       ‚rL   rx  r�  s      r-   Úparam_identzFixtureFunctions.param_ident#  r  r/   c                ó   — t        «       ‚rL   rx  rz  s      r-   ÚfixturezFixtureFunctions.fixture'  r  r/   c                ó   — t        «       ‚rL   rx  ©r{  s    r-   Úget_current_test_namez&FixtureFunctions.get_current_test_name+  s   € Ü!Ó#Ð#r/   c                ó   — t        «       ‚rL   rx  rˆ  s    r-   Úmark_base_test_classz%FixtureFunctions.mark_base_test_class.  r  r/   c                ó   — t        «       ‚rL   rx  rˆ  s    r-   Úadd_to_markerzFixtureFunctions.add_to_marker2  r  r/   N)Úreturnr   )rù   rú   Ú__qualname__ÚabcÚabstractmethodr~  r‚  r„  r†  r‰  r‹  Úabstractpropertyr�  r8   r/   r-   rv  rv    s¡   „ Ø×Ññ$ó ð$ð 	×Ññ$ó ð$ð 	×Ññ$ó ð$ð 	×Ññ$ó ð$ò$ð 	×Ñò$ó ð$ð 	×Ññ$ó ñ$r/   rv  c                ó   — | a y rL   )rª   )Úfixture_fn_classs    r-   Úset_fixture_functionsr•  :  s   € à(Ñr/   )NFF)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   rF  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  r/  r1  r5  r  r  rn  ÚABCrv  rª   r•  r8   r/   r-   ú<module>rœ     sC  ðö #ã 
Ý Û Û Û 	Ý Û 	Û 
Ý å &ðð #Ð ä×ÑÐ8Ó9€ð €Ø
€Ø€
Ø€Ø€	Ø€	Ø€
Ø€Ø	€Ø
€Ø€Ø€à
€Ù‹u€Ù‹u€Ø€ˆÓ òròj	.òòòò!ò!òò$
9òòòòò.ò.ð €Ø€òò
ð
 ñó ðð
 ñó ðð ñ
ó ð
ð ñ4ó ð4ð ñ'ó ð'ð
 ñ.-ó ð.-ðb ñ)ó ð)ò
Cð$ ñ;ó ð;ð ñ%ó ð%ð ñó ðòòòò>ò
=òò'ò
ò2ò'ò(ò
=ð
 49óiòX(.òV.ô$�s—w‘wô $ð: Ð ó)r/   