summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/testing/__init__.py1
-rw-r--r--lib/sqlalchemy/testing/plugin/pytestplugin.py12
-rw-r--r--lib/sqlalchemy/testing/util.py15
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."""