
    WdWS                       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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 Z.d Z/d Z0g Z1g Z2d Z3d Z4e3d             Z5e3d             Z6e4d             Z7e4d             Z8e3d             Z9e4d              Z:e4d!             Z;d" Z<e4d#             Z=e4d$             Z>e4d%             Z?d& Z@d' ZAd( ZBd) ZCd* ZDd+ ZEd, ZFd- ZGd. ZHd/ ZId0 ZJd1 ZKd8d2ZLd3 ZMd4 ZN G d5 d6ejO                  ZPdaQd7 ZRdS )9    )annotationsN)	Namespace)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/d01            | d2dd3d4            | d5t           d6d71            | d8dt           t
          d9            | d:dt          t           d;<            | d=dt          t           d><            | d?dd@dAdBC            | dDddEdAdFC            | dGt           dHdI1            | dJt           dg dKdLM            | dNt           dOP            | 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    a/var/www/html/t/fyr/venv311/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 )zConfigure required state for a follower.

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

    r   	provisionN)sqlalchemy.testingr1   FOLLOWER_IDENT)follower_identr1   s     r,   configure_followerr5      s$     -,,,,,-Ir.   c                    dS )zStore 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 )zRestore important configuration needed by a follower.

    This invokes in the follower process.

    Hook is currently not used.

    Nr7   r8   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_configrD     sT    +--K	Y$	%	%s9z+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_configurerA   )optfns     r,   	pre_beginrI     s7     G ! !
7K    ! !r.   c                    | t           _        d S N)r   has_coverage)values    r,   set_coverage_flagrN     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)configr1   )utilN)post_configurer   rA   
sqlalchemyrQ   r2   rR   rS   rT   rU   rV   rW   rX   r1   rY   setup_filtersrH   s    r,   
post_beginr^   #  s      ! !
7K    
 #"""""@@@@@@@@@@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_strrM   parsers      r,   r$   r$   5  s        9%  ))',77777			(	#	# 9%  ))'-888889 9r.   c            	         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   )printsortedrA   r   getsysexit)argsmacros     r,   r%   r%   B  sv    	
<===++D1122 B BEEEE;??4#?#?#?@AAAAHQKKKKKr.   c                $    t          |           d S rK   )_setup_requirementsrg   s      r,   r(   r(   I  s    r.   c                      fd}|S )Nc                *    t          | |           d S rK   )r)   rh   rM   ri   tags      r,   _do_include_tagz)_set_tag_include.<locals>._do_include_tagN      Wc6*****r.   r7   )rx   ry   s   ` r,   r&   r&   M  $    + + + + + r.   c                      fd}|S )Nc                *    t          | |           d S rK   )r*   rw   s      r,   _do_exclude_tagz)_set_tag_exclude.<locals>._do_exclude_tagU  rz   r.   r7   )rx   r~   s   ` r,   r'   r'   T  r{   r.   c                b    t                               |                    dd                     d S N-_)exclude_tagsaddreplacerg   s      r,   r*   r*   [  *    U]]3,,-----r.   c                b    t                               |                    dd                     d S r   )include_tagsr   r   rg   s      r,   r)   r)   _  r   r.   c                :    t                               |            | S rK   )rF   r   r]   s    r,   prer   g  s    Ir.   c                :    t                               |            | S rK   )rZ   r   r]   s    r,   postr   l  s    "Ir.   c                
    | a d S rK   r   rG   rA   s     r,   _setup_optionsr   q  s     GGGr.   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)rG   rA   r   s      r,    _register_sqlite_numeric_dialectr   w  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environrn   sqlalchemy.utilr   ImportErrorAssertionError)rG   rA   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   rX   )r2   rX   _fixture_fn_class_fixture_functions)r   rA   rX   s      r,   _init_symbolsr     s(    )))))) 1 3 3F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} | 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|                     Um|s)|                    |                    dd                     d |_        t          |                    ||                    }	|	D ]}
t"                              d	|
           | j        rh|j        rat+          | j        d
          5 }|                    |j         d|
                    d           d           d d d            n# 1 swxY w Y   |                    |
