diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-02-06 17:50:11 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-02-06 17:50:11 -0500 |
| commit | 47858b85ec7139af83c2cd0aed1af8917d88ea3e (patch) | |
| tree | 412eb0bc2532207c6c111d21dcef69e5d68683ff /lib/sqlalchemy/testing | |
| parent | 4ad4e9fccbb263ac2a0e6bf5f84526b2dee19ece (diff) | |
| download | sqlalchemy-47858b85ec7139af83c2cd0aed1af8917d88ea3e.tar.gz | |
- add support for pulling in an external requirements file
- start filling in default versions of remaining requirements that are still only in test/
Diffstat (limited to 'lib/sqlalchemy/testing')
| -rw-r--r-- | lib/sqlalchemy/testing/plugin/noseplugin.py | 19 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 55 |
2 files changed, 68 insertions, 6 deletions
diff --git a/lib/sqlalchemy/testing/plugin/noseplugin.py b/lib/sqlalchemy/testing/plugin/noseplugin.py index 81e724bbe..4ce76363e 100644 --- a/lib/sqlalchemy/testing/plugin/noseplugin.py +++ b/lib/sqlalchemy/testing/plugin/noseplugin.py @@ -222,13 +222,23 @@ def _reverse_topological(options, file_config): dependency.set = RandomSet +def _requirements_opt(options, opt_str, value, parser): + _setup_requirements(value) + @post def _requirements(options, file_config): + + requirement_cls = file_config.get('sqla_testing', "requirement_cls") + _setup_requirements(requirement_cls) + +def _setup_requirements(argument): from sqlalchemy.testing import config from sqlalchemy import testing - requirement_cls = file_config.get('sqla_testing', "requirement_cls") - modname, clsname = requirement_cls.split(":") + if config.requirements is not None: + return + + modname, clsname = argument.split(":") # importlib.import_module() only introduced in 2.7, a little # late @@ -236,7 +246,7 @@ def _requirements(options, file_config): for component in modname.split(".")[1:]: mod = getattr(mod, component) req_cls = getattr(mod, clsname) - config.requirements = testing.requires = req_cls(db, config) + config.requirements = testing.requires = req_cls(config) @post @@ -290,6 +300,9 @@ class NoseSQLAlchemy(Plugin): opt("--reversetop", action="store_true", dest="reversetop", default=False, help="Use a random-ordering set implementation in the ORM (helps " "reveal dependency issues)") + opt("--requirements", action="callback", type="string", + callback=_requirements_opt, + help="requirements class for testing, overrides setup.cfg") opt("--with-cdecimal", action="store_true", dest="cdecimal", default=False, help="Monkeypatch the cdecimal library into Python 'decimal' for all tests") opt("--unhashable", action="store_true", dest="unhashable", default=False, diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index e44a333be..7228f38f9 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -8,14 +8,16 @@ to provide specific inclusion/exlusions. """ -from . import exclusions +from . import exclusions, config class Requirements(object): - def __init__(self, db, config): - self.db = db + def __init__(self, config): self.config = config + @property + def db(self): + return config.db class SuiteRequirements(Requirements): @@ -62,6 +64,47 @@ class SuiteRequirements(Requirements): return exclusions.open() @property + def offset(self): + """target database can render OFFSET, or an equivalent, in a SELECT.""" + + return exclusions.open() + + @property + def boolean_col_expressions(self): + """Target database must support boolean expressions as columns""" + + return exclusions.closed() + + @property + def nullsordering(self): + """Target backends that support nulls ordering.""" + + return exclusions.closed() + + @property + def standalone_binds(self): + """target database/driver supports bound parameters as column expressions + without being in the context of a typed column. + + """ + return exclusions.closed() + + @property + def intersect(self): + """Target database must support INTERSECT or equivalent.""" + return exclusions.closed() + + @property + def except_(self): + """Target database must support EXCEPT or equivalent (i.e. MINUS).""" + return exclusions.closed() + + @property + def window_functions(self): + """Target database must support window functions.""" + return exclusions.closed() + + @property def autoincrement_insert(self): """target platform generates new surrogate integer primary key values when insert() is executed, excluding the pk column.""" @@ -300,3 +343,9 @@ class SuiteRequirements(Requirements): ) """ return exclusions.open() + + @property + def mod_operator_as_percent_sign(self): + """target database must use a plain percent '%' as the 'modulus' + operator.""" + return exclusions.closed() |
