]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- move away from explicit raises of SkipTest, instead call a
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 1 May 2015 17:15:51 +0000 (13:15 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 1 May 2015 17:15:51 +0000 (13:15 -0400)
function patched onto config.  nose/pytest backends now fill
in their exception class here only when loaded
- use more public seeming api to get at py.test Skipped
exception

lib/sqlalchemy/testing/config.py
lib/sqlalchemy/testing/exclusions.py
lib/sqlalchemy/testing/plugin/noseplugin.py
lib/sqlalchemy/testing/plugin/plugin_base.py
lib/sqlalchemy/testing/plugin/pytestplugin.py
lib/sqlalchemy/testing/profiling.py

index d429c9f4e1e81444dedb5efa2dcc9aa3eff4f519..a3d6e1690e739fe0b7b43d3aafd4ec7081702357 100644 (file)
@@ -15,6 +15,7 @@ file_config = None
 test_schema = None
 test_schema_2 = None
 _current = None
+_skip_test_exception = None
 
 
 class Config(object):
@@ -83,3 +84,9 @@ class Config(object):
         for cfg in cls.all_configs():
             yield cfg.db
 
+    def skip_test(self, msg):
+        skip_test(msg)
+
+
+def skip_test(msg):
+    raise _skip_test_exception(msg)
index 6aa4bf142aa6a248d59a206fd095eb1c77d61dca..972dec3a95ff6609479273ff4b4cb992a55435d7 100644 (file)
@@ -7,7 +7,6 @@
 
 
 import operator
-from .plugin.plugin_base import SkipTest
 from ..util import decorator
 from . import config
 from .. import util
@@ -116,7 +115,7 @@ class compound(object):
                     fn.__name__,
                     skip._as_string(config)
                 )
-                raise SkipTest(msg)
+                config.skip_test(msg)
 
         try:
             return_value = fn(*args, **kw)
index 1ae6e28f5e7d4fdcec38b9a81d93c4c5222d6e77..4c390d40957e090348d1da8c73d2f80c50348a85 100644 (file)
@@ -24,6 +24,7 @@ import os
 import sys
 
 from nose.plugins import Plugin
+import nose
 fixtures = None
 
 py3k = sys.version_info >= (3, 0)
@@ -56,6 +57,8 @@ class NoseSQLAlchemy(Plugin):
 
         plugin_base.set_coverage_flag(options.enable_plugin_coverage)
 
+        plugin_base.set_skip_test(nose.SkipTest)
+
     def begin(self):
         global fixtures
         from sqlalchemy.testing import fixtures  # noqa
index 84b7a6d5e9f15e3904fb6c605eef4f63d757907d..ef304afa6d73f4ea10efb05e4541723bb77abfeb 100644 (file)
@@ -14,13 +14,6 @@ functionality via py.test.
 """
 
 from __future__ import absolute_import
-try:
-    # unitttest has a SkipTest also but pytest doesn't
-    # honor it unless nose is imported too...
-    from nose import SkipTest
-except ImportError:
-    import pytest
-    from _pytest.runner import Skipped as SkipTest
 
 import sys
 import re
@@ -157,6 +150,13 @@ def pre_begin(opt):
 def set_coverage_flag(value):
     options.has_coverage = value
 
+_skip_test_exception = None
+
+
+def set_skip_test(exc):
+    global _skip_test_exception
+    _skip_test_exception = exc
+
 
 def post_begin():
     """things to set up later, once we know coverage is running."""
@@ -234,6 +234,13 @@ def _monkeypatch_cdecimal(options, file_config):
         sys.modules['decimal'] = cdecimal
 
 
+@post
+def _init_skiptest(options, file_config):
+    from sqlalchemy.testing import config
+
+    config._skip_test_exception = _skip_test_exception
+
+
 @post
 def _engine_uri(options, file_config):
     from sqlalchemy.testing import config
@@ -507,7 +514,7 @@ def _do_skips(cls):
     if getattr(cls, '__skip_if__', False):
         for c in getattr(cls, '__skip_if__'):
             if c():
-                raise SkipTest("'%s' skipped by %s" % (
+                config.skip_test("'%s' skipped by %s" % (
                     cls.__name__, c.__name__)
                 )
 
@@ -530,7 +537,7 @@ def _do_skips(cls):
                 ),
                 ", ".join(reasons)
             )
-        raise SkipTest(msg)
+        config.skip_test(msg)
     elif hasattr(cls, '__prefer_backends__'):
         non_preferred = set()
         spec = exclusions.db_spec(*util.to_list(cls.__prefer_backends__))
index fbab4966cbb4536b37e6928c41bb0f5b96594f45..30d7aa73ab34d994986378c066ae6aee99e7801a 100644 (file)
@@ -12,7 +12,7 @@ import collections
 import itertools
 
 try:
-    import xdist
+    import xdist  # noqa
     has_xdist = True
 except ImportError:
     has_xdist = False
@@ -48,6 +48,8 @@ def pytest_configure(config):
     plugin_base.set_coverage_flag(bool(getattr(config.option,
                                                "cov_source", False)))
 
+    plugin_base.set_skip_test(pytest.skip.Exception)
+
 
 def pytest_sessionstart(session):
     plugin_base.post_begin()
@@ -127,6 +129,7 @@ def pytest_pycollect_makeitem(collector, name, obj):
 
 _current_class = None
 
+
 def pytest_runtest_setup(item):
     # here we seem to get called only based on what we collected
     # in pytest_collection_modifyitems.   So to do class-based stuff
index 65fe165cd4ace31adaa0584b03aee19b12098a7c..357735656f7e932151748c3dd58bce91aaf53e52 100644 (file)
@@ -16,7 +16,6 @@ import os
 import sys
 from .util import gc_collect
 from . import config
-from .plugin.plugin_base import SkipTest
 import pstats
 import collections
 import contextlib
@@ -205,10 +204,11 @@ def count_functions(variance=0.05):
         raise SkipTest("cProfile is not installed")
 
     if not _profile_stats.has_stats() and not _profile_stats.write:
-        raise SkipTest("No profiling stats available on this "
-                       "platform for this function.  Run tests with "
-                       "--write-profiles to add statistics to %s for "
-                       "this platform." % _profile_stats.short_fname)
+        config.skip_test(
+            "No profiling stats available on this "
+            "platform for this function.  Run tests with "
+            "--write-profiles to add statistics to %s for "
+            "this platform." % _profile_stats.short_fname)
 
     gc_collect()