Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pytest-cases for
openSUSE:Factory checked in at 2026-04-13 23:18:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-cases (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-cases.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-cases"
Mon Apr 13 23:18:26 2026 rev:3 rq:1346222 version:3.10.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pytest-cases/python-pytest-cases.changes
2025-10-07 18:28:33.645940578 +0200
+++
/work/SRC/openSUSE:Factory/.python-pytest-cases.new.21863/python-pytest-cases.changes
2026-04-13 23:19:00.520425733 +0200
@@ -1,0 +2,10 @@
+Sun Apr 12 17:29:18 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 3.10.1:
+ * Fixed python version in package metadata. `3.13` was missing.
+ * Fixed an issue with `pytest 9` related to the fixture closure
+ building fixes
+ * Added the `with_case_tags` decorator for applying common tags
+ to all cases defined in a case class. Fixes #351.
+
+-------------------------------------------------------------------
Old:
----
pytest_cases-3.9.1.tar.gz
New:
----
_scmsync.obsinfo
build.specials.obscpio
pytest_cases-3.10.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-cases.spec ++++++
--- /var/tmp/diff_new_pack.D6HTjU/_old 2026-04-13 23:19:01.160452151 +0200
+++ /var/tmp/diff_new_pack.D6HTjU/_new 2026-04-13 23:19:01.160452151 +0200
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-pytest-cases
-Version: 3.9.1
+Version: 3.10.1
Release: 0
Summary: Separate test code from test cases in pytest
License: BSD-3-Clause
@@ -59,6 +59,8 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%files %{python_files}
+%doc README.md
+%license LICENSE
%{python_sitelib}/pytest_cases
%{python_sitelib}/pytest_cases-%{version}.dist-info
++++++ _scmsync.obsinfo ++++++
mtime: 1776014980
commit: c49ae353f68e16ba66bbd3de5d4247ca6a6f7511c155ff1d1672701f100dee8a
url: https://src.opensuse.org/python-pytest/python-pytest-cases.git
revision: c49ae353f68e16ba66bbd3de5d4247ca6a6f7511c155ff1d1672701f100dee8a
projectscmsync: https://src.opensuse.org/python-pytest/_ObsPrj.git
++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 2026-04-12 19:30:04.000000000 +0200
@@ -0,0 +1 @@
+.osc
++++++ pytest_cases-3.9.1.tar.gz -> pytest_cases-3.10.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/PKG-INFO
new/pytest_cases-3.10.1/PKG-INFO
--- old/pytest_cases-3.9.1/PKG-INFO 2025-06-09 22:04:50.362207400 +0200
+++ new/pytest_cases-3.10.1/PKG-INFO 2026-03-03 00:05:21.264756000 +0100
@@ -1,9 +1,9 @@
Metadata-Version: 2.4
Name: pytest-cases
-Version: 3.9.1
+Version: 3.10.1
Summary: Separate test code from test cases in pytest.
Home-page: https://github.com/smarie/python-pytest-cases
-Download-URL: https://github.com/smarie/python-pytest-cases/tarball/3.9.1
+Download-URL: https://github.com/smarie/python-pytest-cases/tarball/3.10.1
Author: Sylvain MARIE <[email protected]>
Maintainer: Sylvain MARIE <[email protected]>
License: BSD 3-Clause
@@ -18,6 +18,7 @@
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Framework :: Pytest
Description-Content-Type: text/markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/ci_tools/flake8-requirements.txt
new/pytest_cases-3.10.1/ci_tools/flake8-requirements.txt
--- old/pytest_cases-3.9.1/ci_tools/flake8-requirements.txt 2025-06-09
22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/ci_tools/flake8-requirements.txt 2026-03-03
00:04:56.000000000 +0100
@@ -3,6 +3,7 @@
flake8-html>=0.4,<1
flake8-bandit>=2.1.1,<3
bandit<1.7.3 # temporary until this is fixed
https://github.com/tylerwince/flake8-bandit/issues/21
+pbr # for bandit 1.7.2 to run
flake8-bugbear>=20.1.0,<21.0.0
flake8-docstrings>=1.5,<2
flake8-print>=3.1.1,<4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/docs/api_reference.md
new/pytest_cases-3.10.1/docs/api_reference.md
--- old/pytest_cases-3.9.1/docs/api_reference.md 2025-06-09
22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/docs/api_reference.md 2026-03-03
00:04:56.000000000 +0100
@@ -51,6 +51,57 @@
- `marks`: optional pytest marks to add on the case. Note that decorating the
function directly with the mark also works, and if marks are provided in both
places they are merged.
+### `@with_case_tags`
+
+```python
+@with_case_tags(*tags, # type: Any
+ ):
+```
+
+This decorator can be applied to a class defining cases to apply multiple
+`*tags` to all case methods defined thereby.
+
+```python
+@with_case_tags('tag_1', 'tag_2')
+class CasesContainerClass:
+
+ def case_one(self, ...):
+ ...
+
+ @case(tags='another_tag')
+ def case_two(self, ...):
+ ...
+
+ @case(tags='tag_1')
+ def case_three(self, ...):
+ ...
+```
+
+This is equivalent to:
+
+
+```python
+class CasesContainerClass:
+
+ @case(tags=('tag_1', 'tag_2'))
+ def case_one(self, ...):
+ ...
+
+ @case(tags=('another_tag', 'tag_1', 'tag_2'))
+ def case_two(self, ...):
+ ...
+
+ @case(tags=('tag_1', 'tag_2'))
+ def case_three(self, ...):
+ ...
+```
+
+**Parameters:**
+
+ - `tags`: custom tags to be added to all case methods. See also
[`@case(tags=...)`](#case).
+
+
+
### `copy_case_info`
```python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/docs/changelog.md
new/pytest_cases-3.10.1/docs/changelog.md
--- old/pytest_cases-3.9.1/docs/changelog.md 2025-06-09 22:04:27.000000000
+0200
+++ new/pytest_cases-3.10.1/docs/changelog.md 2026-03-03 00:04:56.000000000
+0100
@@ -1,5 +1,21 @@
# Changelog
+### 3.10.1 - Accurate metadata on PyPi
+
+- Fixed python version in package metadata. `3.13` was missing.
+
+### 3.10.0 - New `with_case_tags` decorator + pytest 9 compatibility
+
+- Fixed an issue with `pytest 9` related to the fixture closure building fixes
+ [pytest-dev/pytest#13789](https://github.com/pytest-dev/pytest/pull/13789),
+ solving
[pytest-dev/pytest#13773](https://github.com/pytest-dev/pytest/issues/13773).
+ Fixed [#374](https://github.com/smarie/python-pytest-cases/issues/374). PR
+ [#376](https://github.com/smarie/python-pytest-cases/pull/376) by
[jammer87](https://github.com/jammer87).
+- Added the `with_case_tags` decorator for applying common tags to all cases
+ defined in a case class. Fixes
[#351](https://github.com/smarie/python-pytest-cases/issues/351).
+ PR [#361](https://github.com/smarie/python-pytest-cases/pull/361)
+ by [@michele-riva](https://github.com/michele-riva).
+
### 3.9.1 - support for python 3.14 and pytest 8.4
- Fixed `AttributeError: 'MiniMetafunc' object has no attribute
'_params_directness'` when a case function is
@@ -12,6 +28,10 @@
[#186](https://github.com/smarie/python-pytest-cases/issues/186)
- Fixed test suite for python 3.14, officializing the support for this version.
+### 3.9.0 - yanked version
+
+This version was yanked. See 3.9.1.
+
### 3.8.6 - compatibility fix
- Fixed issue with legacy python 2.7 and 3.5. Fixes
[#352](https://github.com/smarie/python-pytest-cases/issues/352).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/docs/index.md
new/pytest_cases-3.10.1/docs/index.md
--- old/pytest_cases-3.9.1/docs/index.md 2025-06-09 22:04:27.000000000
+0200
+++ new/pytest_cases-3.10.1/docs/index.md 2026-03-03 00:04:56.000000000
+0100
@@ -269,7 +269,7 @@
```
- - the `has_tag` argument allows you to filter cases based on tags set on case
functions using the `@case` decorator. See API reference of
[`@case`](./api_reference.md#case) and
[`@parametrize_with_cases`](./api_reference.md#parametrize_with_cases).
+ - the `has_tag` argument allows you to filter cases based on tags set on case
functions using the `@case` decorator. See API reference of
[`@case`](./api_reference.md#case) and
[`@parametrize_with_cases`](./api_reference.md#parametrize_with_cases). Tags
shared by multiple cases grouped inside a class may be added automatically to
all cases using the [`@with_case_tags`](./api_reference.md#with_case_tags)
decorator.
```python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/noxfile.py
new/pytest_cases-3.10.1/noxfile.py
--- old/pytest_cases-3.9.1/noxfile.py 2025-06-09 22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/noxfile.py 2026-03-03 00:04:56.000000000 +0100
@@ -53,26 +53,32 @@
ENVS = {
# python 3.14
(PY314, "pytest-latest"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": ""}},
+ (PY314, "pytest8.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<9"}},
(PY314, "pytest7.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<8"}},
(PY314, "pytest6.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<7"}},
# python 3.13
(PY313, "pytest-latest"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": ""}},
+ (PY313, "pytest8.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<9"}},
(PY313, "pytest7.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<8"}},
(PY313, "pytest6.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<7"}},
# python 3.12
(PY312, "pytest-latest"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": ""}},
+ (PY312, "pytest8.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<9"}},
(PY312, "pytest7.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<8"}},
(PY312, "pytest6.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<7"}},
# python 3.11
# We'll run 'pytest-latest' this last for coverage
+ (PY311, "pytest8.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<9"}},
(PY311, "pytest7.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<8"}},
(PY311, "pytest6.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<7"}},
# python 3.10
(PY310, "pytest-latest"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": ""}},
+ (PY310, "pytest8.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<9"}},
(PY310, "pytest7.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<8"}},
(PY310, "pytest6.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<7"}},
# python 3.9
(PY39, "pytest-latest"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": ""}},
+ (PY39, "pytest8.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<9"}},
(PY39, "pytest7.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<8"}},
(PY39, "pytest6.x"): {"coverage": False, "pkg_specs": {"pip": ">19",
"pytest": "<7"}},
# IMPORTANT: this should be last so that the folder docs/reports is not
deleted afterwards
@@ -294,7 +300,7 @@
# keyring set https://upload.pypi.org/legacy/ your-username
# keyring set https://test.pypi.org/legacy/ your-username
install_reqs(session, phase="PyPi", phase_reqs=["twine"])
- session.run("twine", "upload", "dist/*", "-u", "smarie") # -r testpypi
+ session.run("twine", "upload", "dist/*", "-u", "__token__") # -r
testpypi
# create the github release
install_reqs(session, phase="release", phase_reqs=["click", "PyGithub"])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/pyproject.toml
new/pytest_cases-3.10.1/pyproject.toml
--- old/pytest_cases-3.9.1/pyproject.toml 2025-06-09 22:04:27.000000000
+0200
+++ new/pytest_cases-3.10.1/pyproject.toml 2026-03-03 00:04:56.000000000
+0100
@@ -1,6 +1,6 @@
[build-system]
requires = [
- "setuptools>=39.2",
+ "setuptools>=39.2,<82", # setuptools v82 does not have pkg_resources
anymore https://github.com/pypa/setuptools/issues/5174
"setuptools_scm",
"wheel"
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/setup.cfg
new/pytest_cases-3.10.1/setup.cfg
--- old/pytest_cases-3.9.1/setup.cfg 2025-06-09 22:04:50.362207400 +0200
+++ new/pytest_cases-3.10.1/setup.cfg 2026-03-03 00:05:21.265363000 +0100
@@ -20,6 +20,7 @@
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12
+ Programming Language :: Python :: 3.13
Programming Language :: Python :: 3.14
Framework :: Pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/src/pytest_cases/__init__.py
new/pytest_cases-3.10.1/src/pytest_cases/__init__.py
--- old/pytest_cases-3.9.1/src/pytest_cases/__init__.py 2025-06-09
22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases/__init__.py 2026-03-03
00:04:56.000000000 +0100
@@ -10,7 +10,7 @@
from .fixture_parametrize_plus import pytest_parametrize_plus,
parametrize_plus, parametrize, fixture_ref
from .case_funcs import case, copy_case_info, set_case_id, get_case_id,
get_case_marks, \
- get_case_tags, matches_tag_query, is_case_class, is_case_function
+ get_case_tags, matches_tag_query, is_case_class, is_case_function,
with_case_tags
from .case_parametrizer_new import parametrize_with_cases, THIS_MODULE,
get_all_cases, get_parametrize_args, \
get_current_case_id, get_current_cases, get_current_params,
CasesCollectionWarning
@@ -53,6 +53,7 @@
# case functions
'case', 'copy_case_info', 'set_case_id', 'get_case_id', 'get_case_marks',
'get_case_tags', 'matches_tag_query', 'is_case_class', 'is_case_function',
+ 'with_case_tags',
# test functions
'get_all_cases', 'parametrize_with_cases', 'THIS_MODULE',
'get_parametrize_args', 'get_current_case_id',
'get_current_cases', 'get_current_params', 'CasesCollectionWarning'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/src/pytest_cases/_version.py
new/pytest_cases-3.10.1/src/pytest_cases/_version.py
--- old/pytest_cases-3.9.1/src/pytest_cases/_version.py 2025-06-09
22:04:50.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases/_version.py 2026-03-03
00:05:21.000000000 +0100
@@ -1,7 +1,14 @@
# file generated by setuptools-scm
# don't change, don't track in version control
-__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
+__all__ = [
+ "__version__",
+ "__version_tuple__",
+ "version",
+ "version_tuple",
+ "__commit_id__",
+ "commit_id",
+]
TYPE_CHECKING = False
if TYPE_CHECKING:
@@ -9,13 +16,19 @@
from typing import Union
VERSION_TUPLE = Tuple[Union[int, str], ...]
+ COMMIT_ID = Union[str, None]
else:
VERSION_TUPLE = object
+ COMMIT_ID = object
version: str
__version__: str
__version_tuple__: VERSION_TUPLE
version_tuple: VERSION_TUPLE
+commit_id: COMMIT_ID
+__commit_id__: COMMIT_ID
-__version__ = version = '3.9.1'
-__version_tuple__ = version_tuple = (3, 9, 1)
+__version__ = version = '3.10.1'
+__version_tuple__ = version_tuple = (3, 10, 1)
+
+__commit_id__ = commit_id = 'gd495c03c1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/src/pytest_cases/case_funcs.py
new/pytest_cases-3.10.1/src/pytest_cases/case_funcs.py
--- old/pytest_cases-3.9.1/src/pytest_cases/case_funcs.py 2025-06-09
22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases/case_funcs.py 2026-03-03
00:04:56.000000000 +0100
@@ -366,3 +366,35 @@
except:
# GH#287: safe fallback
return False
+
+
+def with_case_tags(*tags):
+ """Attach `tags` to all cases defined in the decorated class."""
+ def _decorator(cls):
+ if is_case_function(cls):
+ raise ValueError(
+ 'Cannot use `with_case_tags` on a case '
+ 'function. Use the `@case` decorator instead.'
+ )
+ if not is_case_class(cls):
+ raise ValueError('`with_case_tags` can only be applied to classes '
+ 'defining a collection of cases.')
+ for case_name in dir(cls):
+ case_ = getattr(cls, case_name)
+ if not is_case_function(case_): # Not a case
+ continue
+ try:
+ case_info = getattr(case_, CASE_FIELD)
+ except AttributeError:
+ # Not explicitly decorated with @case. Do so now.
+ # NB: `case(obj) is obj`, i.e., the `@case` decorator
+ # only adds some attributes to `obj`. In the future, if
+ # `@case` will return a different object, we will have
+ # to `setattr(cls, case_name, case_mod)`
+ _ = case(case_)
+ case_info = getattr(case_, CASE_FIELD)
+ tags_to_add = tuple(t for t in tags if t not in case_info.tags)
+ case_info.add_tags(tags_to_add)
+ return cls
+ return _decorator
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_cases-3.9.1/src/pytest_cases/common_pytest_marks.py
new/pytest_cases-3.10.1/src/pytest_cases/common_pytest_marks.py
--- old/pytest_cases-3.9.1/src/pytest_cases/common_pytest_marks.py
2025-06-09 22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases/common_pytest_marks.py
2026-03-03 00:04:56.000000000 +0100
@@ -46,6 +46,7 @@
PYTEST8_OR_GREATER = PYTEST_VERSION >= Version('8.0.0')
PYTEST81_OR_GREATER = PYTEST_VERSION >= Version('8.1.0')
PYTEST84_OR_GREATER = PYTEST_VERSION >= Version('8.4.0')
+PYTEST9_OR_GREATER = PYTEST_VERSION >= Version('9.0.0')
def get_param_argnames_as_list(argnames):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pytest_cases-3.9.1/src/pytest_cases/plugin.py
new/pytest_cases-3.10.1/src/pytest_cases/plugin.py
--- old/pytest_cases-3.9.1/src/pytest_cases/plugin.py 2025-06-09
22:04:27.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases/plugin.py 2026-03-03
00:04:56.000000000 +0100
@@ -28,7 +28,8 @@
from .common_mini_six import string_types
from .common_pytest_lazy_values import get_lazy_args
-from .common_pytest_marks import PYTEST35_OR_GREATER, PYTEST46_OR_GREATER,
PYTEST37_OR_GREATER, PYTEST7_OR_GREATER, PYTEST8_OR_GREATER
+from .common_pytest_marks import PYTEST35_OR_GREATER, PYTEST46_OR_GREATER,
PYTEST37_OR_GREATER, PYTEST7_OR_GREATER, \
+ PYTEST8_OR_GREATER, PYTEST9_OR_GREATER
from .common_pytest import get_pytest_nodeid, get_pytest_function_scopeval,
is_function_node, get_param_names, \
get_param_argnames_as_list, has_function_scope,
set_callspec_arg_scope_to_function, in_callspec_explicit_args
@@ -334,8 +335,18 @@
# normal fixture
self.add_required_fixture(fixname, fixturedefs)
- # add all dependencies in the to do list
- dependencies = _fixdef.argnames
+ # add all dependencies, accounting for overrides
+ if PYTEST9_OR_GREATER:
+ dependencies = []
+ for _fixture_or_overridden in reversed(fixturedefs):
+ dependencies =
list(_fixture_or_overridden.argnames) + dependencies
+ # If there's an override and doesn't depend on the
overridden fixture,
+ # ignore remaining definitions
+ if fixname not in _fixture_or_overridden.argnames:
+ break
+ else:
+ dependencies = _fixdef.argnames
+
# - append: was pytest default
# pending_fixture_names += dependencies
# - prepend: makes much more sense
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_cases-3.9.1/src/pytest_cases.egg-info/PKG-INFO
new/pytest_cases-3.10.1/src/pytest_cases.egg-info/PKG-INFO
--- old/pytest_cases-3.9.1/src/pytest_cases.egg-info/PKG-INFO 2025-06-09
22:04:50.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases.egg-info/PKG-INFO 2026-03-03
00:05:21.000000000 +0100
@@ -1,9 +1,9 @@
Metadata-Version: 2.4
Name: pytest-cases
-Version: 3.9.1
+Version: 3.10.1
Summary: Separate test code from test cases in pytest.
Home-page: https://github.com/smarie/python-pytest-cases
-Download-URL: https://github.com/smarie/python-pytest-cases/tarball/3.9.1
+Download-URL: https://github.com/smarie/python-pytest-cases/tarball/3.10.1
Author: Sylvain MARIE <[email protected]>
Maintainer: Sylvain MARIE <[email protected]>
License: BSD 3-Clause
@@ -18,6 +18,7 @@
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Framework :: Pytest
Description-Content-Type: text/markdown
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_cases-3.9.1/src/pytest_cases.egg-info/SOURCES.txt
new/pytest_cases-3.10.1/src/pytest_cases.egg-info/SOURCES.txt
--- old/pytest_cases-3.9.1/src/pytest_cases.egg-info/SOURCES.txt
2025-06-09 22:04:50.000000000 +0200
+++ new/pytest_cases-3.10.1/src/pytest_cases.egg-info/SOURCES.txt
2026-03-03 00:05:21.000000000 +0100
@@ -125,6 +125,7 @@
tests/cases/issues/test_issue_246.py
tests/cases/issues/test_issue_274.py
tests/cases/issues/test_issue_286.py
+tests/cases/issues/test_issue_374.py
tests/cases/issues/test_py35_issue_176.py
tests/cases/issues/test_py35_issue_243.py
tests/cases/issues/test_py35_issue_286.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pytest_cases-3.9.1/tests/cases/issues/test_issue_374.py
new/pytest_cases-3.10.1/tests/cases/issues/test_issue_374.py
--- old/pytest_cases-3.9.1/tests/cases/issues/test_issue_374.py 1970-01-01
01:00:00.000000000 +0100
+++ new/pytest_cases-3.10.1/tests/cases/issues/test_issue_374.py
2026-03-03 00:04:56.000000000 +0100
@@ -0,0 +1,91 @@
+OVERRIDDEN_FIXTURES_TEST_FILE = """
+import pytest
+
[email protected]
+def db(): pass
+
[email protected]
+def app(db): pass
+
+
+# See https://github.com/pytest-dev/pytest/issues/13773
+# Issue occurred in collection with Pytest 9+
+
+
+class TestOverrideWithParent:
+ # Overrides module-level app, doesn't request `db` directly, only
transitively.
+ @pytest.fixture
+ def app(self, app): pass
+
+ def test_something(self, app): pass
+
+
+
+class TestOverrideWithoutParent:
+ # Overrides module-level app, doesn't request `db` at all.
+ @pytest.fixture
+ def app(self): pass
+
+ def test_something(self, app): pass
+"""
+
+
+def test_overridden_fixtures(pytester):
+ pytester.makepyfile(OVERRIDDEN_FIXTURES_TEST_FILE)
+ result = pytester.runpytest()
+ result.assert_outcomes(passed=2)
+
+
+# Using union fixtures.
+OVERRIDDEN_UNION_FIXTURES_TEST_FILE = """
+import pytest
+from pytest_cases import parametrize, parametrize_with_cases, case, fixture
+
+@fixture
+def db(): pass
+
+@fixture
+def app(db): pass
+
+def case_hello():
+ return "hello !"
+
+@fixture
+def surname():
+ return "joe"
+
+@fixture
+@parametrize("_name", ["you", "earthling"])
+def name(_name, surname, app):
+ return f"{_name} {surname}"
+
+@case(id="hello_fixture")
+def case_basic3(name):
+ return "hello, %s !" % name
+
+
+class TestOverrideWithParent:
+ # Overrides module-level name, doesn't request `name` directly, only
transitively.
+ @fixture
+ def name(self, name):
+ return "overridden %s" % name
+
+ @parametrize_with_cases("msg", cases=".")
+ def test_something(self, msg): pass
+
+class TestOverrideWithoutParent:
+ # Overrides module-level name, doesn't request name at all
+ @fixture
+ @parametrize("_name", ["hi", "martian"])
+ def name(self, _name):
+ return _name
+
+ @parametrize_with_cases("msg", cases=".")
+ def test_something(self, msg): pass
+"""
+
+
+def test_overridden_unions(pytester):
+ pytester.makepyfile(OVERRIDDEN_UNION_FIXTURES_TEST_FILE)
+ result = pytester.runpytest()
+ result.assert_outcomes(passed=6)