
    XeIiK5                    @   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dlm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d
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ej        rddlmZ ddlmZ ddlmZ  G d d          Z e            Zed             Zed             Zed             Z ed             Z!d4dZ" G d d          Z#d5dZ$ej%        	 	 d6d7d&            Z&ej%        	 	 d6d8d)            Z&	 	 d5d*d+d9d.Z&d4d/Z' G d0 d1          Z( G d2 d3          Z)dS ):    )annotationsN)Any)Dict)Optional)Union   )config)	decorator)
gc_collect   )event)pool)
await_only)Literal)Engine)URL)AsyncEnginec                  z    e 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 Zd Zd Zd Zd Zd ZdS )ConnectionKillerc                    t          j                    | _        t          j        t
                    | _        t                      | _        d S N)weakrefWeakKeyDictionary
proxy_refscollectionsdefaultdictsettesting_enginesdbapi_connectionsselfs    _/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/sqlalchemy/testing/engines.py__init__zConnectionKiller.__init__&   s7    !355*6s;;!$    c                    t          j        |d| j                   t          j        |d| j                   t          j        |d| j                   t          j        |d| j                   d S )Ncheckoutcheckincloseclose_detached)r   listen	_add_conn_remove_conn)r!   r   s     r"   add_poolzConnectionKiller.add_pool+   sd    T:t~666T9d&7888T7D$5666T+T->?????r$   c                N    | j                             |           d| j        |<   d S )NT)r   addr   )r!   	dbapi_con
con_record	con_proxys       r"   r+   zConnectionKiller._add_conn3   s+    ""9---%)	"""r$   c                :    | j                             |           d S r   )r   discard)r!   
dbapi_connargs      r"   r,   zConnectionKiller._remove_conn7   s    &&z22222r$   c                    |                      |j                   |dv sJ | j        |                             |           d S )N)classglobalfunctionfixture)r-   r   r   r/   )r!   enginescopes      r"   
add_enginezConnectionKiller.add_engine:   sJ    fk"""BBBBBU#''/////r$   c                z    	  |             d S # t           $ r"}t          j        d|z             Y d }~d S d }~ww xY w)Nz5testing_reaper couldn't rollback/close connection: %s	Exceptionwarningswarnr!   fnes      r"   _safezConnectionKiller._safe@   so    	BDDDDD 	 	 	MG!K        	   
 
:5:c                z    t          | j                  D ]%}|!|j        r|                     |j                   &d S r   )listr   is_validrG   rollbackr!   recs     r"   rollback_allzConnectionKiller.rollback_allH   sE    (( 	) 	)C3<

3<(((	) 	)r$   c                2   t          | j                  D ]D}|@|j        r9| j                            |j                   |                     |j                   E| j        D ]}|                     |j                   | j        	                                 d S r   )
rJ   r   rK   r   r4   dbapi_connectionrG   _checkinrL   clear)r!   rN   cons      r"   checkin_allzConnectionKiller.checkin_allM   s     (( 	) 	)C3<&..s/CDDD

3<((( ) 	% 	%CJJs|$$$$$$&&&&&r$   c                .    |                                   d S r   )rU   r    s    r"   	close_allzConnectionKiller.close_all\   s    r$   c                n    t           j        sd S ddlm} |                    |j        j        |           d S Nr   	provision)r	   bootstrapped_as_sqlalchemy r[   prepare_for_drop_tablesr<   url)r!   
connectionr[   s      r"   r^   z(ConnectionKiller.prepare_for_drop_tables_   sF    0 	F))**;*?LLLLLr$   c                   | j         |         }t          |          D ]}t          | j                  D ]:}|6|j        r/|j        (|j        |j        u r|                     |j                   ;t          |d          r"t          |
                                           |
                                 |                                 d S Nsync_engine)r   rJ   r   rK   _poolr   rG   rR   hasattrr   disposerS   )r!   r=   engrN   	proxy_refs        r"   _drop_testing_enginesz&ConnectionKiller._drop_testing_enginesh   s    "5)99 	 	C!$/22 7 7	(Y-?(!3%Osx77

9#5666sM** 3;;==))))		r$   c                    | j         |         }t          |          D ]H}t          |d          r"t          |                                           4|                                 Id S rb   )r   rJ   re   r   rf   )r!   r=   rg   rN   s       r"   _dispose_testing_enginesz)ConnectionKiller._dispose_testing_enginesz   sh    "5)99 	 	CsM** 3;;==))))		 	r$   c                0    |                      d           d S )Nr:   )ri   r    s    r"   
after_testzConnectionKiller.after_test   s    "":.....r$   c                    t           j        sd S |j        j        rd S |                                  ddlm} t           j                                        5 }|	                    |j
        j        |           d d d            d S # 1 swxY w Y   d S rY   )r	   r\   	__class__"__leave_connections_for_teardown__rU   r]   r[   dbconnectr^   r<   r_   )r!   testr[   conns       r"   after_test_outside_fixturesz,ConnectionKiller.after_test_outside_fixtures   s    0 	F>< 	F
 	 Y   	ED--dkotDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   !BB
Bc                    |                                   |                     d           |                     d           d S )Nr:   r8   )rU   ri   r    s    r"   stop_test_class_inside_fixturesz0ConnectionKiller.stop_test_class_inside_fixtures   sB    "":...""7+++++r$   c                p   t           j        j        rnt                       t           j        j        rOt	          t           j        j                  }t           j        j                                         	 J d|z              t          j        r(t          j        j        r| 	                    d           d S d S d S )NFz/%d connection recs not cleared after test suiter9   )
r   base_strong_ref_connection_recordsr   lenrS   r	   optionslow_connectionsrk   )r!   lns     r"    stop_test_class_outside_fixturesz1ConnectionKiller.stop_test_class_outside_fixtures   s     93 	LLLLy7 LABB	8>>@@@LDKL L L > 	4fn< 	4 ))(33333	4 	4 	4 	4r$   c                l    |                                   | j        D ]}|                     |           d S r   )rU   r   ri   )r!   r=   s     r"   final_cleanupzConnectionKiller.final_cleanup   sG    ) 	. 	.E&&u----	. 	.r$   c                ,    | j         D ]}|j        rJ d S r   )r   rK   rM   s     r"   assert_all_closedz"ConnectionKiller.assert_all_closed   s1    ? 	 	C| 	 	r$   N)__name__
__module____qualname__r#   r-   r+   r,   r>   rG   rO   rU   rW   r^   ri   rk   rm   ru   rw   r   r   r    r$   r"   r   r   %   s+       ' ' '
@ @ @* * *3 3 30 0 0  ) ) )
' ' '  M M M  $  / / /E E E$, , ,
4 4 4". . .
    r$   r   c                    	  | |i | t                                            d S # t                                            w xY wr   )testing_reaperr   rE   argskws      r"   assert_conns_closedr      sH    +
DB((*****((****	   % A c                    	  | |i | t                                            dS # t                                            w xY w)zBDecorator that rolls back all open connections after fn execution.N)r   rO   r   s      r"   rollback_open_connectionsr      sH    &
DB##%%%%%##%%%%r   c                H    t                                             | |i | dS )z:Decorator that closes all connections before fn execution.Nr   rU   r   s      r"   close_firstr      s+        BOOOOOOr$   c                    	  | |i | t                                            dS # t                                            w xY w)z9Decorator that closes all connections after fn execution.Nr   r   s      r"   close_open_connectionsr      sH    %
DB""$$$$$""$$$$r   c              #     K   dd l m} |j        D ]W}| r|| v r	t          ||d           }|s%t          t	          d|z            j        |          }|                                V  Xd S )Nr   zsqlalchemy.dialects.%s)sqlalchemy.dialectsdialects__all__getattr
__import__dialect)excludednamemods       r"   all_dialectsr      s      ######	 	 	 	twat$$ 	3d:;;Dd C kkmm	 	r$   c                  4    e Zd Zd Zd Zd Zd Zd	dZd ZdS )
ReconnectFixturec                0    || _         g | _        d| _        d S NF)dbapiconnections
is_stopped)r!   r   s     r"   r#   zReconnectFixture.__init__   s    
r$   c                ,    t          | j        |          S r   )r   r   r!   keys     r"   __getattr__zReconnectFixture.__getattr__   s    tz3'''r$   c                    | j         j        |i |}| j        rM|                     |j                   |                                }|                    d           J d            | j                            |           |S )Nzselect 1Fz%simulated connect failure didn't work)	r   rr   r   rG   r(   cursorexecuter   append)r!   r   kwargsrt   curss        r"   rr   zReconnectFixture.connect   s    !tz!42622? 		JJtz""";;==D LL$$$AAAAA##D)))Kr$   c                z    	  |             d S # t           $ r"}t          j        d|z             Y d }~d S d }~ww xY w)Nz.ReconnectFixture couldn't close connection: %sr@   rD   s      r"   rG   zReconnectFixture._safe  sb    	PBDDDDD 	P 	P 	PMJQNOOOOOOOOO	PrH   Fc                    || _         t          | j                  D ]}|                     |j                   g | _        d S r   )r   rJ   r   rG   r(   )r!   stopcs      r"   shutdownzReconnectFixture.shutdown	  sJ     d&'' 	  	 AJJqwr$   c                    d| _         d S r   )r   r    s    r"   restartzReconnectFixture.restart  s    r$   N)F)	r   r   r   r#   r   rr   rG   r   r   r   r$   r"   r   r      sv             
( ( (  P P P	 	 	 	         r$   r   c                (   | pt           j        j        } t           j        j        j        }|si }t          |          |d<   t          | |          j        fd}j        j        j        _	        j        j        j
        _        |_        S )Nmodulec                 z    j         j                                         dj         j        _                       d S r   )r   r   r   r   )_disposer<   s   r"   rf   z$reconnecting_engine.<locals>.dispose!  s6    %%'''*/'




