
    XeIi=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/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    j/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/sqlalchemy/testing/plugin/plugin_base.pysetup_optionsr.   ;   s4   K;    K<    K'    K"(	    KG    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.testingr2   FOLLOWER_IDENT)follower_identr2   s     r-   configure_followerr6      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.

    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$	%	%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_configurerB   )optfns     r-   	pre_beginrJ     s7     G ! !
7K    ! !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      ! !
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_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     	DHJJ	
<===++D1122 B BEEEE;??4#?#?#?@AAAAHQKKKKKr/   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      Wc6*****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     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)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 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} 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 |_        | 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E6v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hy(33 > >[006666&8:<=  
 NN;??4#<#<====>  9{tY77888FO 	 8 EEEEWEEE 	 	Fg*C00 E / H H..U.CCH H H                 33G]KKLLM - -*F333$$G[)*B
 
  	-sG,,,- -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*    !oon6GHHO(((((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**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   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--c36::::	; ;	; 	;r/   c                8    ddl m} t          |_        ||_        d S r   )r3   rY   r   rB   )rH   rB   rY   s      r-   _post_setup_optionsr     s)    ))))))FN$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:    c8,-- 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 rd|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 sCH==JJ77J!lllJJ7D&/sKK F
 FD&)))LLLL%	 	( 					r/   c                B    t          |            t          |            d S rL   )	_do_skips_setup_enginer   s    r-   !start_test_class_outside_fixturesr  @  s!    cNNN#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    ..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 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     :2J4GHHD((($$$		
: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6t<<<<<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          rt          j        }t          |          D ]}| j        D ]}t          ||          }	|	                    |          }
|
r.|                    |           ||                    |
            n>|	                    |          }|r&t          | dd          t+          |          z   | _        t          | d          rt                      }t          j        }t          |          D ]F}| j        D ]<}t          ||          }	|	                    |          s|                    |           =G|                    |          r|                    |           |rOi }t9          t;          |d                     }|D ]}|j        j        }||vr|||<   |                                 S |ri }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:CCsFKFMFN6FN+! 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SK5G5G5G5G5Gr/   )$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    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 22:>> ('.^R( (h((C$ s)** 
9*{++ 	2 	2J"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CCczzc#h9z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                              |           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 )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&&&HH  #-#=#=jm#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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 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 

		
	

suusuu    r r rj	. 	. 	.      ! ! !! ! !  $
9 
9 
9        . . .. . .   
  
   
    
 
 
 4 4 4 ' ' '
 .- .- .-b ) ) )
C C C$ ; ; ; % % %         >  
= = =  ' ' '
  2 2 2' ' '( ( (
= = =
 49i i i iX(. (. (.V. . .$ $ $ $ $sw $ $ $:  ) ) ) ) )r/   