
    -hP4                     `   S SK Jr  S SKrS SKrS SKrS SKrSSKJr  SSKJ	r	  SSKJ
r
  SSKJr  SS	KJr  SS
KJr   " S S\5      r\" 5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       rSS jr " S S\5      rSS jr      SS jrSS jr " S S\5      r " S S\5      r\\4S jrg)    )absolute_importN   )config)	decorator)
gc_collect   )event)pool)
await_onlyc                   z    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)ConnectionKiller   c                     [         R                  " 5       U l        [        R                  " [
        5      U l        [        5       U l        g N)weakrefWeakKeyDictionary
proxy_refscollectionsdefaultdictsettesting_enginesdbapi_connectionsselfs    oC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/testing/engines.py__init__ConnectionKiller.__init__   s/    !335*66s;!$    c                    [         R                  " USU R                  5        [         R                  " USU R                  5        [         R                  " USU R                  5        [         R                  " USU R                  5        g )Ncheckoutcheckincloseclose_detached)r	   listen	_add_conn_remove_conn)r   r
   s     r   add_poolConnectionKiller.add_pool   sY    T:t~~6T9d&7&78T7D$5$56T+T->->?r   c                 X    U R                   R                  U5        SU R                  U'   g )NT)r   addr   )r   	dbapi_con
con_record	con_proxys       r   r%   ConnectionKiller._add_conn%   s$    ""9-%)	"r   c                 :    U R                   R                  U5        g r   )r   discard)r   
dbapi_connargs      r   r&   ConnectionKiller._remove_conn)   s    &&z2r   c                     U R                  UR                  5        US;   d   eU R                  U   R                  U5        g )N)classglobalfunctionfixture)r'   r
   r   r*   )r   enginescopes      r   
add_engineConnectionKiller.add_engine,   s:    fkk"BBBBU#''/r   c                 t     U" 5         g ! [          a#  n[        R                  " SU-  5         S nAg S nAff = f)Nz5testing_reaper couldn't rollback/close connection: %s	Exceptionwarningswarnr   fnes      r   _safeConnectionKiller._safe2   s5    	D 	MMG!K 	   
 
727c                     [        U R                  5       H6  nUc  M  UR                  (       d  M  U R                  UR                  5        M8     g r   )listr   is_validrE   rollbackr   recs     r   rollback_allConnectionKiller.rollback_all:   s2    (C3<<<

3<<( )r   c                 |   [        U R                  5       H[  nUc  M  UR                  (       d  M  U R                  R	                  UR
                  5        U R                  UR                  5        M]     U R                   H  nU R                  UR                  5        M      U R                  R                  5         g r   )
rI   r   rJ   r   r0   dbapi_connectionrE   _checkinrK   clear)r   rM   cons      r   checkin_allConnectionKiller.checkin_all?   s     (C3<<<&&..s/C/CD

3<<( ) ))CJJs||$ *$$&r   c                 $    U R                  5         g r   )rU   r   s    r   	close_allConnectionKiller.close_allN   s    r   c                     [         R                  (       d  g SSKJn  UR	                  UR
                  R                  U5        g Nr   )	provision)r   bootstrapped_as_sqlalchemy r\   prepare_for_drop_tablesr9   url)r   
connectionr\   s      r   r_   (ConnectionKiller.prepare_for_drop_tablesQ   s-    00))**;*;*?*?Lr   c                    U R                   U   n[        U5       H  n[        U R                  5       H`  nUc  M  UR                  (       d  M  UR                  c  M*  UR                  UR
                  L d  ME  U R                  UR                  5        Mb     [        US5      (       a  [        UR                  5       5        M  UR                  5         M     UR                  5         g )Nsync_engine)r   rI   r   rJ   _poolr
   rE   rR   hasattrr   disposerS   )r   r:   engrM   	proxy_refs        r   _drop_testing_engines&ConnectionKiller._drop_testing_enginesZ   s    ""5)9C!$//2	(Y-?-?-?!3%OOsxx7