r$   )r	   rq   r_   r   r   r   testing_enginerf   r   test_shutdownr   test_restart)r_   r|   r   rf   r   r<   s       @@r"   reconnecting_enginer     s    

CI#E (//GHC))F~H     
 ">/8F ..6FFNMr$   .r_   Optional[URL]r|   Optional[Dict[str, Any]]asyncioLiteral[False]returnr   c                   d S r   r   r_   r|   r   s      r"   r   r   ,  s	     Sr$   Literal[True]r   c                   d S r   r   r   s      r"   r   r   5  s	     #r$   F)r   boolUnion[Engine, AsyncEngine]c                  |rddl m} nddlm} ddlm}  || r| nt          j        j                  } |si }i }t          j	        |fD ]6}|s|
                    d |                                D                        7 || fi |}t          j        r+t          j        j        rt                              d           |                    dd          }|dk    r|rd	|j        _        nd	|_        d
dlm}	 |	                    |j        |||           |                    dd	          }
|
rt                              ||           t/          |j        t0          j                  r$d|vr d|vrd|vrd|j        _        d|j        _        |S )Nr   )create_async_engine)create_engine)make_urlc                L    i | ]!\  }}|d v	|                     d          ||"S ))r=   
use_reapersqlite_)
startswith).0optvalues      r"   
<dictcomp>z"testing_engine.<locals>.<dictcomp>X  sH       C555y11 6 U555r$   r9   r=   r:   Tr   rZ   r   r   pool_timeoutmax_overflow)sqlalchemy.ext.asyncior   
sqlalchemyr   sqlalchemy.engine.urlr   r	   rq   r_   db_optsupdateitemsr|   r}   r   rk   getrc   _has_eventsr]   r[   post_configure_testing_enginer>   
isinstancer   	QueuePool_timeout_max_overflow)r_   r|   r   r   r   use_optionsopt_dictr<   r=   r[   r   s              r"   r   r   >  s"     -	
 	
 	
 	
 	
 	
 	
 	-,,,,,......
(#03369=
1
1C K^W- 

 

 	 "*.."2"2  	
 	
 	
 	
 ]3..+..F~ :&.8 : 	//999KK,,E 	-1F**   ++FJOOO
 \400J 1!!&%000 	6;//&'!!'))')) $%!Mr$   c                    ddl m} | st          j        j        } g fd}fd}fd} || dz   |          t          d          rJ _        |_        |_        S )a'  Provides a mocking engine based on the current testing.db.

    This is normally used to test DDL generation flow as emitted
    by an Engine.

    It should not be used in other cases, as assert_compile() and
    assert_sql_execution() are much better choices with fewer
    moving parts.

    r   )create_mock_enginec                2                         |            d S r   )r   )sqlar   buffers      r"   executorzmock_engine.<locals>.executor  s    cr$   c                @    d D             }|| k    s
