diff options
Diffstat (limited to 'lib/sqlalchemy/testing')
| -rw-r--r-- | lib/sqlalchemy/testing/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/config.py | 29 |
2 files changed, 24 insertions, 6 deletions
diff --git a/lib/sqlalchemy/testing/__init__.py b/lib/sqlalchemy/testing/__init__.py index 3a028f002..993fc4954 100644 --- a/lib/sqlalchemy/testing/__init__.py +++ b/lib/sqlalchemy/testing/__init__.py @@ -54,6 +54,7 @@ from .config import db from .config import fixture from .config import requirements as requires from .config import skip_test +from .config import Variation from .config import variation from .exclusions import _is_excluded from .exclusions import _server_version diff --git a/lib/sqlalchemy/testing/config.py b/lib/sqlalchemy/testing/config.py index a75c36776..957876579 100644 --- a/lib/sqlalchemy/testing/config.py +++ b/lib/sqlalchemy/testing/config.py @@ -14,11 +14,13 @@ import typing from typing import Any from typing import Callable from typing import Iterable +from typing import NoReturn from typing import Optional from typing import Tuple from typing import TypeVar from typing import Union +from .util import fail from .. import util requirements = None @@ -128,21 +130,36 @@ def combinations_list( return combinations(*arg_iterable, **kw) -class _variation_base: - __slots__ = ("name", "argname") +class Variation: + __slots__ = ("_name", "_argname") def __init__(self, case, argname, case_names): - self.name = case - self.argname = argname + self._name = case + self._argname = argname for casename in case_names: setattr(self, casename, casename == case) + if typing.TYPE_CHECKING: + + def __getattr__(self, key: str) -> bool: + ... + + @property + def name(self): + return self._name + def __bool__(self): - return self.name == self.argname + return self._name == self._argname def __nonzero__(self): return not self.__bool__() + def __str__(self): + return f"{self._argname}={self._name!r}" + + def fail(self) -> NoReturn: + fail(f"Unknown {self}") + def variation(argname, cases): """a helper around testing.combinations that provides a single namespace @@ -193,7 +210,7 @@ def variation(argname, cases): typ = type( argname, - (_variation_base,), + (Variation,), { "__slots__": tuple(case_names), }, |