| ||j                  }|j        s|                    ||           d S )Nr   rP   r   r0   z[,\s]+r   z:Unknown URI specifier '%s'.  Specify --dbs for known uris.r   zAdding database URL: %sa F)hide_password
)r[   rQ   r2   rX   r1   r   listr   r   resplitr   RuntimeErrorr   rn   _currentgenerate_db_urlsloginfor   r3   openwriterender_as_stringsetup_configset_as_current)r   rA   rQ   rX   r1   db_urlsextra_driversdb_tokenr   expanded_urlsdb_urlfile_cfgs                r,   _engine_urir     s   """""")))))),,,,,,} w}%%$*Mz 	>
 	> 	>Hhy(33 > >[006666&8:<=  
 NN;??4#<#<====>  9{tY77888FO33G]KKLLM - -*F333 	I$< 	g*C00 E / H H..U.CCH H H                 $$G[)*B
 
  	-sG,,,- -s   5FF	F	c                P    |                     dd          }t          |           d S )Nsqla_testingrequirement_cls)rn   rt   )r   rA   r   s      r,   _requirementsr     s*    !oon6GHHO(((((r.   c                B   ddl m} ddlm} |j        d S |                     d          \  }}t          |          }|                    d          dd          D ]}t          ||          }t          ||          } |            x|_        |_        t          |_	        d S )Nr   r   rP   :.   )
r2   rX   r[   rQ   requirementsr   
__import__getattrrequiresbootstrapped_as_sqlalchemy)argumentrX   rQ   modnameclsnamemod	componentreq_clss           r,   rt   rt     s    ))))))""""""&~~c**GW W

C]]3''+ & &	c9%%c7##G-4WYY6F'*(BF%%%r.   c                    ddl m} | j        r=ddl m} |j                                        D ]}|                    ||j                   d S d S )Nr   r   r0   )r2   rX   r   r1   Configall_configsdrop_all_schema_objectsr   )r   rA   rX   r1   r   s        r,   _prep_testing_databaser     s}    )))))) ;000000=,,.. 	; 	;C--c36::::	; ;	; 	;r.   c                8    ddl m} t          |_        ||_        d S r   )r2   rX   r   rA   )rG   rA   rX   s      r,   _post_setup_optionsr     s)    ))))))FN$Fr.   c                    ddl m} |                    |                    dd          | j        | j                  |_        d S )Nr   )rW   r   profile_file)sortdump)r2   rW   ProfileStatsFilern   r   r   _profile_stats)r   rA   rW   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)
issubclassrR   TestBase
startswith)nameclss     r,   
want_classr     s:    c8,-- u			 utr.   c                P    |j                             d          sdS |j        dS dS )Ntest_FT)__name__r   
__module__)r   rH   s     r,   want_methodr     s1    ;!!'** u		utr.   c              #  2  K   d|v sd|v rd|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 sCH==JJ77J!lllJJ7D&/sKK F
 FD&)))LLLL!	 	$ 					r.   c                B    t          |            t          |            d S rK   )	_do_skips_setup_enginer   s    r,   !start_test_class_outside_fixturesr
  5  s!    cNNN#r.   c                v    t                               |            t          j                                         d S rK   )rR   stop_test_class_inside_fixturesrS   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rK   )rS   r   stop_test_class_outside_fixturesr1   rX   r   r   r   rU   global_cleanup_assertions_restore_enginer	  s    r,   r  r  C  sw    ;;===..vvy#FFF& 	300222s   %B   Bc                 j    t           j        r&t           j                            t                     d S d S rK   )rX   r   resetrQ   r7   r.   r,   r  r  M  s2     'g&&&&&' 'r.   c                     t           j                                         t                                           t                       d S rK   )rS   r  final_cleanuprU   r  r  r7   r.   r,   final_process_cleanupr  R  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  rS   testing_enginerX   r   push_enginerQ   )r   optsengs      r,   r  r  X  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   rW   _start_current_test)testtest_module_name
