diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/testing/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/plugin/pytestplugin.py | 12 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/util.py | 15 |
3 files changed, 26 insertions, 2 deletions
diff --git a/lib/sqlalchemy/testing/__init__.py b/lib/sqlalchemy/testing/__init__.py index a1f4b12ba..e7bb0a6a6 100644 --- a/lib/sqlalchemy/testing/__init__.py +++ b/lib/sqlalchemy/testing/__init__.py @@ -56,6 +56,7 @@ from .util import flag_combinations # noqa from .util import force_drop_names # noqa from .util import metadata_fixture # noqa from .util import provide_metadata # noqa +from .util import resolve_lambda # noqa from .util import rowset # noqa from .util import run_as_contextmanager # noqa from .util import teardown_events # noqa diff --git a/lib/sqlalchemy/testing/plugin/pytestplugin.py b/lib/sqlalchemy/testing/plugin/pytestplugin.py index 44fccf28d..3e0630890 100644 --- a/lib/sqlalchemy/testing/plugin/pytestplugin.py +++ b/lib/sqlalchemy/testing/plugin/pytestplugin.py @@ -363,6 +363,7 @@ class PytestFixtureFunctions(plugin_base.FixtureFunctions): for idx, char in enumerate(id_) if char in _combination_id_fns ] + arg_sets = [ pytest.param( *_arg_getter(_filter_exclusions(arg))[1:], @@ -370,14 +371,21 @@ class PytestFixtureFunctions(plugin_base.FixtureFunctions): comb_fn(getter(arg)) for getter, comb_fn in fns ) ) - for arg in arg_sets + for arg in [ + (arg,) if not isinstance(arg, tuple) else arg + for arg in arg_sets + ] ] else: # ensure using pytest.param so that even a 1-arg paramset # still needs to be a tuple. otherwise paramtrize tries to # interpret a single arg differently than tuple arg arg_sets = [ - pytest.param(*_filter_exclusions(arg)) for arg in arg_sets + pytest.param(*_filter_exclusions(arg)) + for arg in [ + (arg,) if not isinstance(arg, tuple) else arg + for arg in arg_sets + ] ] def decorate(fn): diff --git a/lib/sqlalchemy/testing/util.py b/lib/sqlalchemy/testing/util.py index 87c461fd2..dbe6a383d 100644 --- a/lib/sqlalchemy/testing/util.py +++ b/lib/sqlalchemy/testing/util.py @@ -261,6 +261,21 @@ def flag_combinations(*combinations): ) +def resolve_lambda(__fn, **kw): + """Given a no-arg lambda and a namespace, return a new lambda that + has all the values filled in. + + This is used so that we can have module-level fixtures that + refer to instance-level variables using lambdas. + + """ + + glb = dict(__fn.__globals__) + glb.update(kw) + new_fn = types.FunctionType(__fn.__code__, glb) + return new_fn() + + def metadata_fixture(ddl="function"): """Provide MetaData for a pytest fixture.""" |