9#5#56 3 sM**3;;=)  			r   c                 &    U R                  S5        g )Nr7   )rj   r   s    r   
after_testConnectionKiller.after_testj   s    "":.r   c                 P   [         R                  (       d  g UR                  R                  (       a  g U R	                  5         SSKJn  [         R                  R                  5        nUR                  UR                  R                  U5        S S S 5        g ! , (       d  f       g = fr[   )r   r]   	__class__"__leave_connections_for_teardown__rU   r^   r\   dbconnectr_   r9   r`   )r   testr\   conns       r   after_test_outside_fixtures,ConnectionKiller.after_test_outside_fixturesm   se    00>><<
 	 YY D--dkkootD !  s   ''B
B%c                 h    U R                  5         U R                  S5        U R                  S5        g )Nr7   r5   )rU   rj   r   s    r   stop_test_class_inside_fixtures0ConnectionKiller.stop_test_class_inside_fixtures   s*    "":.""7+r   c                 B   [         R                  R                  (       a  [        5         [         R                  R                  (       aV  [	        [         R                  R                  5      n[         R                  R                  R                  5           SU-  5       eg g )Nz/%d connection recs not cleared after test suite)r
   base_strong_ref_connection_recordsr   lenrS   )r   lns     r    stop_test_class_outside_fixtures1ConnectionKiller.stop_test_class_outside_fixtures   sq     9933Lyy77AAB		88>>@LDKL	 8 4r   c                 l    U R                  5         U R                   H  nU R                  U5        M     g r   )rU   r   rj   )r   r:   s     r   final_cleanupConnectionKiller.final_cleanup   s,    ))E&&u- *r   c                 P    U R                    H  nUR                  (       d  M   e   g r   )r   rJ   rL   s     r   assert_all_closed"ConnectionKiller.assert_all_closed   s    ??C|||u #r   )r   r   r   N)__name__
__module____qualname____firstlineno__r   r'   r%   r&   r;   rE   rN   rU   rX   r_   rj   rm   rv   ry   r   r   r   __static_attributes__ r   r   r   r      s[    '
@*30)
'M /E$,
L.
r   r   c                 p     U " U0 UD6  [         R                  5         g ! [         R                  5         f = fr   )testing_reaperr   rC   argskws      r   assert_conns_closedr      s+    +
DB((*((*    5c                 p     U " U0 UD6  [         R                  5         g! [         R                  5         f = f)zBDecorator that rolls back all open connections after fn execution.N)r   rN   r   s      r   rollback_open_connectionsr      s+    &
DB##%##%r   c                 <    [         R                  5         U " U0 UD6  g)z:Decorator that closes all connections before fn execution.Nr   rU   r   s      r   close_firstr      s      OOr   c                 p     U " U0 UD6  [         R                  5         g! [         R                  5         f = f)z9Decorator that closes all connections after fn execution.Nr   r   s      r   close_open_connectionsr      s+    %
DB""$""$r   c              #      #    SS K Jn  UR                   HX  nU (       a  X ;   a  M  [        XS 5      nU(       d"  [        [	        SU-  5      R                  U5      nUR                  5       v   MZ     g 7f)Nr   zsqlalchemy.dialects.%s)sqlalchemy.dialectsdialects__all__getattr
__import__dialect)excludednamemods       r   all_dialectsr      s]     #		tat$3d:;DDdC kkm s   A0A2c                   <    \ rS rSrS rS rS rS rS
S jrS r	Sr
g	)ReconnectFixture   c                 ,    Xl         / U l        SU l        g NF)dbapiconnections
is_stopped)r   r   s     r   r   ReconnectFixture.__init__   s    
r   c                 .    [        U R                  U5      $ r   )r   r   r   keys     r   __getattr__ReconnectFixture.__getattr__   s    tzz3''r   c                    U R                   R                  " U0 UD6nU R                  (       aC  U R                  UR                  5        UR                  5       nUR                  S5         S5       eU R                  R                  U5        U$ )Nzselect 1z%simulated connect failure didn't work)	r   rs   r   rE   r"   cursorexecuter   append)r   r   kwargsru   curss        r   rs   ReconnectFixture.connect   so    zz!!4262??JJtzz";;=D LL$AAA5##D)Kr   c                 t     U" 5         g ! [          a#  n[        R                  " SU-  5         S nAg S nAff = f)Nz.ReconnectFixture couldn't close connection: %sr>   rB   s      r   rE   ReconnectFixture._safe   s4    	PD 	PMMJQNOO	PrG   c                     Xl         [        U R                  5       H  nU R                  UR                  5        M      / U l        g r   )r   rI   r   rE   r"   )r   stopcs      r   shutdownReconnectFixture.shutdown   s6     d&&'AJJqww (r   c                     SU l         g r   )r   r   s    r   restartReconnectFixture.restart   s	    r   )r   r   r   N)F)r   r   r   r   r   r   rs   rE   r   r   r   r   r   r   r   r      s!     
(P	 r   r   c                   ^^ U =(       d    [         R                  R                  n [         R                  R                  R                  nU(       d  0 n[        U5      US'   [        X5      mTR                  mUU4S jnTR                  R                  R                  Tl	        TR                  R                  R                  Tl        UTl        T$ )Nmodulec                     > TR                   R                  R                  5         STR                   R                  l        T " 5         g r   )r   r   r   r   )_disposer9   s   r   rg   $reconnecting_engine.<locals>.dispose  s0    %%'*/'
r   )r   rr   r`   r   r   r   testing_enginerg   r   test_shutdownr   test_restart)r`   optionsr   rg   r   r9   s       @@r   reconnecting_enginer      s    

CII##E(/GHC)F~~H
 ">>//88F ....66FFNMr   c                    U(       a  U(       a   eSSK Jn  OMU(       d9  [        R                  (       a+  [        R                  R                  (       a  USLa  SSKJn  OSSKJn  SSKJ	n  U(       d  SnSn	Sn
O6UR                  SS5      nUR                  S	S5      n	UR                  S
S5      n
U =(       d    [        R                  R                  n U" U 5      n UcW  [        R                  b2  U R                  [        R                  R                  R                  :X  a  [        R                  nOu0 nOr[        R                  ba  U R                  [        R                  R                  R                  :X  a/  [        R                  R                  5       nUR                  U5        U" U 40 UD6nU
(       aJ  UR                   S:X  a:  ["        R$                  " US5      S 5       n["        R$                  " US5      S 5       nU(       au  SSKJn  [        R                  b^  [+        [        R                  R,                  U5      (       a5  SnUR,                  R/                  [        R                  R,                  5        U	S:X  a   U(       a  SUR0                  l        OSUl        [+        UR,                  [,        R4                  5      (       a"  SUR,                  l        SUR,                  l        U(       a  [:        R=                  X5        U$ )zBProduce an engine configured by --options with optional overrides.r   )create_async_engineF)create_engine)make_urlTr7   
use_reaperr:   sqlite_savepointsqliters   c                     S U l         g r   )isolation_level)rQ   connection_records     r   
do_connect"testing_engine.<locals>.do_connectA  s    /3,r   beginc                 &    U R                  S5        g )NBEGIN)exec_driver_sqlru   s    r   do_begin testing_engine.<locals>.do_beginE  s      )r   )
StaticPoolr6   )sqlalchemy.ext.asyncior   r   rr   
_is_futuresqlalchemy.futurer   
sqlalchemysqlalchemy.engine.urlr   popr`   
drivernamedb_optscopyupdater   r	   listens_forsqlalchemy.poolr   
isinstancer
   _transfer_fromrd   _has_events	QueuePool_timeout_max_overflowr   r;   )r`   r   futureasynciotransfer_staticpool_sqlite_savepointr   r   r   r:   r   default_optr9   r   r   r   s                   r   r   r     s#    $$$	
 
		fii**vU/B3,.
 [[t4
GZ0";;'95A

C
3-C99&))--2J2J JnnGG		3>>VYY]]5M5M#Mnn))+7#3*'*FFKK83			69	-	4 
.	4 
		67	+	* 
,	* .99 Z		
%K%KJKK&&vyy~~6-1F*   &++t~~.. $%!!!&0Mr   c                    ^^ SSK Jn  U (       d  [        R                  R                  n / mU4S jnU4S jnU4S jnU" U S-   U5      m[        TS5      (       a   eTTl        UTl        UTl        T$ )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                 (   > TR                  U 5        g r   )r   )sqlar   buffers      r   executormock_engine.<locals>.executort  s    cr   c           
         > T Vs/ s H$  n[         R                  " SS[        U5      5      PM&     nnX :X  d   U5       eg s  snf )Nz[\n\t]r^   )resubstr)stmtssrecvr  s      r   
assert_sqlmock_engine.<locals>.assert_sqlw  s<    7=>v!y"c!f-v>}"d"} ?s   +A c                  h   >^  TR                   m SR                  U 4S jTR                   5       5      $ )N
c              3   T   >#    U  H  n[        UR                  TS 95      v   M     g7f))r   N)r  compile).0r	  r   s     r   	<genexpr>1mock_engine.<locals>.print_sql.<locals>.<genexpr>}  s$     HKqQYYqY122Ks   %()r   joinmock)r   r9   s   @r   	print_sqlmock_engine.<locals>.print_sql{  s%    NNyyHFKKHHHr   z://r  )	r   r   r   rr   r   rf   r  r  r  )dialect_namer   r  r  r  r  r9   s        @@r   mock_enginer  a  so     .yy~~F#I  u 4h?Fvv&&&&FK"F FMr   c                   :    \ rS rSrSrS rS
S jrS rS rS r	S	r
g)DBAPIProxyCursori  ziProxy a DBAPI cursor.

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

c                 J    Xl         X l        UR                  " U0 UD6U l        g r   )r9   ra   r   )r   r9   ru   r   r   s        r   r   DBAPIProxyCursor.__init__  s!    kk4262r   Nc                     U(       a  U R                   R                  " X40 UD6$ U R                   R                  " U40 UD6$ r   )r   r   )r   stmt
parametersr   s       r   r   DBAPIProxyCursor.execute  s9    ;;&&t>2>>;;&&t2r22r   c                 <    U R                   R                  " X40 UD6$ r   )r   executemany)r   r  paramsr   s       r   r#  DBAPIProxyCursor.executemany  s    {{&&t:r::r   c                 ,    [        U R                  5      $ r   )iterr   r   s    r   __iter__DBAPIProxyCursor.__iter__  s    DKK  r   c                 .    [        U R                  U5      $ r   )r   r   r   s     r   r   DBAPIProxyCursor.__getattr__  s    t{{C((r   )ra   r   r9   r   )r   r   r   r   __doc__r   r   r#  r(  r   r   r   r   r   r  r    s     3
3;!)r   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)	DBAPIProxyConnectioni  zqProxy a DBAPI connection.

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

c                 Z    UR                   R                  5       U l        Xl        X l        g r   )r
   _creatorru   r9   
cursor_cls)r   r9   r1  s      r   r   DBAPIProxyConnection.__init__  s     KK((*	$r   c                 X    U R                   " U R                  U R                  /UQ70 UD6$ r   )r1  r9   ru   )r   r   r   s      r   r   DBAPIProxyConnection.cursor  s%    t{{DIIGGGGr   c                 8    U R                   R                  5         g r   )ru   r"   r   s    r   r"   DBAPIProxyConnection.close  s    		r   c                 .    [        U R                  U5      $ r   )r   ru   r   s     r   r    DBAPIProxyConnection.__getattr__  s    tyy#&&r   )ru   r1  r9   N)
r   r   r   r   r,  r   r   r"   r   r   r   r   r   r.  r.    s    %
H'r   r.  c                 2   ^ ^ U U4S jnS n[        UUS.S9$ )zAProduce an engine that provides proxy hooks for
common methods.

c                  2   > T " [         R                  T5      $ r   )r   rr   )conn_clsr1  s   r   	mock_conn"proxying_engine.<locals>.mock_conn  s    		:..r   c                    ^  U 4S jnU$ )Nc                 (   > T" U R                   5      $ r   r   )r1   do_on_connects    r   go8proxying_engine.<locals>._wrap_do_on_connect.<locals>.go  s     11r   r   )r@  rA  s   ` r   _wrap_do_on_connect,proxying_engine.<locals>._wrap_do_on_connect  s    	2 	r   )creatorrC  )r   )r   )r;  r1  r<  rC  s   ``  r   proxying_enginerF    s'    /  #6
 r   r   )NN)NNNFFF)
__future__r   r   r  r@   r   r^   r   utilr   r   r	   r
   r   objectr   r   r   r   r   r   r   r   r   r   r  r  r.  rF  r   r   r   <module>rJ     s    '  	        Bv BJ "# + + & &   % %) v ) X* 	M`#L)v ):'6 '0 ".>r   