You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.0 KiB
Python

"""vendored plugin_base functions from the most recent SQLAlchemy versions.
Alembic tests need to run on older versions of SQLAlchemy that don't
necessarily have all the latest testing fixtures.
"""
from __future__ import absolute_import
import abc
import sys
from sqlalchemy.testing.plugin.plugin_base import * # noqa
from sqlalchemy.testing.plugin.plugin_base import post
from sqlalchemy.testing.plugin.plugin_base import post_begin as sqla_post_begin
from sqlalchemy.testing.plugin.plugin_base import stop_test_class as sqla_stc
py3k = sys.version_info >= (3, 0)
if py3k:
ABC = abc.ABC
else:
class ABC(object):
__metaclass__ = abc.ABCMeta
def post_begin():
sqla_post_begin()
import warnings
try:
import pytest
except ImportError:
pass
else:
warnings.filterwarnings(
"once", category=pytest.PytestDeprecationWarning
)
from sqlalchemy import exc
if hasattr(exc, "RemovedIn20Warning"):
warnings.filterwarnings(
"error",
category=exc.RemovedIn20Warning,
message=".*Engine.execute",
)
warnings.filterwarnings(
"error",
category=exc.RemovedIn20Warning,
message=".*Passing a string",
)
# override selected SQLAlchemy pytest hooks with vendored functionality
def stop_test_class(cls):
sqla_stc(cls)
import os
from alembic.testing.env import _get_staging_directory
assert not os.path.exists(_get_staging_directory()), (
"staging directory %s was not cleaned up" % _get_staging_directory()
)
def want_class(name, cls):
from sqlalchemy.testing import config
from sqlalchemy.testing import fixtures
if not issubclass(cls, fixtures.TestBase):
return False
elif name.startswith("_"):
return False
elif (
config.options.backend_only
and not getattr(cls, "__backend__", False)
and not getattr(cls, "__sparse_backend__", False)
):
return False
else:
return True
@post
def _init_symbols(options, file_config):
from sqlalchemy.testing import config
from alembic.testing import fixture_functions as alembic_config
config._fixture_functions = (
alembic_config._fixture_functions
) = _fixture_fn_class()
class FixtureFunctions(ABC):
@abc.abstractmethod
def skip_test_exception(self, *arg, **kw):
raise NotImplementedError()
@abc.abstractmethod
def combinations(self, *args, **kw):
raise NotImplementedError()
@abc.abstractmethod
def param_ident(self, *args, **kw):
raise NotImplementedError()
@abc.abstractmethod
def fixture(self, *arg, **kw):
raise NotImplementedError()
def get_current_test_name(self):
raise NotImplementedError()
_fixture_fn_class = None
def set_fixture_functions(fixture_fn_class):
from sqlalchemy.testing.plugin import plugin_base
global _fixture_fn_class
_fixture_fn_class = plugin_base._fixture_fn_class = fixture_fn_class