σ
Ώb]c           @@  ss  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 m Z d
 e f d     YZ e   Z d   Z e	 d    Z e	 d    Z e	 d    Z e	 d    Z d d  Z d e f d     YZ d d d  Z d d d  Z d d  Z d e f d     YZ d e f d     YZ e e d  Z d S(   i    (   t   absolute_importNi   (   t   config(   t   uses_deprecated(   t	   decoratori   (   t   event(   t   poolt   ConnectionKillerc           B@  s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z e   d
    Z e   d    Z d   Z RS(   c         C@  s.   t  j   |  _ t  j   |  _ t   |  _ d  S(   N(   t   weakreft   WeakKeyDictionaryt
   proxy_refst   testing_enginest   sett   conns(   t   self(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   __init__   s    c         C@  s   t  |  j | <d  S(   N(   t   TrueR
   (   R   t   engine(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt
   add_engine   s    c         C@  s   |  j  j | | f  d  S(   N(   R   t   add(   R   t
   dbapi_connt
   con_record(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   connect   s    c         C@  s   t  |  j | <d  S(   N(   R   R	   (   R   t	   dbapi_conR   t	   con_proxy(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   checkout!   s    c         C@  s   |  j  j | | f  d  S(   N(   R   t   discard(   R   R   R   t	   exception(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt
   invalidate$   s    c         C@  s6   y |   Wn$ t  k
 r1 } t j d |  n Xd  S(   Ns5   testing_reaper couldn't rollback/close connection: %s(   t	   Exceptiont   warningst   warn(   R   t   fnt   e(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   _safe'   s
    c         C@  sF   x? t  |  j  D]. } | d  k	 r | j r |  j | j  q q Wd  S(   N(   t   listR	   t   Nonet   is_validR!   t   rollback(   R   t   rec(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   rollback_all/   s    c         C@  sF   x? t  |  j  D]. } | d  k	 r | j r |  j | j  q q Wd  S(   N(   R"   R	   R#   R$   R!   t   _close(   R   R&   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt	   close_all4   s    c         C@  sI   xB t  |  j  D]1 \ } } | j d  k r1 q n  |  j | j  q Wd  S(   N(   R"   R   t
   connectionR#   R!   R%   (   R   t   connR&   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   _after_test_ctx9   s    c         C@  s'   t  j j r |  j   n
 |  j   d  S(   N(   R   t   optionst   low_connectionst   _stop_test_ctx_minimalt   _stop_test_ctx_aggressive(   R   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   _stop_test_ctxH   s    c         C@  sP   |  j    t   |  _ x3 t |  j  D]" } | t j k	 r& | j   q& q& Wd  S(   N(   R)   R   R   R"   R
   R   t   dbt   dispose(   R   R&   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR/   N   s
    
c         C@  sw   |  j    x6 t |  j  D]% \ } } |  j | j  d  | _ q Wt   |  _ x! t |  j  D] } | j	   q_ Wd  S(   N(
   R)   R"   R   R!   t   closeR#   R*   R   R
   R3   (   R   R+   R&   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR0   X   s    
c         C@  s0   x) |  j  D] } | j r
 t s( t  q
 q
 Wd  S(   N(   R	   R$   t   Falset   AssertionError(   R   R&   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   assert_all_closedc   s    	(   t   __name__t
   __module__R   R   R   R   R   R!   R'   R)   R,   R1   R   R/   R0   R7   (    (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR      s   										
c         C@  s   t  j   t | d  r& | j   n  t j j j sq d d l m	 } | j
 d d t  |  j |  Wd  QXn |  j |  d  S(   NR4   i   (   t
   assertionss   Can't sort tablest   assert_(   t   testing_reaperR)   t   hasattrR4   R   R2   t   dialectt   supports_altert    R:   t   expect_warningsR5   t   drop_all(   t   metadatat   bindR:   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   drop_all_tablesl   s    
c         O@  s#   z |  | |   Wd  t  j   Xd  S(   N(   R<   R7   (   R   t   argst   kw(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   assert_conns_closedz   s    c         O@  s#   z |  | |   Wd t  j   Xd S(   sB   Decorator that rolls back all open connections after fn execution.N(   R<   R'   (   R   RF   RG   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   rollback_open_connections   s    c         O@  s   t  j   |  | |   d S(   s:   Decorator that closes all connections before fn execution.N(   R<   R)   (   R   RF   RG   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   close_first   s    
c         O@  s#   z |  | |   Wd t  j   Xd S(   s9   Decorator that closes all connections after fn execution.N(   R<   R)   (   R   RF   RG   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   close_open_connections   s    c         c@  s   d d  l  j } xk | j D]` } |  r7 | |  k r7 q n  t | | d   } | sn t t d |  j |  } n  | j   Vq Wd  S(   Ni    s   sqlalchemy.databases.%s(   t   sqlalchemy.databasest	   databasest   __all__t   getattrR#   t
   __import__R>   (   t   excludet   dt   namet   mod(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   all_dialects   s    t   ReconnectFixturec           B@  sA   e  Z d    Z d   Z d   Z d   Z e d  Z d   Z RS(   c         C@  s   | |  _  g  |  _ t |  _ d  S(   N(   t   dbapit   connectionsR5   t
   is_stopped(   R   RW   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   ­   s    		c         C@  s   t  |  j |  S(   N(   RO   RW   (   R   t   key(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   __getattr__²   s    c         O@  st   |  j  j | |   } |  j r\ |  j | j  | j   } | j d  t sp t d   n |  j	 j
 |  | Sd  S(   Ns   select 1s%   simulated connect failure didn't work(   RW   R   RY   R!   R4   t   cursort   executeR5   R6   RX   t   append(   R   RF   t   kwargsR+   t   curs(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   ΅   s    	c         C@  s6   y |   Wn$ t  k
 r1 } t j d |  n Xd  S(   Ns.   ReconnectFixture couldn't close connection: %s(   R   R   R   (   R   R   R    (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR!   Γ   s
    c         C@  s@   | |  _  x' t |  j  D] } |  j | j  q Wg  |  _ d  S(   N(   RY   R"   RX   R!   R4   (   R   t   stopt   c(    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   shutdownΛ   s    	c         C@  s   t  |  _ d  S(   N(   R5   RY   (   R   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   restartΦ   s    (	   R8   R9   R   R[   R   R!   R5   Rc   Rd   (    (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRV   ¬   s   				c         @  s   |  p t  j j }  t  j j j } | s0 i  } n  t |  | d <t |  |    j      f d   }  j j j  _	  j j j
  _ |  _  S(   Nt   modulec           @  s*    j  j j   t  j  j _     d  S(   N(   R>   RW   Rc   R5   RY   (    (   t   _disposeR   (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR3   γ   s    (   R   R2   t   urlR>   RW   RV   t   testing_engineR3   Rc   t   test_shutdownRd   t   test_restart(   Rg   R-   RW   R3   (    (   Rf   R   s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   reconnecting_engineΪ   s    			c         C@  s  d d l  m } d d l m } | s/ t } n | j d t  } |  pP t j j }  | |   }  | d k r§ t j d k s |  j
 t j j j
 k r t j } qν i  } nF t j d k	 rν |  j
 t j j j
 k rν t j j   } | j |  n  | |  |  } t | _ t | j t j  r5d | j _ d | j _ n  | rt j | j d t j  t j | j d t j  t j | j d t j  t j |  n  | S(	   sB   Produce an engine configured by --options with optional overrides.i    (   t   create_engine(   t   make_urlt
   use_reaperR   R   R   N(   t
   sqlalchemyRl   t   sqlalchemy.engine.urlRm   R   t   popR   R2   Rg   R#   t
   drivernamet   db_optst   copyt   updatet   _has_eventst
   isinstanceR   t	   QueuePoolt   _timeoutt   _max_overflowR   t   listenR<   R   R   R   R   (   Rg   R-   Rl   Rm   Rn   t   default_optR   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRh   ξ   s2    	'	'	c         @  s©   d d l  m } |  s% t j j }  n  g      f d   }   f d   }  f d   } | |  d d d d	 |  t  d  s t     _ |  _ |  _	  S(
   s'  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.

    i    (   Rl   c         @  s     j  |   d  S(   N(   R^   (   t   sqlt   aRG   (   t   buffer(    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   executor'  s    c         @  sJ   g    D]! } t  j d d t |   ^ q } | |  k sF t |   d  S(   Ns   [\n\t]R@   (   t   ret   subt   strR6   (   t   stmtst   st   recv(   R   (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt
   assert_sql*  s    .c           @  s)    j    d j   f d    j D  S(   Ns   
c         3@  s'   |  ] } t  | j d      Vq d S(   R>   N(   R   t   compile(   t   .0R   (   RR   (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pys	   <genexpr>0  s    (   R>   t   joint   mock(    (   R   (   RR   s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt	   print_sql.  s    	s   ://t   strategyR   R   (
   Ro   Rl   R   R2   RS   R=   R6   R   R   R   (   t   dialect_nameRl   R   R   R   (    (   R   R   s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   mock_engine  s    			t   DBAPIProxyCursorc           B@  s5   e  Z d  Z d   Z d d  Z d   Z d   Z RS(   su   Proxy a DBAPI cursor.

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

    c         O@  s+   | |  _  | |  _ | j | |   |  _ d  S(   N(   R   R*   R\   (   R   R   R+   RF   R_   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   D  s    		c         K@  s3   | r |  j  j | | |  S|  j  j | |  Sd  S(   N(   R\   R]   (   R   t   stmtt
   parametersRG   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR]   I  s    c         K@  s   |  j  j | | |  S(   N(   R\   t   executemany(   R   R   t   paramsRG   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   O  s    c         C@  s   t  |  j |  S(   N(   RO   R\   (   R   RZ   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR[   R  s    N(   R8   R9   t   __doc__R   R#   R]   R   R[   (    (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   <  s
   		t   DBAPIProxyConnectionc           B@  s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   s}   Proxy a DBAPI connection.

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

    c         C@  s/   | j  j   |  _ |  _ | |  _ | |  _ d  S(   N(   R   t   _creatorR+   t   _sqla_unwrapR   t
   cursor_cls(   R   R   R   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   ^  s    	c         O@  s   |  j  |  j |  j | |  S(   N(   R   R   R+   (   R   RF   R_   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR\   c  s    c         C@  s   |  j  j   d  S(   N(   R+   R4   (   R   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR4   f  s    c         C@  s   t  |  j |  S(   N(   RO   R+   (   R   RZ   (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR[   i  s    (   R8   R9   R   R   R\   R4   R[   (    (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   V  s
   			c         @  s&      f d   } t  d i | d 6 S(   sI   Produce an engine that provides proxy hooks for
    common methods.

    c           @  s     t  j   S(   N(   R   R2   (    (   t   conn_clsR   (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt	   mock_connu  s    R-   t   creator(   Rh   (   R   R   R   (    (   R   R   s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   proxying_enginem  s    (   t
   __future__R    R   R   R   R@   R   R   t   utilR   R   R   t   objectR   R<   RE   RH   RI   RJ   RK   R#   RU   RV   Rk   Rh   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   <module>   s.   T		
	.&(