J |            d S )Nc           	     T    g | ]%}t          j        d dt          |                    &S )z[\n\t]r]   )resubstr)r   ss     r"   
<listcomp>z3mock_engine.<locals>.assert_sql.<locals>.<listcomp>  s,    >>>!y"c!ff-->>>r$   r   )stmtsrecvr   s     r"   
assert_sqlzmock_engine.<locals>.assert_sql  s-    >>v>>>u}}}d}}}}}r$   c                 `     j          d                     fdj        D                       S )N
c              3  ^   K   | ]'}t          |                                         V  (dS ))r   N)r   compile)r   r   r   s     r"   	<genexpr>z1mock_engine.<locals>.print_sql.<locals>.<genexpr>  s9      HHqQYYqY1122HHHHHHr$   )r   joinmock)r   r<   s   @r"   	print_sqlzmock_engine.<locals>.print_sql  s4    NyyHHHHFKHHHHHHr$   z://r  )	r   r   r	   rq   r   re   r  r   r  )dialect_namer   r   r   r  r   r<   s        @@r"   mock_enginer    s     .----- &y~F    # # # # #I I I I I  u 4h??Fvv&&&&&FK"F FMr$   c                  2    e Zd ZdZd ZddZd Zd Zd ZdS )	DBAPIProxyCursorzuProxy a DBAPI cursor.

    Tests can provide subclasses of this to intercept
    DBAPI-level cursor operations.

    c                F    || _         || _         |j        |i || _        d S r   )r<   r`   r   )r!   r<   rt   r   r   s        r"   r#   zDBAPIProxyCursor.__init__  s,    !dk42622r$   Nc                T    |r | j         j        ||fi |S  | j         j        |fi |S r   )r   r   )r!   stmt
