diff --git a/gh139257-Support-docutils-0.22.patch b/gh139257-Support-docutils-0.22.patch
new file mode 100644
index 0000000..d990cd1
--- /dev/null
+++ b/gh139257-Support-docutils-0.22.patch
@@ -0,0 +1,36 @@
+From 19b61747df3d62c822285c488753d6fbdf91e3ac Mon Sep 17 00:00:00 2001
+From: Daniel Garcia Moreno
+Date: Tue, 23 Sep 2025 10:20:16 +0200
+Subject: [PATCH 1/2] gh-139257: Support docutils >= 0.22
+
+---
+ Doc/tools/extensions/pyspecific.py | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+Index: Python-3.12.11/Doc/tools/extensions/pyspecific.py
+===================================================================
+--- Python-3.12.11.orig/Doc/tools/extensions/pyspecific.py 2025-06-03 17:41:47.000000000 +0200
++++ Python-3.12.11/Doc/tools/extensions/pyspecific.py 2025-09-30 18:16:55.089412381 +0200
+@@ -25,11 +25,21 @@
+ SOURCE_URI = 'https://github.com/python/cpython/tree/3.12/%s'
+
+ # monkey-patch reST parser to disable alphabetic and roman enumerated lists
++def _disable_alphabetic_and_roman(text):
++ try:
++ # docutils >= 0.22
++ from docutils.parsers.rst.states import InvalidRomanNumeralError
++ raise InvalidRomanNumeralError(text)
++ except ImportError:
++ # docutils < 0.22
++ return None
++
++
+ from docutils.parsers.rst.states import Body
+ Body.enum.converters['loweralpha'] = \
+ Body.enum.converters['upperalpha'] = \
+ Body.enum.converters['lowerroman'] = \
+- Body.enum.converters['upperroman'] = lambda x: None
++ Body.enum.converters['upperroman'] = _disable_alphabetic_and_roman
+
+
+ class PyAwaitableMixin(object):
diff --git a/idle3.appdata.xml b/idle3.appdata.xml
index 554b7c4..b494f1e 100644
--- a/idle3.appdata.xml
+++ b/idle3.appdata.xml
@@ -1,16 +1,16 @@
-
-
- idle3.desktop
+
+ org.python.IDLE3
+ idle3.desktop
+
IDLE3
- CC0
- Python-2.0
Python 3 Integrated Development and Learning Environment
+
IDLE is Python’s Integrated Development and Learning Environment.
- The GUI is uniform between Windows, Unix, and Mac OS X.
+ The GUI is uniform between Windows, Unix, and macOS.
IDLE provides an easy way to start writing, running, and debugging
Python code.
@@ -19,17 +19,33 @@
It provides:
- - a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,
- - a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,
- - search within any window, replace within editor windows, and search through multiple files (grep),
- - a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.
+ - a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,
+ - a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,
+ - search within any window, replace within editor windows, and search through multiple files (grep),
+ - a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.
+
+
+ Python Software Foundation
+
+
https://docs.python.org/3/library/idle.html
+
- http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png
- http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png
- http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png
+
+ https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png
+
+
+ https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png
+
+
+ https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png
+
+
+ Python-2.0
+ CC0-1.0
zbyszek@in.waw.pl
-
+
+
diff --git a/python312.changes b/python312.changes
index 739f893..557ab2d 100644
--- a/python312.changes
+++ b/python312.changes
@@ -1,3 +1,23 @@
+-------------------------------------------------------------------
+Mon Sep 29 06:52:07 UTC 2025 - Daniel Garcia
+
+- Add gh139257-Support-docutils-0.22.patch to fix build with latest
+ docutils (>=0.22) gh#python/cpython#139257
+
+-------------------------------------------------------------------
+Mon Sep 22 06:41:53 UTC 2025 - Dominique Leuenberger
+
+- Drop AppStream: this results in a different cycle than
+ appstream-glib. As the appdata.xml is controlled by ourselves, we
+ can get away with just manually validating it when changing it.
+
+-------------------------------------------------------------------
+Thu Sep 18 08:15:31 UTC 2025 - Dominique Leuenberger
+
+- Require AppStream to validate appdata file instead of deprecated
+ appstream-glib.
+- Update idle3.appdata.xml to pass the more pedantic appstreamcli.
+
-------------------------------------------------------------------
Fri Aug 1 20:09:24 UTC 2025 - Matej Cepl
diff --git a/python312.spec b/python312.spec
index a614442..c8f6ef4 100644
--- a/python312.spec
+++ b/python312.spec
@@ -1,7 +1,7 @@
#
# spec file for package python312
#
-# 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
@@ -193,6 +193,8 @@ Patch46: CVE-2025-6069-quad-complex-HTMLParser.patch
# PATCH-FIX-UPSTREAM CVE-2025-8194-tarfile-no-neg-offsets.patch bsc#1247249 mcepl@suse.com
# tarfile now validates archives to ensure member offsets are non-negative
Patch47: CVE-2025-8194-tarfile-no-neg-offsets.patch
+# PATCH-FIX-OPENSUSE gh139257-Support-docutils-0.22.patch gh#python/cpython#139257 daniel.garcia@suse.com
+Patch48: gh139257-Support-docutils-0.22.patch
BuildRequires: autoconf-archive
BuildRequires: automake
BuildRequires: fdupes
@@ -229,8 +231,6 @@ BuildRequires: python3-dataclasses
%endif
%endif
%if %{with general}
-# required for idle3 (.desktop and .appdata.xml files)
-BuildRequires: appstream-glib
BuildRequires: gcc-c++
BuildRequires: gdbm-devel
BuildRequires: gettext
@@ -698,7 +698,6 @@ install -m 644 -D -t %{buildroot}%{_datadir}/applications idle%{python_version}.
cp %{SOURCE20} idle%{python_version}.appdata.xml
sed -i -e 's:idle3.desktop:idle%{python_version}.desktop:g' idle%{python_version}.appdata.xml
install -m 644 -D -t %{buildroot}%{_datadir}/metainfo idle%{python_version}.appdata.xml
-appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/idle%{python_version}.appdata.xml
%fdupes %{buildroot}/%{_libdir}/python%{python_version}
%endif