ó
¿b›]c           @   sÐ  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 d l m Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e  j d d  d! d" d# g ƒ f d$ „  ƒ  YZ d% e f d& „  ƒ  YZ e j d' „  ƒ Z d S((   iÿÿÿÿNi   (   t   event(   t   util(   t   url(   t   DefaultDialect(   t   _distill_params(   t   _DDLCompilest
   AssertRulec           B   s,   e  Z e Z d Z e Z d  „  Z d „  Z	 RS(   c         C   s   d  S(   N(    (   t   selft   execute_observed(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   process_statement   s    c         C   s   t  s t d ƒ ‚ d  S(   Ns?   All statements are complete, but pending assertion rules remain(   t   Falset   AssertionError(   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   no_more_statements   s    	N(
   t   __name__t
   __module__R
   t   is_consumedt   Nonet   errormessaget   Truet   consume_statementR	   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR      s
   	t   SQLMatchRulec           B   s   e  Z RS(    (   R   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   $   s   t	   CursorSQLc           B   s#   e  Z e Z d d  „ Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t	   statementt   params(   R   R   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   __init__+   s    	c         C   sš   | j  d } |  j | j k s@ |  j d  k	 rh |  j | j k rh d |  j |  j | j | j f |  _ n. | j  j d ƒ t |  _ | j  s– t |  _	 n  d  S(   Ni    s5   Testing for exact SQL %s parameters %s received %s %s(
   t
   statementsR   R   R   t
   parametersR   t   popR   R   R   (   R   R   t   stmt(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR	   /   s    !		N(   R   R   R
   R   R   R   R	   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   (   s   t   CompiledSQLc           B   sM   e  Z d d  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(	   t   defaultc         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   R   t   dialect(   R   R   R   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   E   s    		c         C   s"   t  j d d |  j ƒ } | | k S(   Ns   [\n\t]t    (   t   ret   subR   (   R   R   t   received_statementR   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   _compare_sqlJ   s    c         C   s[   |  j  d k r t ƒ  S|  j  d k r5 i t d 6} n i  } t j |  j  ƒ j ƒ  |   Sd  S(   NR   t
   postgresqlt   implicit_returning(   R   R   R   R   t   URLt   get_dialect(   R   R   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   _compile_dialectN   s    c   	   
   C   s  | j  } |  j | ƒ } t | j j t ƒ rZ | j j j d | d | j j d ƒ ƒ } nB | j j j d | d | j j	 d | j j
 d | j j d ƒ ƒ } t j d d t j | ƒ ƒ } | j } | sÛ | j ƒ  g } n" g  | D] } | j | ƒ ^ qâ } | | f S(   sx   reconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.R   t   schema_translate_mapt   column_keyst   inlines   [\n\t]R    (   t   contextR)   t
   isinstancet   compiledR   R   t   compilet   execution_optionst   getR+   R,   R!   R"   R   t	   text_typeR   t   construct_params(	   R   R   R-   t   compare_dialectR/   t   _received_statementR   t   _received_parameterst   m(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR6   Y   s&    				"c         C   sV  | j  } |  j | ƒ \ } } |  j | ƒ } |  j | | ƒ } | r| d  k	 rt | ƒ } t | ƒ } xŒ | r÷ | r÷ t | j d ƒ ƒ }	 xd t t | ƒ ƒ D]I \ }
 } x: |	 D]* } | | k sÙ | | |	 | k r³ Pq³ q³ W| |
 =Pq  Wt	 } Pql W| s| rt	 } qqn  | r.t
 |  _ d  |  _ n$ |  j | ƒ i | d 6| d 6|  _ d  S(   Ni    R#   t   received_parameters(   R-   R6   t   _all_paramsR$   R   t   listt   dictR   t	   enumerateR
   R   R   R   t   _failure_message(   R   R   R-   R6   R7   R   t
   equivalentt
   all_paramst   all_receivedt   paramt   idxt   receivedt	   param_key(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR	   {   s8    		c         C   s]   |  j  rU t j |  j  ƒ r- |  j  | ƒ } n	 |  j  } t | t ƒ sQ | g } n  | Sd  Sd  S(   N(   R   R   t   callableR.   R;   R   (   R   R-   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR:   ¬   s    		c         C   s   d |  j  j d d ƒ | f S(   Nsz   Testing for compiled statement %r partial params %r, received %%(received_statement)r with params %%(received_parameters)rt   %s   %%(   R   t   replace(   R   t   expected_params(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR>   ¸   s    N(
   R   R   R   R   R$   R)   R6   R	   R:   R>   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   D   s   			"	1	t   RegexSQLc           B   s&   e  Z d d  „ Z d „  Z d „  Z RS(   c         C   s>   t  j |  ƒ t j | ƒ |  _ | |  _ | |  _ d |  _ d  S(   NR   (   R   R   R!   R0   t   regext
   orig_regexR   R   (   R   RK   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   Â   s
    		c         C   s   d |  j  | f S(   Ns{   Testing for compiled statement ~%r partial params %r, received %%(received_statement)r with params %%(received_parameters)r(   RL   (   R   RI   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR>   É   s    c         C   s   t  |  j j | ƒ ƒ S(   N(   t   boolRK   t   match(   R   R   R#   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR$   Ð   s    N(   R   R   R   R   R>   R$   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRJ   Á   s   	t
   DialectSQLc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s
   | j  j S(   N(   R-   R   (   R   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR)   Õ   s    c         C   s   t  j d d | ƒ } | | k S(   Ns   [\n\t]R    (   R!   R"   (   R   t	   real_stmtt   received_stmtR   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   _compare_no_spaceØ   s    c         C   sk   t  t |  ƒ j | ƒ \ } } x: | j D] } |  j | j | ƒ r( Pq( q( Wt d | ƒ ‚ | | j j f S(   NsI   Can't locate compiled statement %r in list of statements actually invoked(	   t   superRO   R6   R   RR   R   R   R-   t   compiled_parameters(   R   R   RQ   t   received_paramsRP   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR6   Ü   s    
c         C   s¯   t  j d d |  j ƒ } | j j j } | d k rK t  j d d | ƒ } nZ d  } | d k rf d } n* | d k r{ d	 } n | d
 k r d  } n  t  j d | | ƒ } | | k S(   Ns   [\n\t]R    t   pyformats	   :([\w_]+)s   %(\1)st   qmarkt   ?t   formats   %st   numeric(   R!   R"   R   R-   R   t
   paramstyleR   (   R   R   R#   R   R[   t   repl(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR$   í   s    			(   R   R   R)   RR   R6   R$   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRO   Ô   s   			t   CountStatementsc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d |  _ d  S(   Ni    (   t   countt   _statement_count(   R   R^   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR     s    	c         C   s   |  j  d 7_  d  S(   Ni   (   R_   (   R   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR	     s    c         C   s;   |  j  |  j k r7 t s7 t d |  j  |  j f ƒ ‚ n  d  S(   Ns,   desired statement count %d does not match %d(   R^   R_   R
   R   (   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   
  s    (   R   R   R   R	   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR]     s   		t   AllOfc           B   s   e  Z d  „  Z d „  Z RS(   c         G   s   t  | ƒ |  _ d  S(   N(   t   sett   rules(   R   Rb   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR     s    c         C   s•   xŽ t  |  j ƒ D]d } d  | _ | j | ƒ | j r^ |  j j | ƒ |  j sZ t |  _ n  Pq | j s d  |  _ Pq q Wt  |  j ƒ d j |  _ d  S(   Ni    (   R;   Rb   R   R   R	   R   t   discardR   (   R   R   t   rule(    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR	     s    					(   R   R   R   R	   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR`     s   	t   EachOfc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         G   s   t  | ƒ |  _ d  S(   N(   R;   Rb   (   R   Rb   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   (  s    c         C   s„   xh |  j  rj |  j  d } | j | ƒ | j rB |  j  j d ƒ n | j rZ | j |  _ n  | j r Pq q W|  j  s€ t |  _ n  d  S(   Ni    (   Rb   R	   R   R   R   R   R   (   R   R   Rd   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR	   +  s    				c         C   sQ   |  j  r. |  j  d j r. |  j  d j ƒ  n |  j  rM t t |  ƒ j ƒ  n  d  S(   Ni    (   Rb   R   R   RS   Re   (   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   9  s    	(   R   R   R   R	   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRe   '  s   		t   Orc           B   s   e  Z d  „  Z RS(   c         C   sT   xM |  j  D]) } | j | ƒ | j r
 t |  _ Pq
 q
 Wt |  j  ƒ d j |  _ d  S(   Ni    (   Rb   R	   R   R   R;   R   (   R   R   Rd   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR	   A  s    		(   R   R   R	   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRf   @  s   t   SQLExecuteObservedc           B   s   e  Z d  „  Z RS(   c         C   s1   | |  _  | |  _ t | | ƒ |  _ g  |  _ d  S(   N(   R-   t   clauseelementR   R   R   (   R   R-   Rh   t   multiparamsR   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   L  s    		(   R   R   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRg   K  s   t   SQLCursorExecuteObservedR   R   R-   t   executemanyc           B   s   e  Z RS(    (   R   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRj   S  s   t   SQLAsserterc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   g  |  _  d  S(   N(   t   accumulated(   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyR   ]  s    c         C   s   |  j  |  _ |  `  d  S(   N(   Rm   t   _final(   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   _close`  s    c         G   s§   t  | Œ  } t |  j ƒ } xT | rq | j d ƒ } | j | ƒ | j rM Pq | j r t sn t | j ƒ ‚ q q W| r t s£ t d ƒ ‚ n | j s£ | j	 ƒ  n  d  S(   Ni    s    Additional SQL statements remain(
   Re   R;   Rn   R   R	   R   R   R
   R   R   (   R   Rb   Rd   t   observedR   (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   assert_d  s    				(   R   R   R   Ro   Rq   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyRl   \  s   		c         #   s•   t  ƒ  ‰  g  ‰ t j |  d ƒ ‡ f d †  ƒ } t j |  d ƒ ‡  ‡ f d †  ƒ } z	 ˆ  VWd  t j |  d | ƒ t j |  d | ƒ ˆ  j ƒ  Xd  S(   Nt   before_executec            s   | | | f ˆ  (d  S(   N(    (   t   connRh   Ri   R   (   t   orig(    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   connection_execute{  s    t   after_cursor_executec            s   | s
 d  Sˆ  j  r9 ˆ  j  d j | k r9 ˆ  j  d } n1 t | ˆ d ˆ d ˆ d ƒ } ˆ  j  j | ƒ | j j t | | | | ƒ ƒ d  S(   Niÿÿÿÿi    i   i   (   Rm   R-   Rg   t   appendR   Rj   (   Rs   t   cursorR   R   R-   Rk   t   obs(   t   asserterRt   (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   cursor_execute  s    	!	(   Rl   R    t   listens_fort   removeRo   (   t   engineRu   R{   (    (   Rz   Rt   s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   assert_engineu  s    	!$	(   t   collectionst
   contextlibR!   R    R    R   R~   R   t   engine.defaultR   t   engine.utilR   t   schemaR   t   objectR   R   R   R   RJ   RO   R]   R`   Re   Rf   Rg   t
   namedtupleRj   Rl   t   contextmanagerR   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/testing/assertsql.pyt   <module>   s2   }."