
H`Tc           @@  sb  d  Z  d d l m Z y d d l m Z Wn! e k
 rM d d l m Z n Xd d l Z d d l	 Z	 e j
 d( k Z e r d d l Z n d d l Z d a d a d a d a d a d a d Z d a d a d a d a d a i  Z d a d   Z d   Z d	   Z d
   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% g  Z& g  Z' d   Z( d   Z) e( d    Z* e( d    Z+ e) d    Z, e) d    Z- e) d    Z. d   Z/ e) d    Z0 e) d    Z1 e) d    Z2 e) d    Z3 e) d    Z4 d   Z5 d   Z6 d   Z7 d    Z8 d!   Z9 d"   Z: d#   Z; d$   Z< d d%  Z= d&   Z> d'   Z? d S()   s   Testing extensions.

this module is designed to work as a testing-framework-agnostic library,
so that we can continue to support nose and also begin adding new
functionality via py.test.

i    (   t   absolute_import(   t   SkipTest(   t   SkippedNi   c      
   C@  s   |  d d d d d d t  d d |  d d d d d d t  d d	 |  d
 d d d d d d d d |  d d d d t d d |  d d d d d d d d d |  d d d d d d d |  d d d d d d d |  d d d d d d d |  d d d d d d d  |  d! d d d d" d# t d d$ |  d% d d d d d t d d& |  d' d d d d( d# t d d) |  d* d d d t d d+ |  d, d d- d d. d# d  d d/ |  d0 d d d d1 d# g  d d2 |  d3 d d d d4 d# t d d5 d  S(6   Ns
   --log-infot   actiont   callbackt   typet   stringt   helps,   turn on info logging for <LOG> (multiple OK)s   --log-debugs-   turn on debug logging for <LOG> (multiple OK)s   --dbt   appendt   destt   dbsB   Use prefab database uri. Multiple OK, first one is run by default.s   --dbss   List available prefab dbss   --dburit   dburis8   Database uri.  Multiple OK, first one is run by default.s   --dropfirstt
   store_truet	   dropfirsts,   Drop all tables in the target database firsts   --backend-onlyt   backend_onlys&   Run only tests marked with __backend__s
   --mockpoolt   mockpools0   Use mock pool (asserts only one connection used)s   --low-connectionst   low_connectionss>   Use a low number of distinct connections - i.e. for Oracle TNSs   --reversetopt
   reversetopt   defaultsT   Use a random-ordering set implementation in the ORM (helps reveal dependency issues)s   --requirementss3   requirements class for testing, overrides setup.cfgs   --with-cdecimalt   cdecimalsD   Monkeypatch the cdecimal library into Python 'decimal' for all testss   --serversides"   Turn on server side cursors for PGs   --mysql-enginet   storet   mysql_engines\   Use the specified MySQL storage engine for all tables, default is a db-default/InnoDB combo.s   --tableoptst	   tableoptss.   Add a dialect-specific table option, key=values   --write-profilest   write_profiless   Write/update profiling data.(   t   _logt	   _list_dbst   Falset   _requirements_optt   _server_side_cursorst   None(   t   make_option(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   setup_options6   sP    c           C@  s#   t  j   a t j d d g  d  S(   Ns	   setup.cfgs   test.cfg(   t   configparsert   ConfigParsert   file_configt   read(    (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   read_configg   s    c         C@  s(   |  a  x t D] } | t  t  q Wd S(   s7   things to set up early, before coverage might be setup.N(   t   optionst   pre_configureR"   (   t   optt   fn(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt	   pre_beginm   s    c         C@  s   |  t  _ d  S(   N(   R%   t   has_coverage(   t   value(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   set_coverage_flagu   s    c          C@  sv   x t  D] }  |  t t  q Wd d l m a d d l m a m a m a m	 a	 m
 a
 m a m a d d l m a d S(   s9   things to set up later, once we know coverage is running.i    (   t   testing(   t   fixturest   enginest
   exclusionst
   assertionst   warningst	   profilingt   config(   t   utilN(   t   post_configureR%   R"   t
   sqlalchemyR-   t   sqlalchemy.testingR.   R/   R0   R1   R2   R3   R4   R5   (   R(   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt
   post_beginy   s
    4c         C@  sy   t  s d d  l  a  t  j   n  |  j d  rJ t  j |  j t  j  n+ |  j d  ru t  j |  j t  j  n  d  S(   Ni    s   -infos   -debug(   t   loggingt   basicConfigt   endswitht	   getLoggert   setLevelt   INFOt   DEBUG(   t   opt_strR+   t   parser(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR      s    c          G@  sQ   d GHx8 t  t j d   D]! } d | t j d |  f GHq Wt j d  d  S(   Ns0   Available --db options (use --dburi to override)R
   s   %20s	%si    (   t   sortedR"   R%   t   gett   syst   exit(   t   argst   macro(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR      s    c         C@  s   t  t d <d  S(   Nt   server_side_cursors(   t   Truet   db_opts(   RA   R+   RB   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR      s    c         C@  s   t  |  d  S(   N(   t   _setup_requirements(   RA   R+   RB   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR      s    c         C@  s   t  j |   |  S(   N(   R&   R   (   R(   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   pre   s    c         C@  s   t  j |   |  S(   N(   R6   R   (   R(   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   post   s    c         C@  s
   |  a  d  S(   N(   R%   (   R'   R"   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _setup_options   s    c         C@  s)   |  j  r% d d  l  } | t j d <n  d  S(   Ni    t   decimal(   R   RE   t   modules(   R%   R"   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _monkeypatch_cdecimal   s    	c   
      C@  sC  d d l  m } m } d d l m } |  j rA t |  j  } n g  } |  j r xr |  j D]d } x[ t j	 d |  D]G } | | j
 d  k r t d |   qs | j | j d |   qs WqZ Wn  | s | j | j d d   n  xL | D]D } | j | t  }	 |	 j   j   | j j |	 t |  | |  q Wt | _ d  S(   Ni    (   R/   R4   (   R-   s   [,\s]+R
   s:   Unknown URI specifier '%s'.  Specify --dbs for known uris.R   (   R8   R/   R4   R7   R-   R   t   listR
   t   ret   splitR%   t   RuntimeErrorR   RD   t   testing_engineRK   t   connectt   closet   Configt   register(
   R%   R"   R/   R4   R-   t   db_urlst   db_tokenR
   t   db_urlt   eng(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _engine_uri   s(    		$ c         C@  s-   |  j  r) d d l m } | j t d <n  d  S(   Ni    (   t   poolt	   poolclass(   R   R7   Ra   t   AssertionPoolRK   (   R%   R"   Ra   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _engine_pool   s    	c         C@  s    | j  d d  } t |  d  S(   Nt   sqla_testingt   requirement_cls(   RD   RL   (   R%   R"   Rf   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _requirements   s    c         C@  s   d d l  m } d d l m } | j d  k	 r3 d  S|  j d  \ } } t |  } x* | j d  d D] } t | |  } qh Wt | |  } |   | _ | _	 d  S(   Ni    (   R4   (   R-   t   :t   .i   (
   R8   R4   R7   R-   t   requirementsR   RU   t
   __import__t   getattrt   requires(   t   argumentR4   R-   t   modnamet   clsnamet   modt	   componentt   req_cls(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyRL      s    c      	   C@  s  d d l  m } d d l m } m } |  j rx| j j   D]} | j } | |  } y | j	   } Wn t
 k
 r} n: Xx6 | D]. }	 | j | j | j |	 | j      q W| j j j |  r8y | j	 d d  } Wn t
 k
 r q8Xx? | D]4 }	 | j | j | j |	 | j   d d   q Wn  xH t | j d d   D]. }
 | j | j | j |
 | j      qQW| j j j |  r? xW t | j d d d d   D]4 }
 | j | j | j |
 | j   d d   qWq? q? Wn  d  S(   Ni    (   R4   (   t   schemat   inspectRt   t   test_schemat   order_byt   foreign_key(   R8   R4   R7   Rt   Ru   R   RZ   t   all_configsR
   t   get_view_namest   NotImplementedErrort   executet	   _DropViewt   Tablet   MetaDataRj   t   schemast   enabled_for_configt   reversedt   get_table_namest	   DropTable(   R%   R"   R4   Rt   Ru   t   cfgt   et	   inspectort
   view_namest   vnamet   tname(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _prep_testing_database  sB    		 	 c         C@  si   d d l  m } | j } x0 |  j D]% } | j d  \ } } | | | <q# W|  j re |  j | d <n  d  S(   Ni    (   Rt   t   =R   (   R8   Rt   t   table_optionsR   RU   R   (   R%   R"   Rt   R   t   spect   keyR+   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _set_table_options0  s    		c         C@  s'   |  j  r# d d l m } |   n  d  S(   Ni    (   t   randomize_unitofwork(   R   t   sqlalchemy.orm.utilR   (   R%   R"   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _reverse_topological=  s    	c         C@  s&   d d l  m } t | _ | | _ d  S(   Ni    (   R4   (   R8   R4   R%   R"   (   R'   R"   R4   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _post_setup_optionsD  s    	c         C@  s2   d d l  m } | j | j d d   | _ d  S(   Ni    (   R3   Re   t   profile_file(   R8   R3   t   ProfileStatsFileRD   t   _profile_stats(   R%   R"   R3   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   _setup_profilingK  s    c         C@  sW   t  |  t j  s t S|  j j d  r, t St j j rO t	 |  d t  rO t St
 Sd  S(   Nt   _t   __backend__(   t
   issubclassR.   t   TestBaseR   t   __name__t
   startswithR4   R%   R   Rl   RJ   (   t   cls(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt
   want_classR  s    
c         c@  s   t  |  d t  r x t |   D]o } d |  j | j j | j j f } t | |  f i d | j j | j j f d 6 } t | | |  | Vq Wn |  Vd  S(   NR   s   %s_%s_%ss   %s+%st   __only_on__(	   Rl   R   t   _possible_configs_for_clsR   R
   t   namet   driverR   t   setattr(   R   t   moduleR   R   t   subcls(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   generate_sub_tests^  s    "#c         C@  s   t  |   t |   d  S(   N(   t	   _do_skipst   _setup_engine(   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   start_test_classo  s    
c         C@  s.   t  j j   t j s# t j   n  t   d  S(   N(   R/   t   testing_reapert   _stop_test_ctxR%   R   R1   t   global_cleanup_assertionst   _restore_engine(   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   stop_test_classt  s    	c           C@  s   t  j j t  d  S(   N(   R4   t   _currentt   resetR-   (    (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR   }  s    c         C@  sA   t  |  d d   r= t j d |  j  } t j j | t  n  d  S(   Nt   __engine_options__R%   (	   Rl   R   R/   RW   R   R4   R   t   push_engineR-   (   R   R_   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR     s    c         C@  su   | j  } d t j j t j j f } | j |  rK | d t |  !} n  d | | | f } t j   | t	 _
 d  S(   Ns   _%s_%si    s   %s.%s.%s(   R   R4   R
   R   R   R<   t   lenR2   t   resetwarningsR3   t   _current_test(   t   testt   test_module_namet
   test_classt	   test_nameR   t   suffixt   id_(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   before_test  s    	
c         C@  s   t  j j   t j   d  S(   N(   R/   R   t   _after_test_ctxR2   R   (   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt
   after_test  s    c         C@  st  t  t j j    } |  j rf t j |  j   } x3 t |  D]" } | |  r= | j |  q= q= Wn  t	 |  d d   r t j t j |  j    } x3 t |  D]" } | |  s | j |  q q Wn  t |  d  r`t j } x| t |  D]k } xb |  j D]W } t	 | |  } | j |  } | r | j |  | d  k	 rQ| j |  n  Pq q Wq Wn  t |  d  rt    }	 t j } xV t |  D]H } x? |  j D]4 } t	 | |  } | j |  s|	 j |  qqWqW| j |	  r| j |	  qn  xq t	 |  d d  D]] \ }
 } } xK t |  D]= } t j t j |
 | |   j |  s+| j |  q+q+WqW| S(   NR   t   __requires__t   __prefer_requires__t   __excluded_on__(    (   t   setR4   RZ   Ry   t   __unsupported_on__R0   t   db_specRS   t   removeRl   R   R5   t   to_listR   t   hasattrRj   R   t   matching_config_reasonst   extendR   R   t   addt
   differencet   difference_updatet   skip_ift   SpecPredicate(   R   t   reasonsRy   R   t
   config_objRj   t   requirementt   checkt   skip_reasonst   non_preferredR   t   op(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR     sN    				"	c         C@  s  g  } t  |  |  } t |  d t  rl xB t |  d  D]. } |   r7 t d |  j | j f   q7 q7 Wn  | s t |  d t  r d |  j |  j f } n; d |  j d j d   t j j	   D  d j |  f } t |   n t
 |  d  rit   } t j t j |  j    } x* | D]" } | |  s!| j |  q!q!W| j |  ri| j |  qin  t j | k rt | j   |   n  d  S(	   Nt   __skip_if__s   '%s' skipped by %sR   s(   '%s' unsupported for implementation '%s's.   '%s' unsupported on any DB implementation %s%ss   , c         s@  sJ   |  ]@ } d  | j  j d j d   | j  j j D  | j  j f Vq d S(   s   '%s(%s)+%s'Ri   c         s@  s   |  ] } t  |  Vq d  S(   N(   t   str(   t   .0t   dig(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pys	   <genexpr>  s    N(   R
   R   t   joint   dialectt   server_version_infoR   (   R   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pys	   <genexpr>  s   t   __prefer_backends__(   R   Rl   R   R   R   R   R   R4   RZ   Ry   R   R   R0   R   R5   R   R   R   R   R   R   t   _setup_configt   pop(   R   R   Ry   t   ct   msgR   R   R   (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR     s8    	 	c         C@  s   t  j j |  t  d  S(   N(   R4   R   t   pushR-   (   R   t   ctx(    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyR     s    (   i   i    (@   t   __doc__t
   __future__R    t   noseR   t   ImportErrort   _pytest.runnerR   RE   RT   t   version_infot   py3kR    R!   R   R.   R/   R0   R2   R3   R1   Rj   R4   R-   R5   R"   R:   RK   R%   R   R$   R)   R,   R9   R   R   R   R   R&   R6   RM   RN   RO   RR   R`   Rd   Rg   RL   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    sk   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/testing/plugin/plugin_base.pyt   <module>   sx   	1										 	/									0	,