Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-python-multipart for
openSUSE:Factory checked in at 2025-12-30 12:00:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-multipart (Old)
and /work/SRC/openSUSE:Factory/.python-python-multipart.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-multipart"
Tue Dec 30 12:00:12 2025 rev:12 rq:1324591 version:0.0.21
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-python-multipart/python-python-multipart.changes
2025-02-05 12:40:13.180039589 +0100
+++
/work/SRC/openSUSE:Factory/.python-python-multipart.new.1928/python-python-multipart.changes
2025-12-30 12:00:15.092282316 +0100
@@ -1,0 +2,6 @@
+Sun Dec 28 19:46:11 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 0.0.21:
+ * Add support for Python 3.14 and drop EOL 3.8 and 3.9 #216.
+
+-------------------------------------------------------------------
Old:
----
python_multipart-0.0.20.tar.gz
New:
----
python_multipart-0.0.21.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-multipart.spec ++++++
--- /var/tmp/diff_new_pack.GUgCN8/_old 2025-12-30 12:00:16.168326517 +0100
+++ /var/tmp/diff_new_pack.GUgCN8/_new 2025-12-30 12:00:16.168326517 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-python-multipart
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-python-multipart
-Version: 0.0.20
+Version: 0.0.21
Release: 0
License: Apache-2.0
Summary: Python streaming multipart parser
++++++ python_multipart-0.0.20.tar.gz -> python_multipart-0.0.21.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/CHANGELOG.md
new/python_multipart-0.0.21/CHANGELOG.md
--- old/python_multipart-0.0.20/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
+++ new/python_multipart-0.0.21/CHANGELOG.md 2020-02-02 01:00:00.000000000
+0100
@@ -1,5 +1,9 @@
# Changelog
+## 0.0.21 (2025-12-17)
+
+* Add support for Python 3.14 and drop EOL 3.8 and 3.9
[#216](https://github.com/Kludex/python-multipart/pull/216).
+
## 0.0.20 (2024-12-16)
* Handle messages containing only end boundary
[#142](https://github.com/Kludex/python-multipart/pull/142).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/PKG-INFO
new/python_multipart-0.0.21/PKG-INFO
--- old/python_multipart-0.0.20/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
+++ new/python_multipart-0.0.21/PKG-INFO 2020-02-02 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: python-multipart
-Version: 0.0.20
+Version: 0.0.21
Summary: A streaming multipart parser for Python
Project-URL: Homepage, https://github.com/Kludex/python-multipart
Project-URL: Documentation, https://kludex.github.io/python-multipart/
@@ -16,13 +16,13 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.8
-Classifier: Programming Language :: Python :: 3.9
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: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.8
+Requires-Python: >=3.10
Description-Content-Type: text/markdown
# [Python-Multipart](https://kludex.github.io/python-multipart/)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/pyproject.toml
new/python_multipart-0.0.21/pyproject.toml
--- old/python_multipart-0.0.20/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
+++ new/python_multipart-0.0.21/pyproject.toml 2020-02-02 01:00:00.000000000
+0100
@@ -8,7 +8,7 @@
description = "A streaming multipart parser for Python"
readme = "README.md"
license = "Apache-2.0"
-requires-python = ">=3.8"
+requires-python = ">=3.10"
authors = [
{ name = "Andrew Dunham", email = "[email protected]" },
{ name = "Marcelo Trylesinski", email = "[email protected]" },
@@ -21,17 +21,17 @@
'Operating System :: OS Independent',
'Programming Language :: Python :: 3 :: Only',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.8',
- 'Programming Language :: Python :: 3.9',
'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',
'Topic :: Software Development :: Libraries :: Python Modules',
]
dependencies = []
-[tool.uv]
-dev-dependencies = [
+[dependency-groups]
+dev = [
"atomicwrites==1.4.1",
"attrs==23.2.0",
"coverage==7.4.4",
@@ -44,7 +44,7 @@
"PyYAML==6.0.1",
"invoke==2.2.0",
"pytest-timeout==2.3.1",
- "ruff==0.8.0",
+ "ruff==0.11.7",
"mypy",
"types-PyYAML",
"atheris==2.3.0; python_version <= '3.11'",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/python_multipart/__init__.py
new/python_multipart-0.0.21/python_multipart/__init__.py
--- old/python_multipart-0.0.20/python_multipart/__init__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/python_multipart-0.0.21/python_multipart/__init__.py 2020-02-02
01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
__author__ = "Andrew Dunham"
__license__ = "Apache"
__copyright__ = "Copyright (c) 2012-2013, Andrew Dunham"
-__version__ = "0.0.20"
+__version__ = "0.0.21"
from .multipart import (
BaseParser,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/python_multipart/decoders.py
new/python_multipart-0.0.21/python_multipart/decoders.py
--- old/python_multipart-0.0.20/python_multipart/decoders.py 2020-02-02
01:00:00.000000000 +0100
+++ new/python_multipart-0.0.21/python_multipart/decoders.py 2020-02-02
01:00:00.000000000 +0100
@@ -62,7 +62,7 @@
# Prepend any cache info to our data.
if len(self.cache) > 0:
- data = self.cache + data
+ data = bytes(self.cache) + data
# Slice off a string that's a multiple of 4.
decode_len = (len(data) // 4) * 4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python_multipart-0.0.20/python_multipart/multipart.py
new/python_multipart-0.0.21/python_multipart/multipart.py
--- old/python_multipart-0.0.20/python_multipart/multipart.py 2020-02-02
01:00:00.000000000 +0100
+++ new/python_multipart-0.0.21/python_multipart/multipart.py 2020-02-02
01:00:00.000000000 +0100
@@ -15,9 +15,8 @@
from .exceptions import FileError, FormParserError, MultipartParseError,
QuerystringParseError
if TYPE_CHECKING: # pragma: no cover
- from typing import Any, Callable, Literal, Protocol, TypedDict
-
- from typing_extensions import TypeAlias
+ from collections.abc import Callable
+ from typing import Any, Literal, Protocol, TypeAlias, TypedDict
class SupportsRead(Protocol):
def read(self, __n: int) -> bytes: ...
@@ -332,7 +331,7 @@
else:
v = repr(self.value)
- return "{}(field_name={!r}, value={})".format(self.__class__.__name__,
self.field_name, v)
+ return f"{self.__class__.__name__}(field_name={self.field_name!r},
value={v})"
class File:
@@ -570,7 +569,7 @@
self._fileobj.close()
def __repr__(self) -> str:
- return "{}(file_name={!r},
field_name={!r})".format(self.__class__.__name__, self.file_name,
self.field_name)
+ return f"{self.__class__.__name__}(file_name={self.file_name!r},
field_name={self.field_name!r})"
class BaseParser:
@@ -1241,7 +1240,7 @@
elif state == MultipartState.HEADER_VALUE_ALMOST_DONE:
# The last character should be a LF. If not, it's an error.
if c != LF:
- msg = "Did not find LF character at end of header "
"(found %r)" % (c,)
+ msg = f"Did not find LF character at end of header (found
{c!r})"
self.logger.warning(msg)
e = MultipartParseError(msg)
e.offset = i
@@ -1715,7 +1714,7 @@
else:
self.logger.warning("Unknown Content-Transfer-Encoding:
%r", transfer_encoding)
if self.config["UPLOAD_ERROR_ON_BAD_CTE"]:
- raise FormParserError('Unknown
Content-Transfer-Encoding "{!r}"'.format(transfer_encoding))
+ raise FormParserError(f'Unknown
Content-Transfer-Encoding "{transfer_encoding!r}"')
else:
# If we aren't erroring, then we just treat this as an
# unencoded Content-Transfer-Encoding.
@@ -1746,7 +1745,7 @@
else:
self.logger.warning("Unknown Content-Type: %r", content_type)
- raise FormParserError("Unknown Content-Type:
{}".format(content_type))
+ raise FormParserError(f"Unknown Content-Type: {content_type}")
self.parser = parser
@@ -1776,7 +1775,7 @@
self.parser.close()
def __repr__(self) -> str:
- return "{}(content_type={!r},
parser={!r})".format(self.__class__.__name__, self.content_type, self.parser)
+ return f"{self.__class__.__name__}(content_type={self.content_type!r},
parser={self.parser!r})"
def create_form_parser(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/tests/compat.py
new/python_multipart-0.0.21/tests/compat.py
--- old/python_multipart-0.0.20/tests/compat.py 2020-02-02 01:00:00.000000000
+0100
+++ new/python_multipart-0.0.21/tests/compat.py 2020-02-02 01:00:00.000000000
+0100
@@ -8,7 +8,8 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Any, Callable
+ from collections.abc import Callable
+ from typing import Any
def ensure_in_path(path: str) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python_multipart-0.0.20/tests/test_multipart.py
new/python_multipart-0.0.21/tests/test_multipart.py
--- old/python_multipart-0.0.20/tests/test_multipart.py 2020-02-02
01:00:00.000000000 +0100
+++ new/python_multipart-0.0.21/tests/test_multipart.py 2020-02-02
01:00:00.000000000 +0100
@@ -37,7 +37,8 @@
from .compat import parametrize, parametrize_class
if TYPE_CHECKING:
- from typing import Any, Iterator, TypedDict
+ from collections.abc import Iterator
+ from typing import Any, TypedDict
from python_multipart.multipart import FieldProtocol, FileConfig,
FileProtocol
@@ -1069,7 +1070,9 @@
self.make("boundary")
data = b"--Boundary\r\nfoobar"
- with self.assertRaisesRegex(MultipartParseError, "Expected boundary
character %r, got %r" % (b"b"[0], b"B"[0])):
+ with self.assertRaisesRegex(
+ MultipartParseError, "Expected boundary character {!r}, got
{!r}".format(b"b"[0], b"B"[0])
+ ):
self.f.write(data)
def test_octet_stream(self) -> None: