ó
H`¾Tc           @@  s›  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
 m Z d  d l Z d  d l 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 e f d „  ƒ  YZ d S(   i    (   t   absolute_importN(   t   dequei   (   t   config(   t	   decoratori   (   t   eventt   pool(   t   utilt   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 d
 „  Z 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(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   __init__   s    c         C@  s   t  |  j | <d  S(   N(   t   TrueR   (   R   t   engine(    (    s`   /var/www/send.findwatt.com/datamanager/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(    (    s`   /var/www/send.findwatt.com/datamanager/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(    (    s`   /var/www/send.findwatt.com/datamanager/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(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt
   invalidate%   s    c         C@  sO   y | ƒ  Wn= t  t f k
 r' ‚  n$ t k
 rJ } t j d | ƒ n Xd  S(   Ns5   testing_reaper couldn't rollback/close connection: %s(   t
   SystemExitt   KeyboardInterruptt	   Exceptiont   warningst   warn(   R   t   fnt   e(    (    s`   /var/www/send.findwatt.com/datamanager/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(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   rollback_all2   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)   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt	   close_all7   s    c         C@  s4   x- t  |  j ƒ D] \ } } |  j | j ƒ q Wd  S(   N(   R%   R   R$   R(   (   R   t   connR)   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   _after_test_ctx<   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   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   _stop_test_ctxE   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)   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR1   K   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&   t
   connectionR   R   R5   (   R   R-   R)   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR2   T   s    
c         C@  s0   x) |  j  D] } | j r
 t s( t ‚ q
 q
 Wd  S(   N(   R
   R'   t   Falset   AssertionError(   R   R)   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   assert_all_closed^   s    	(   t   __name__t
   __module__R   R   R   R   R   R$   R*   R,   R.   R3   R1   R2   R:   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR      s   						
								
c         C@  s7   t  j ƒ  t | d ƒ r& | j ƒ  n  |  j | ƒ d  S(   NR6   (   t   testing_reaperR,   t   hasattrR6   t   drop_all(   t   metadatat   bind(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   drop_all_tablesf   s    
c         O@  s#   z |  | | Ž  Wd  t  j ƒ  Xd  S(   N(   R=   R:   (   R"   t   argst   kw(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   assert_conns_closedm   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"   RC   RD   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   rollback_open_connectionsu   s    c         O@  s   t  j ƒ  |  | | Ž  d S(   s:   Decorator that closes all connections before fn execution.N(   R=   R,   (   R"   RC   RD   (    (    s`   /var/www/send.findwatt.com/datamanager/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"   RC   RD   (    (    s`   /var/www/send.findwatt.com/datamanager/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__t   dialect(   t   excludet   dt   namet   mod(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   all_dialects   s    t   ReconnectFixturec           B@  s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C@  s   | |  _  g  |  _ d  S(   N(   t   dbapit   connections(   R   RU   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   Ÿ   s    	c         C@  s   t  |  j | ƒ S(   N(   RL   RU   (   R   t   key(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   __getattr__£   s    c         O@  s)   |  j  j | | Ž  } |  j j | ƒ | S(   N(   RU   R   RV   t   append(   R   RC   t   kwargsR-   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   ¦   s    c         C@  sO   y | ƒ  Wn= t  t f k
 r' ‚  n$ t k
 rJ } t j d | ƒ n Xd  S(   Ns.   ReconnectFixture couldn't close connection: %s(   R   R   R   R    R!   (   R   R"   R#   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR$   «   s    c         C@  s7   x' t  |  j ƒ D] } |  j | j ƒ q Wg  |  _ d  S(   N(   R%   RV   R$   R6   (   R   t   c(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   shutdownµ   s    (   R;   R<   R   RX   R   R$   R\   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRT      s
   				
c         @  s‰   |  p t  j j }  t  j j j } | s0 i  } n  t | ƒ | d <t |  | ƒ ‰  ˆ  j ‰ ‡  ‡ f d †  } ˆ  j j j ˆ  _	 | ˆ  _ ˆ  S(   Nt   modulec           @  s   ˆ  j  j j ƒ  ˆ ƒ  d  S(   N(   RN   RU   R\   (    (   R   t   _dispose(    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR5   É   s    (
   R   R4   t   urlRN   RU   RT   t   testing_engineR5   R\   t   test_shutdown(   R_   R/   RU   R5   (    (   R   R^   s`   /var/www/send.findwatt.com/datamanager/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 rk t j
 } n  | |  |  } t | j t j ƒ rª d | j _ d | j _ n  t j | d | j ƒ t j | d | j ƒ | r7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_enginei   (   t   assertert
   use_reapert   after_executet   after_cursor_executeR   R   R   N(   t
   sqlalchemyRc   t	   assertsqlRd   R   t   popR   R4   R_   R&   t   db_optst
   isinstanceR   t	   QueuePoolt   _timeoutt   _max_overflowR   t   listent   executet   cursor_executeR=   R   R   R   R   (   R_   R/   Rc   Rd   Re   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR`   Ò   s(    	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    (   Rc   c         @  s   ˆ  j  |  ƒ d  S(   N(   RY   (   t   sqlt   aRD   (   t   buffer(    s`   /var/www/send.findwatt.com/datamanager/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]t    (   t   ret   subt   strR9   (   t   stmtst   st   recv(   Ru   (    s`   /var/www/send.findwatt.com/datamanager/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(   RN   N(   Rz   t   compile(   t   .0R|   (   RP   (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pys	   <genexpr>  s   (   RN   t   joint   mock(    (   R   (   RP   s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt	   print_sql
  s    	s   ://t   strategyR‚   Rv   (
   Rh   Rc   R   R4   RQ   R>   R9   R‚   R~   Rƒ   (   t   dialect_nameRc   Rv   R~   Rƒ   (    (   R   Ru   s`   /var/www/send.findwatt.com/datamanager/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         C@  s%   | |  _  | |  _ | j ƒ  |  _ d  S(   N(   R   R7   t   cursor(   R   R   R-   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   "  s    		c         K@  s3   | r |  j  j | | |  S|  j  j | |  Sd  S(   N(   Rˆ   Rq   (   R   t   stmtt
   parametersRD   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRq   '  s    c         K@  s   |  j  j | | |  S(   N(   Rˆ   t   executemany(   R   R‰   t   paramsRD   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR‹   -  s    c         C@  s   t  |  j | ƒ S(   N(   RL   Rˆ   (   R   RW   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRX   0  s    N(   R;   R<   t   __doc__R   R&   Rq   R‹   RX   (    (    (    s`   /var/www/send.findwatt.com/datamanager/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‘   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   <  s    	c         C@  s   |  j  |  j |  j ƒ S(   N(   R‘   R   R-   (   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRˆ   A  s    c         C@  s   |  j  j ƒ  d  S(   N(   R-   R6   (   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR6   D  s    c         C@  s   t  |  j | ƒ S(   N(   RL   R-   (   R   RW   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRX   G  s    (   R;   R<   R   R   Rˆ   R6   RX   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRŽ   4  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   R4   (    (   R‘   t   conn_cls(    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt	   mock_connQ  s    R/   t   creator(   R`   (   R’   R‘   R“   (    (   R‘   R’   s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   proxying_engineK  s    t   ReplayableSessionc           B@  st  e  Z d  Z e ƒ  Z e ƒ  Z e j rŒ e g  e	 e
 ƒ D]$ Z e j d ƒ s7 e e
 e ƒ ^ q7 ƒ j g  d D] Z e e
 e ƒ ^ qk ƒ Z nŸ e g  e	 e
 ƒ D]$ Z e j d ƒ sœ e e
 e ƒ ^ qœ ƒ j g  e j ƒ  D]' Z e e e ƒ s÷ e e ƒ n e ^ qÖ ƒ j g  d D] Z e e
 e ƒ ^ qƒ Z d „  Z d	 „  Z d
 „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ RS(   s  A simple record/playback tool.

    This is *not* a mock testing class.  It only records a session for later
    playback and makes no assertions on call consistency whatsoever.  It's
    unlikely to be suitable for anything other than DB-API recording.

    t   _t   FunctionTypet   BuiltinFunctionTypet
   MethodTypet   BuiltinMethodTypet
   LambdaTypet   UnboundMethodTypec         C@  s   t  ƒ  |  _ d  S(   N(   R   Ru   (   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   s  s    c         C@  s   |  j  |  j | ƒ S(   N(   t   RecorderRu   (   R   t   base(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   recorderv  s    c         C@  s   |  j  |  j ƒ S(   N(   t   PlayerRu   (   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   playery  s    Rž   c           B@  s2   e  Z d  „  Z d „  Z e d „  ƒ Z d „  Z RS(   c         C@  s   | |  _  | |  _ d  S(   N(   t   _buffert   _subject(   R   Ru   t   subject(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   }  s    	c         O@  s‡   g  d D] } t  j |  | ƒ ^ q \ } } | | | Ž  } t | ƒ t j k rr | j t j ƒ t |  ƒ | | ƒ S| j | ƒ | Sd  S(   NR¤   R£   (   s   _subjects   _buffer(   t   objectt   __getattribute__t   typeR–   t   NativesRY   t   Callable(   R   RC   RD   t   xR¥   Ru   t   result(    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   __call__  s    (c         C@  s   |  j  S(   N(   R¤   (   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR     s    c         C@  sã   y t  j |  | ƒ SWn t k
 r' n Xg  d D] } t  j |  | ƒ ^ q/ \ } } y t | ƒ j | | ƒ } Wn$ t k
 r• | j t j ƒ ‚  nJ Xt | ƒ t j k rÎ | j t j ƒ t |  ƒ | | ƒ S| j | ƒ | Sd  S(   NR¤   R£   (   s   _subjects   _buffer(	   R¦   R§   t   AttributeErrorR¨   RY   R–   t   NoAttributeR©   Rª   (   R   RW   R«   R¥   Ru   R¬   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR§   ‘  s     ((   R;   R<   R   R­   t   propertyR   R§   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyRž   |  s   		R¡   c           B@  s2   e  Z d  „  Z d „  Z e d „  ƒ Z d „  Z RS(   c         C@  s   | |  _  d  S(   N(   R£   (   R   Ru   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   §  s    c         O@  s9   t  j |  d ƒ } | j ƒ  } | t j k r1 |  S| Sd  S(   NR£   (   R¦   R§   t   popleftR–   Rª   (   R   RC   RD   Ru   R¬   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR­   ª  s
    c         C@  s   d  S(   N(   R&   (   R   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR   ²  s    c         C@  s   y t  j |  | ƒ SWn t k
 r' n Xt  j |  d ƒ } | j ƒ  } | t j k rY |  S| t j k rw t | ƒ ‚ n | Sd  S(   NR£   (   R¦   R§   R®   R±   R–   Rª   R¯   (   R   RW   Ru   R¬   (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR§   ¶  s    (   R;   R<   R   R­   R°   R   R§   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR¡   ¦  s   		(   s   FunctionTypes   BuiltinFunctionTypes
   MethodTypes   BuiltinMethodTypes
   LambdaTypes   UnboundMethodType(   s   FunctionTypes   BuiltinFunctionTypes
   MethodTypes   BuiltinMethodTypes
   LambdaType(   R;   R<   R   R¦   Rª   R¯   R   t   py2kR   t   dirt   typest   tt
   startswithRL   t
   differenceR©   t   uniont   __builtins__t   valuesRl   R¨   R   R    R¢   Rž   R¡   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyR–   V  s.   			7  %7:  "			*(    t
   __future__R    R´   R   t   collectionsR   Rw   R   R   R   R   R   Rx   R    R¦   R   R=   RB   RE   RF   RG   RH   R&   RS   RT   Rb   R`   R†   R‡   RŽ   R•   R–   (    (    (    s`   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/engines.pyt   <module>   s4   N		
	#*
