Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-mashumaro for
openSUSE:Factory checked in at 2026-09-02 17:02:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-mashumaro (Old)
and /work/SRC/openSUSE:Factory/.python-mashumaro.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-mashumaro"
Wed Sep 2 17:02:50 2026 rev:11 rq:1375265 version:3.22
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-mashumaro/python-mashumaro.changes
2026-05-29 18:13:32.514469789 +0200
+++
/work/SRC/openSUSE:Factory/.python-mashumaro.new.1265/python-mashumaro.changes
2026-09-02 17:03:00.763879357 +0200
@@ -1,0 +2,6 @@
+Wed Sep 2 05:21:42 UTC 2026 - Steve Kowalik <[email protected]>
+
+- Add patch support-python315.patch:
+ * Support changes required by Python 3.15.
+
+-------------------------------------------------------------------
New:
----
support-python315.patch
----------(New B)----------
New:
- Add patch support-python315.patch:
* Support changes required by Python 3.15.
----------(New E)----------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-mashumaro.spec ++++++
--- /var/tmp/diff_new_pack.FV4QJK/_old 2026-09-02 17:03:01.478904173 +0200
+++ /var/tmp/diff_new_pack.FV4QJK/_new 2026-09-02 17:03:01.480904242 +0200
@@ -24,6 +24,9 @@
License: Apache-2.0
URL: https://github.com/Fatal1ty/mashumaro
Source:
https://github.com/Fatal1ty/mashumaro/archive/refs/tags/v%{version}.tar.gz#/mashumaro-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM gh#Fatal1ty/mashumaro#345
+Patch0: support-python315.patch
+BuildRequires: %{python_module base >= 3.10}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools >= 77.0}
BuildRequires: %{python_module wheel}
++++++ support-python315.patch ++++++
>From ac873080fef77a93ea5c94f59d5774f8db8dea28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?=
<[email protected]>
Date: Mon, 31 Aug 2026 13:12:30 -0600
Subject: [PATCH 1/4] Declare support for Python 3.15
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Edgar Ramírez Mondragón <[email protected]>
---
.github/workflows/main.yml | 6 +++---
mashumaro/core/meta/helpers.py | 4 ++++
pyproject.toml | 1 +
requirements-dev.txt | 2 +-
4 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index fd30181d..fce06b07 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
@@ -55,7 +55,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
@@ -86,7 +86,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
diff --git a/mashumaro/core/meta/helpers.py b/mashumaro/core/meta/helpers.py
index ecfe1644..746f3620 100644
--- a/mashumaro/core/meta/helpers.py
+++ b/mashumaro/core/meta/helpers.py
@@ -283,6 +283,10 @@ def type_name(
if short:
return typ.__name__
return f"{typ.__module__}.{typ.__name__}"
+ if is_type_var_tuple(typ):
+ if short:
+ return typ.__name__
+ return f"{typ.__module__}.{typ.__name__}"
try:
if short:
return typ.__qualname__ # type: ignore
diff --git a/pyproject.toml b/pyproject.toml
index 721e5e4e..7f59a2f8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -19,6 +19,7 @@ classifiers = [
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
+ "Programming Language :: Python :: 3.15",
"Development Status :: 5 - Production/Stable",
]
dependencies = [
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 900d5b88..2751cb25 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -26,7 +26,7 @@ pyperf>=2.6.1
termtables>=0.2.3
pytablewriter[html]>=0.58.0
cattrs==24.1.2
-pydantic==2.12.0
+pydantic==2.14.0b1
dacite==1.7.0 # see
https://github.com/konradhalas/dacite/issues/236#issuecomment-1613987368
marshmallow>=3.19.0
dataclasses-json==0.6.7
>From cb338c51bc49ccc5370155fb5bbd2ed447940e39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?=
<[email protected]>
Date: Mon, 31 Aug 2026 13:22:08 -0600
Subject: [PATCH 2/4] Constrain Ruff to <0.16
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Edgar Ramírez Mondragón <[email protected]>
---
requirements-dev.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 2751cb25..fa1b2ecb 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -14,7 +14,7 @@ pytest-cov>=2.10.1
pytest-xdist>=3.5.0
coveralls>=3.0.0
black==26.3.1
-ruff>=0.0.285
+ruff>=0.0.285,<0.16
codespell>=2.2.2
# third party features
>From 485716e6a1a760c959b57bf90eca2cc7df6b09e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?=
<[email protected]>
Date: Mon, 31 Aug 2026 13:29:59 -0600
Subject: [PATCH 3/4] Handle both `typing.TypeVar` and pre-3.11
`typing_extensions.TypeVarTuple`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Edgar Ramírez Mondragón <[email protected]>
---
mashumaro/core/meta/helpers.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/mashumaro/core/meta/helpers.py b/mashumaro/core/meta/helpers.py
index 746f3620..310b84da 100644
--- a/mashumaro/core/meta/helpers.py
+++ b/mashumaro/core/meta/helpers.py
@@ -284,9 +284,12 @@ def type_name(
return typ.__name__
return f"{typ.__module__}.{typ.__name__}"
if is_type_var_tuple(typ):
- if short:
+ if type(typ).__module__ == "typing":
+ # Python 3.15+ prefixes TypeVarTuple's repr with a variance
+ # marker (e.g. "~Ts") like TypeVar; strip it to keep the
+ # pre-3.15 bare name.
return typ.__name__
- return f"{typ.__module__}.{typ.__name__}"
+ return str(typ)
try:
if short:
return typ.__qualname__ # type: ignore
>From b9233d661f6a6c36bba1f656fd296f16bfb8a9b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?=
<[email protected]>
Date: Mon, 31 Aug 2026 14:59:52 -0600
Subject: [PATCH 4/4] Split tests instead of adapting `type_name`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Edgar Ramírez Mondragón <[email protected]>
---
mashumaro/core/const.py | 5 ++++-
mashumaro/core/meta/helpers.py | 7 -------
tests/test_pep_646.py | 37 +++++++++++++++++++++++++---------
3 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/mashumaro/core/const.py b/mashumaro/core/const.py
index df6dfa27..5d40585b 100644
--- a/mashumaro/core/const.py
+++ b/mashumaro/core/const.py
@@ -7,6 +7,7 @@
"PY_312_MIN",
"PY_313_MIN",
"PY_314_MIN",
+ "PY_315_MIN",
"Sentinel",
]
@@ -15,8 +16,10 @@
PY_311 = sys.version_info.major == 3 and sys.version_info.minor == 11
PY_312 = sys.version_info.major == 3 and sys.version_info.minor == 12
PY_313 = sys.version_info.major == 3 and sys.version_info.minor == 13
-PY_314_MIN = sys.version_info.major == 3 and sys.version_info.minor >= 14
+PY_314 = sys.version_info.major == 3 and sys.version_info.minor == 14
+PY_315_MIN = sys.version_info.major == 3 and sys.version_info.minor >= 15
+PY_314_MIN = PY_314 or PY_315_MIN
PY_313_MIN = PY_313 or PY_314_MIN
PY_312_MIN = PY_312 or PY_313_MIN
PY_311_MIN = PY_311 or PY_312_MIN
diff --git a/mashumaro/core/meta/helpers.py b/mashumaro/core/meta/helpers.py
index 310b84da..ecfe1644 100644
--- a/mashumaro/core/meta/helpers.py
+++ b/mashumaro/core/meta/helpers.py
@@ -283,13 +283,6 @@ def type_name(
if short:
return typ.__name__
return f"{typ.__module__}.{typ.__name__}"
- if is_type_var_tuple(typ):
- if type(typ).__module__ == "typing":
- # Python 3.15+ prefixes TypeVarTuple's repr with a variance
- # marker (e.g. "~Ts") like TypeVar; strip it to keep the
- # pre-3.15 bare name.
- return typ.__name__
- return str(typ)
try:
if short:
return typ.__qualname__ # type: ignore
diff --git a/tests/test_pep_646.py b/tests/test_pep_646.py
index 4b89ef08..4a2d54b3 100644
--- a/tests/test_pep_646.py
+++ b/tests/test_pep_646.py
@@ -15,7 +15,7 @@
import pytest
from mashumaro import DataClassDictMixin
-from mashumaro.core.const import PY_311_MIN
+from mashumaro.core.const import PY_311_MIN, PY_315_MIN
# noinspection PyProtectedMember
from mashumaro.core.meta.helpers import (
@@ -206,8 +206,7 @@ class DataClass(DataClassDictMixin):
)
[email protected](not PY_311_MIN, reason="requires python 3.11")
-def test_type_name_for_unpacks_py_311():
+def _assert_type_name_for_unpacks_py_311_common():
assert _type_name(Tuple[Unpack[Tuple[int, ...]]]) == "Tuple[int, ...]"
assert _type_name(Tuple[Unpack[Tuple[int, float]]]) == "Tuple[int, float]"
assert (
@@ -234,14 +233,8 @@ def test_type_name_for_unpacks_py_311():
)
== "Tuple[str, Tuple[int, ...], int]"
)
- assert _type_name(Tuple[Unpack[Ts]]) == "Tuple[*Ts]"
- assert _type_name(Tuple[int, Unpack[Ts], int]) == "Tuple[int, *Ts, int]"
- assert _type_name(Generic[Unpack[Ts]]) == "Generic[*Ts]"
- assert _type_name(Generic[K, Unpack[Ts], V]) == "Generic[Any, *Ts, Any]"
assert _type_name(Unpack[Tuple[int]]) == "int"
assert _type_name(Unpack[Tuple[int, float]]) == "int, float"
- assert _type_name(Unpack[Ts]) == "*Ts"
- assert _type_name(Ts) == "Ts"
assert (
_type_name(Tuple[Unpack[Ts], K][Unpack[Tuple[int, ...]]])
== "Tuple[*Tuple[int, ...], int]"
@@ -256,6 +249,32 @@ def test_type_name_for_unpacks_py_311():
)
[email protected](
+ not PY_311_MIN or PY_315_MIN, reason="requires python 3.11-3.14"
+)
+def test_type_name_for_unpacks_py_311():
+ _assert_type_name_for_unpacks_py_311_common()
+ assert _type_name(Tuple[Unpack[Ts]]) == "Tuple[*Ts]"
+ assert _type_name(Tuple[int, Unpack[Ts], int]) == "Tuple[int, *Ts, int]"
+ assert _type_name(Generic[Unpack[Ts]]) == "Generic[*Ts]"
+ assert _type_name(Generic[K, Unpack[Ts], V]) == "Generic[Any, *Ts, Any]"
+ assert _type_name(Unpack[Ts]) == "*Ts"
+ assert _type_name(Ts) == "Ts"
+
+
[email protected](not PY_315_MIN, reason="requires python 3.15")
+def test_type_name_for_unpacks_py_315():
+ # Python 3.15 adds a variance marker to TypeVarTuple's repr (like
+ # TypeVar's), e.g. "~Ts" instead of "Ts".
+ _assert_type_name_for_unpacks_py_311_common()
+ assert _type_name(Tuple[Unpack[Ts]]) == "Tuple[*~Ts]"
+ assert _type_name(Tuple[int, Unpack[Ts], int]) == "Tuple[int, *~Ts, int]"
+ assert _type_name(Generic[Unpack[Ts]]) == "Generic[*~Ts]"
+ assert _type_name(Generic[K, Unpack[Ts], V]) == "Generic[Any, *~Ts, Any]"
+ assert _type_name(Unpack[Ts]) == "*~Ts"
+ assert _type_name(Ts) == "~Ts"
+
+
@pytest.mark.skipif(PY_311_MIN, reason="requires python<3.11")
def test_type_name_for_unpacks_py_less_than_311():
assert _type_name(Tuple[Unpack[Tuple[int, ...]]]) == "Tuple[int, ...]"