parametersr   s       r"   r   zDBAPIProxyCursor.execute  sF     	3&4;&tZ>>2>>>&4;&t22r222r$   c                *     | j         j        ||fi |S r   )r   executemany)r!   r	  paramsr   s       r"   r  zDBAPIProxyCursor.executemany  s!    &t{&tV::r:::r$   c                *    t          | j                  S r   )iterr   r    s    r"   __iter__zDBAPIProxyCursor.__iter__  s    DK   r$   c                ,    t          | j        |          S r   )r   r   r   s     r"   r   zDBAPIProxyCursor.__getattr__  s    t{C(((r$   r   )	r   r   r   __doc__r#   r   r  r  r   r   r$   r"   r  r    sn         3 3 3
3 3 3 3; ; ;! ! !) ) ) ) )r$   r  c                  *    e Zd ZdZd Zd Zd Zd ZdS )DBAPIProxyConnectionz}Proxy a DBAPI connection.

    Tests can provide subclasses of this to intercept
    DBAPI-level connection operations.

    c                0    || _         || _        || _        d S r   )rt   r<   
cursor_cls)r!   r<   rt   r  s       r"   r#   zDBAPIProxyConnection.__init__  s    	$r$   c                :     | j         | j        | j        g|R i |S r   )r  r<   rt   )r!   r   r   s      r"   r   zDBAPIProxyConnection.cursor  s*    tt{DIGGGGGGGr$   c                8    | j                                          d S r   )rt   r(   r    s    r"   r(   zDBAPIProxyConnection.close  s    	r$   c                ,    t          | j        |          S r   )r   rt   r   s     r"   r   z DBAPIProxyConnection.__getattr__  s    ty#&&&r$   N)r   r   r   r  r#   r   r(   r   r   r$   r"   r  r    s]         % % %
H H H  ' ' ' ' 'r$   r  r   )NN)..)r_   r   r|   r   r   r   r   r   )r_   r   r|   r   r   r   r   r   )r_   r   r|   r   r   r   r   r   )*
__future__r   r   r   typingr   r   r   r   rB   r   r]   r	   utilr
   r   r   r   r   util.typingr   TYPE_CHECKINGr<   r   
engine.urlr   ext.asyncior   r   r   r   r   r   r   r   r   r   overloadr   r  r  r  r   r$   r"   <module>r"     sQ   # " " " " "     				                                                                ! ! ! ! ! ! 
 *      ))))))P P P P P P P Pf "!## + + + & & &    % % %   (  (  (  (  (  (  (  ( V   ( (+     (+     (,F 	F F F F F FR# # # #L) ) ) ) ) ) ) ):' ' ' ' ' ' ' ' ' 'r$   