§
    eŠtj>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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-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    úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/testing/plugin/plugin_base.pyÚsetup_optionsr.   ;   s4  € Ø€KØØÝÝØ;ðñ ô ð ð €KØØÝÝØ<ðñ ô ð ð €KØØÝØð'ðñ ô ð ð €KØØÝ"Ø(ð	ñ ô ð ð €KØØÝØØGðñ ô ð ð €KØØÝØððñ ô ð ð €KØØØØ;ð	ñ ô ð ð €KØØØHðñ ô ð ð
 €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              #  óD  K  — d|v sd|v sd|v r�d|v }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Ú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Ñ=Ô=ˆ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  @  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  E  s3   € å×,Ò,¨SÑ1Ô1Ð1õ Ô×:Ò:Ñ<Ô<Ð<Ð<Ð<r/   c                ó&  — t                                t          t          j        | ¦  «         t          j                             ¦   «          	 t          j        st           	                    ¦   «          t          ¦   «          d S # 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  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  X  s2   € Ý„ð 'ÝŒ×Ò�gÑ&Ô&Ð&Ð&Ð&ð'ð 'r/   c                 ó�   — t           j                             ¦   «          t                               ¦   «          t          ¦   «          d S rL   )rT   r  Úfinal_cleanuprV   r  r  r8   r/   r-   Úfinal_process_cleanupr!  ]  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  c  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_testr2  k  sK   € õ �:Ð2°JÔ4GÑHÔH€Dà(Ð(Ð(¨$¨$¨$°	°	Ð
:€Cå×!Ò! #Ñ&Ô&Ð&Ð&Ð&r/   c                ót   — t                                ¦   «          t          j                             ¦   «          d S rL   )rS   Ú
after_testrT   r  ©r-  s    r-   r4  r4  v  s/   € Ý×ÒÑÔÐÝÔ×%Ò%Ñ'Ô'Ð'Ð'Ð'r/   c                óD   — t           j                             | ¦  «         d S rL   )rT   r  Úafter_test_outside_fixturesr5  s    r-   Úafter_test_fixturesr8  {  s   € ÝÔ×6Ò6°tÑ<Ô<Ð<Ð<Ð<r/   c                óä  ‡— 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 ]ž}| j        D ]”}t          ||¦  «        }	|	                     |¦  «        }
|
r.|                     |¦  «         |�|                     |
¦  «          n>|	                     |¦  «        }|r&t          | dd¦  «        t+          |¦  «        z   | _        Œ•ŒŸt          | d¦  «        ršt          ¦   «         }t          j        }t          |¦  «        D ]F}| j        D ]<}t          ||¦  «        }	|	                     |¦  «        s|                     |¦  «         Œ=ŒG|                     |¦  «        r|                     |¦  «         |rOi }t9          t;          |d„ ¬¦  «        ¦  «        }|D ]}|j        j        }||vr|||<   Œ|                      ¦   «         S |r–i }t          t9          t;          |d	„ ¬¦  «        ¦  «        ¦  «        }|D ]6}|j        j        |j        j!        j"        f}||v r||         j#        rŒ1|||<   Œ7t          |                      ¦   «         ¦  «        Šˆfd
„|D ¦   «         S |S )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>»  s:   € ØÔ1Ð:�C�C°sØ”F”KØ”F”MØ”F”NÔ6Ø”F”NÔ+ð!€ r/   )Úkeyc                ór   — | j         j        | j         j        | j         j        j        | j         j        j        fS rL   )r   r÷   rA  rB  rC  rD  rE  s    r-   rF  z+_possible_configs_for_cls.<locals>.<lambda>Ô  s+   € ØœœØœœØœœÔ:ØœœÔ/ð	%€ r/   c                ó   •— g | ]}|‰v ¯|‘Œ	S r8   r8   )rµ   rÐ   Úchosen_cfgss     €r-   r¸   z-_possible_configs_for_cls.<locals>.<listcomp>æ  s#   ø€ ÐHÐHÐH˜°S¸KÐ5GÐ5G�Ð5GÐ5GÐ5Gr/   )$ÚsetrY   ræ   rç   Ú__unsupported_on__rU   Údb_specr¾   ÚremoverÛ   rZ   Úto_listr:  Úintersection_updater  ÚhasattrrÜ   r;  Úmatching_config_reasonsÚextendÚmatching_warningsÚtupler<  r=  Úenabled_for_configr†   Ú
differenceÚdifference_updateÚreversedro   r   r÷   ÚvaluesrB  rC  r@  )rø   Úreasonsr  r  rç   ÚspecÚ
config_objrÜ   ÚrequirementÚcheckÚskip_reasonsrW   Únon_preferredÚper_dialectÚsorted_all_configsrÐ   r   ÚdbsrG  rJ  s                      @r-   r  r    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à ×2Ò2°:Ñ>Ô>�Øð (Ý'.Ø˜^¨Rñ(ô (å˜h™œñ((�CÔ$øøõ ˆsÐ)Ñ*Ô*ð 
9Ý™œˆÝÔ*ˆÝ˜{Ñ+Ô+ð 	2ð 	2ˆJØ"Ô6ð 2ð 2�Ý ¨kÑ:Ô:�à×/Ò/°
Ñ;Ô;ð 2Ø!×%Ò% jÑ1Ô1Ð1øð	2ð
 ×!Ò! -Ñ0Ô0ð 	9Ø×)Ò)¨-Ñ8Ô8Ð8àð 4Ið ˆå%ÝØðð ð	ñ 	ô 	ñ
