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
126 lines
3.0 KiB
Python
4 years ago
|
"""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
|