test_class	test_namer   id_s         r,   before_testr(  `  sK     :2J4GHHD((($$$		
:C!!#&&&&&r.   c                t    t                                            t          j                                         d S rK   )rR   
after_testrS   r  r#  s    r,   r*  r*  k  s/    %%'''''r.   c                D    t           j                            |            d S rK   )rS   r  after_test_outside_fixturesr+  s    r,   after_test_fixturesr.  p  s    66t<<<<<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Xbt          | d          rt                      }
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 rK   )r   r   driverdialectserver_version_info)r   s    r,   <lambda>z+_possible_configs_for_cls.<locals>.<lambda>  s!    FKFMFN6! r.   )key)setrX   r   r   __unsupported_on__rT   db_specr   remover   rY   to_listr0  intersection_updater   hasattrr   r1  matching_config_reasonsextendr2  enabled_for_configr   
differencedifference_updatereversedrm   r   r   values)r   reasonsr   r   spec
config_objr   requirementcheckskip_reasonsnon_preferredper_dialectr   r   s                 r,   r   r   t  s   fm//1122K
 /!3#9:{++ 	/ 	/JtJ /"":...sM4(( /!4<<#@#@A{++ 	/ 	/J4
## /"":...s($// B'')?(@AAAsN## *{++ 		 		J"/  k::$<<ZHH &&z222*|444E	 s)** 
9*{++ 	2 	2J"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                              |           nt          | d	          rt                      }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 )rQ  (r   c              3  4   K   | ]}t          |          V  d S rK   )r#   ).0digs     r,   	<genexpr>z&_do_skips.<locals>.<genexpr>.<genexpr>  s<         C     r.   z)+N)r   r   joinrT   _server_versionr4  )rU  rI  s     r,   rW  z_do_skips.<locals>.<genexpr>  s         J M&&&HH  #-#=#=jm#L#L       M(((     r.   __prefer_backends__)r   r   rX   	skip_testr   r   rX  r   r   r?  r9  rT   r;  rY   r=  rZ  r   rC  rD  r   _setup_configpop)r   rG  r   cmsgrM  rH  rI  s           r,   r  r    s   G+C99KsM5)) m,, 	 	Aqss    ,/LLL!**E    9 9NNNLLLII   #)-";";"="=      IIg
" 		+	,	, 9!4<<0G#H#HI% 	. 	.J4
## .!!*---!!-00 	9))-888k))koo''----- *)r.   c                P    t           j                            | t                     d S rK   )rX   r   pushrQ   )rI  ctxs     r,   r\  r\    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                      rK   NotImplementedErrorselfargkws      r,   skip_test_exceptionz$FixtureFunctions.skip_test_exception      !###r.   c                    t                      rK   rf  ri  rq   rk  s      r,   combinationszFixtureFunctions.combinations  rm  r.   c                    t                      rK   rf  ro  s      r,   param_identzFixtureFunctions.param_ident  rm  r.   c                    t                      rK   rf  rh  s      r,   fixturezFixtureFunctions.fixture  rm  r.   c                    t                      rK   rf  ri  s    r,   get_current_test_namez&FixtureFunctions.get_current_test_name  s    !###r.   returnr   c                    t                      rK   rf  rv  s    r,   mark_base_test_classz%FixtureFunctions.mark_base_test_class  rm  r.   c                    t                      rK   rf  rv  s    r,   add_to_markerzFixtureFunctions.add_to_marker  rm  r.   N)rx  r   )r   r   __qualname__abcabstractmethodrl  rp  rr  rt  rw  rz  abstractpropertyr|  r7   r.   r,   rd  rd    s        $ $ $ 	$ $ $ 	$ $ $ 	$ $ $$ $ $ 	$ $ $ $ 	$ $ $ $ $r.   rd  c                
    | a d S rK   )r   )fixture_fn_classs    r,   set_fixture_functionsr    s    (r.   r   )S
__future__r   r~  argparser   r?   r`   r   r   ro   typingr   r2   r   r   rc   r   rR   rS   rT   rV   rW   r1   rU   r   rX   rQ   rY   rA   r9  r   r   r   __annotations__r-   r5   r:   r=   rD   rI   rN   r^   r$   r%   r(   r&   r'   r*   r)   rF   rZ   r   r   r   r   r   r   r   r   r   rt   r   r   r   r   r   r  r
  r  r  r  r  r  r(  r*  r.  r   r  r\  ABCrd  r   r  r7   r.   r,   <module>r     sx   # " " " " " " 



            				 				 



       & & & & & & # 899 

		
	

suusuu    r r rj	. 	. 	.      ! ! !! ! !  $
9 
9 
9        . . .. . .   
  
   
    
 
 
 4 4 4 ' ' '
 ,- ,- ,-^ ) ) )
C C C* ; ; ; % % %         0  
= = =  ' ' '
  2 2 2' ' '( ( (
= = =? ? ? ?D(. (. (.V. . .$ $ $ $ $sw $ $ $:  ) ) ) ) )r.   