ô 
Ðð &ð 	&ð 	&ˆCØ””ˆBØ˜Ð$Ð$Ø"%�˜B‘øØ×!Ò!Ñ#Ô#Ð#Ø	ð Ið ˆå!ÝÝØðð ðñ ô ñ
ô 
ñ
ô 
Ðð &ð 	ð 	ˆCØ”6”; ¤¤Ô BÐCˆCØ�cˆzˆz˜c #œhÔ9ˆzØà��C‘�å˜#Ÿ*š*™,œ,Ñ'Ô'ˆØHÐHÐHÐHÐ1ÐHÑHÔHÐHàÐ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 )rg  ú(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_versionrA  )rµ   r]  s     r-   rl  z_do_skips.<locals>.<genexpr>ú  s¡   è è € ð ð ð �Jð ”MÔ&Ð&Ð&Ø—H’Hð ð å#-×#=Ò#=¸j¼mÑ#LÔ#Lðñ ô ñ ô ð ð ð ”MÔ(Ð(Ð(ððð ð ð ð ð r/   Ú__prefer_backends__)r  rÛ   rY   Ú	skip_testrü   rý   rm  ræ   rç   rQ  rK  rU   rM  rZ   rO  ro  r†   rW  rX  rÂ   Ú_setup_configÚpop)rø   r[  rç   ÚcÚmsgra  r\  r]  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   )r]  Úctxs     r-   rq  rq    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   r{  ©r~  rs   r€  s      r-   ÚcombinationszFixtureFunctions.combinations  r‚  r/   c                ó   — t          ¦   «         ‚rL   r{  r„  s      r-   Úparam_identzFixtureFunctions.param_ident#  r‚  r/   c                ó   — t          ¦   «         ‚rL   r{  r}  s      r-   ÚfixturezFixtureFunctions.fixture'  r‚  r/   c                ó   — t          ¦   «         ‚rL   r{  ©r~  s    r-   Úget_current_test_namez&FixtureFunctions.get_current_test_name+  s   € Ý!Ñ#Ô#Ð#r/   Úreturnr   c                ó   — t          ¦   «         ‚rL   r{  r‹  s    r-   Úmark_base_test_classz%FixtureFunctions.mark_base_test_class.  r‚  r/   c                ó   — t          ¦   «         ‚rL   r{  r‹  s    r-   Úadd_to_markerzFixtureFunctions.add_to_marker2  r‚  r/   N)r�  r   )rü   rý   Ú__qualname__ÚabcÚabstractmethodr�  r…  r‡  r‰  rŒ  r�  Úabstractpropertyr‘  r8   r/   r-   ry  ry    sà   € € € € € ØÔð$ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð$ð $ð $ð 	Ôð$ð $ð $ñ Ôð$ð 	Ôð$ð $ñ Ôð$ð $ð $r/   ry  c                ó
   — | a d S 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   rK  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  r2  r4  r8  r  r  rq  ÚABCry  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ð$ ð;ð ;ñ „ð;ð ð%ð %ñ „ð%ð ðð ñ „ððð ð ðð ð ðð ð ð>ð ð ð
=ð =ð =ðð ð ð'ð 'ð 'ð
ð ð ð2ð 2ð 2ð'ð 'ð 'ð(ð (ð (ð
=ð =ð =ð
 49ðið ið ið iðX(.ð (.ð (.ðV.ð .ð .ð$ð $ð $ð $ð $�s”wñ $ô $ð $ð: Ð ð)ð )ð )ð )ð )r/   