Accepting request 1269059 from devel:languages:python:Factory

- Update to 3.12.10:
  - gh-131852: msgfmt no longer adds the POT-Creation-Date to
    generated .mo files for consistency with GNU msgfmt.
  - gh-85012: Correctly reset msgctxt when compiling messages in
    msgfmt.
  - gh-131050: test_ssl.test_dh_params is skipped if the
    underlying TLS library does not support finite-field
    ephemeral Diffie-Hellman.
  - gh-119727: Add --single-process command line option to Python
    test runner (regrtest). Patch by Victor Stinner.
  - gh-131809: Update bundled libexpat to 2.7.1
  - gh-131261: Upgrade to libexpat 2.7.0
  - gh-127371: Avoid unbounded buffering for
    tempfile.SpooledTemporaryFile.writelines(). Previously, disk
    spillover was only checked after the lines iterator had been
    exhausted. This is now done after each line is written.
  - gh-121284: Fix bug in the folding of rfc2047 encoded-words
    when flattening an email message using a modern email
    policy. Previously when an encoded-word was too long for
    a line, it would be decoded, split across lines, and
    re-encoded. But commas and other special characters in the
    original text could be left unencoded and unquoted. This
    could theoretically be used to spoof header lines using a
    carefully constructed encoded-word if the resulting rendered
    email was transmitted or re-parsed.
  - gh-116608: undeprecate functional API for importlib.resources
  - gh-132075: Fix possible use of socket address structures
    with uninitialized members. Now all structure members are
    initialized with zeroes by default.
  - gh-132002: Fix crash when deallocating contextvars.ContextVar

OBS-URL: https://build.opensuse.org/request/show/1269059
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python312?expand=0&rev=30
This commit is contained in:
2025-04-18 14:14:39 +00:00
committed by Git OBS Bridge
15 changed files with 377 additions and 183 deletions

View File

@@ -4,9 +4,11 @@
Lib/test/test_xml_etree.py | 10 ++++++++++
3 files changed, 17 insertions(+)
--- a/Lib/test/test_pyexpat.py
+++ b/Lib/test/test_pyexpat.py
@@ -794,6 +794,10 @@ class ReparseDeferralTest(unittest.TestC
Index: Python-3.12.10/Lib/test/test_pyexpat.py
===================================================================
--- Python-3.12.10.orig/Lib/test/test_pyexpat.py 2025-04-11 21:04:45.031445243 +0200
+++ Python-3.12.10/Lib/test/test_pyexpat.py 2025-04-11 21:16:30.736034401 +0200
@@ -794,6 +794,10 @@
self.assertEqual(started, ['doc'])
def test_reparse_deferral_disabled(self):
@@ -17,9 +19,11 @@
started = []
def start_element(name, _):
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -1240,6 +1240,9 @@ class ExpatReaderTest(XmlTestBase):
Index: Python-3.12.10/Lib/test/test_sax.py
===================================================================
--- Python-3.12.10.orig/Lib/test/test_sax.py 2025-04-11 21:04:45.061811205 +0200
+++ Python-3.12.10/Lib/test/test_sax.py 2025-04-11 21:16:30.736607523 +0200
@@ -1240,6 +1240,9 @@
self.assertEqual(result.getvalue(), start + b"<doc></doc>")
@@ -29,11 +33,13 @@
def test_flush_reparse_deferral_disabled(self):
result = BytesIO()
xmlgen = XMLGenerator(result)
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -121,6 +121,11 @@ ATTLIST_XML = """\
</foo>
"""
Index: Python-3.12.10/Lib/test/test_xml_etree.py
===================================================================
--- Python-3.12.10.orig/Lib/test/test_xml_etree.py 2025-04-11 21:04:45.473815938 +0200
+++ Python-3.12.10/Lib/test/test_xml_etree.py 2025-04-11 21:16:30.737465180 +0200
@@ -138,6 +138,11 @@
return mock.patch.object(cls, "__eq__", autospec=True, wraps=eq)
+IS_SLE_15_6 = os.environ.get("SLE_VERSION", "") == "0150600"
+fails_with_expat_2_6_0 = (unittest.expectedFailure
@@ -43,7 +49,7 @@
def checkwarnings(*filters, quiet=False):
def decorator(test):
def newtest(*args, **kwargs):
@@ -1424,9 +1429,11 @@ class XMLPullParserTest(unittest.TestCas
@@ -1441,9 +1446,11 @@
self.assert_event_tags(parser, [('end', 'root')])
self.assertIsNone(parser.close())
@@ -55,7 +61,7 @@
def test_simple_xml_chunk_5(self):
self.test_simple_xml(chunk_size=5, flush=True)
@@ -1651,6 +1658,9 @@ class XMLPullParserTest(unittest.TestCas
@@ -1668,6 +1675,9 @@
self.assert_event_tags(parser, [('end', 'doc')])

View File

@@ -28,9 +28,11 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
Lib/test/test_sysconfig.py | 17 +++++++++++++--
2 files changed, 65 insertions(+), 3 deletions(-)
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -104,6 +104,11 @@ if os.name == 'nt':
Index: Python-3.12.10/Lib/sysconfig.py
===================================================================
--- Python-3.12.10.orig/Lib/sysconfig.py 2025-04-11 21:04:43.494305425 +0200
+++ Python-3.12.10/Lib/sysconfig.py 2025-04-11 21:04:51.517931810 +0200
@@ -104,6 +104,11 @@
else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@@ -42,7 +44,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
# NOTE: site.py has copy of this function.
# Sync it when modify this function.
@@ -163,13 +168,28 @@ if _HAS_USER_BASE:
@@ -163,13 +168,28 @@
},
}
@@ -71,7 +73,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
_BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
# Mutex guarding initialization of _CONFIG_VARS.
_CONFIG_VARS_LOCK = threading.RLock()
@@ -261,11 +281,40 @@ def _extend_dict(target_dict, other_dict
@@ -268,11 +288,40 @@
target_dict[key] = value
@@ -113,9 +115,11 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
if os.name == 'nt':
# On Windows we want to substitute 'lib' for schemes rather
# than the native value (without modifying vars, in case it
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -119,8 +119,19 @@ class TestSysConfig(unittest.TestCase):
Index: Python-3.12.10/Lib/test/test_sysconfig.py
===================================================================
--- Python-3.12.10.orig/Lib/test/test_sysconfig.py 2025-04-11 21:04:45.175417431 +0200
+++ Python-3.12.10/Lib/test/test_sysconfig.py 2025-04-11 21:04:51.518393464 +0200
@@ -119,8 +119,19 @@
for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]:
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars)
@@ -136,7 +140,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
os.path.normpath(expected),
)
@@ -353,7 +364,7 @@ class TestSysConfig(unittest.TestCase):
@@ -353,7 +364,7 @@
self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_scheme_names(self):
@@ -145,7 +149,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
if HAS_USER_BASE:
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
@@ -365,6 +376,8 @@ class TestSysConfig(unittest.TestCase):
@@ -365,6 +376,8 @@
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))

3
Python-3.12.10.tar.xz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:07ab697474595e06f06647417d3c7fa97ded07afc1a7e4454c5639919b46eaea
size 20520960

18
Python-3.12.10.tar.xz.asc Normal file
View File

@@ -0,0 +1,18 @@
-----BEGIN PGP SIGNATURE-----
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmf1EjJfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
YwXAwBAAncWm4sMrSvGW4bgyp7bHE0CeaA9ErIq55CmHfigrlxPKQUYVlzj38N7H
MVlpmqZSQ8wqDFy3gN0QeCXBGapxgO2dEcrgy5HxvtktXge25j1f7LvVraSFB9/F
DrOCZr54gVrE/r0242f1JmJQ1BDeMDSUbEYE6fd0xqWYCZ2xpzvYmQG/+6jD5FFC
UE6PYxJlq+rfSawj974//BDhrY4hZ3g0xxyiyhfXBBYMhZO3OzCckrAD5zZOQfNE
y/JK94nVWXLU/Lx3R+L7TvJgJ3ej4ggq5LRwrn09GU5jExwyITh4yUO7i56vbmvx
EtOobQC0RVz/xrsciJ4Gn3zByaO0XPjrGaCOU53nCsNlfJcBQhj2UQpum8CL9S9C
BJPCV4jL+Mo8EL91cJTyX4LqFoAXayMwPS0HKVOvYn33+pmVNe+duY/UjUpG50kw
jdsHbKAthh8QbSIO0VPk4eH3pVEQ3O9aG+3r/puGjPRWG8CMyLbQUVmlj4Sh3/Kh
vh7ydOjzJeuIUhAmFOLLqYG4mah71q1yBXx9jhyxzQSwvyoQaQwgpA+Yn+yB1bXy
ttxp2r4fS0ZvGYB44C1WrAxeKRI+J1z19i1IYMc2bV6SfSBoU9AaJqh2o4dMHHUS
F3Ko4UTyjU4bTfI18dCs2OgUEED6BAe5cs3ZyqDm3zL4fGIgNXs=
=k0VQ
-----END PGP SIGNATURE-----

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7220835d9f90b37c006e9842a8dff4580aaca4318674f947302b8d28f3f81112
size 20502440

View File

@@ -1,18 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmeiX7JfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
YwXTqw//VlGJA5CRDfljMwN9BmG2hdXB1B7Lj0PssuAo4A/lH99gb4DRVDS9LNjr
99WdH/fQQovx6rTbtyJnN8Vh7SSduBi/vOc5n5VOXZB0buqR0l+0wu4m43Slu6xP
fXO349Hr6585lemU8x54TrP756rSVUhy3T+krUuNDL9W1Wrp2yDCpt4tUoEhNXGw
DoYS8MrK/ygLNV/7p2DeMWOHNdbjKNH6rfzl60IAwAp7oANcyoj6Pho960bbeUDo
tb47Pw0WWZv3EuITP6bPa8+Z6dj096cFL3AQJ3ap16OduwiaOsGhqTfe4+kbp6ut
Gp/1HeIHzPbEV0E5K78RWHuzBYgU1oPGiMjlp7WkA7bP2OSTF7nM4EBkiiihk2qx
3d5VF9wpVRJ4AuR/aWcWcMnvD2ziSWfzZM3Z3VLnTaWYpuRkQp8TTiFr1vHqxMYm
p/8AozzBJMfOS6u/Q0WNAdk6x3VB0DXnTAETXQVIrex4DXqX/3WSMWK5/x/OyCh9
ytdreIQYbv1KvlNQJkgpPb7jlUSXp8t9fHCXt4hszhJgtjwIj/+CuSeAgX0bhopV
XsqOBseDNhATg38mhwBVaeFKGRpxsKdpxcdqSEGKuhXtEI/hJmkpZGw49gy3xWxB
KlgRgKjCPw+BGAIVV9qvdtJzam8a09SKVcslqgF619q0byQoBmo=
=1TbP
-----END PGP SIGNATURE-----

File diff suppressed because one or more lines are too long

View File

@@ -5,30 +5,32 @@ Subject: [PATCH] bpo-31046: ensurepip does not honour the value of $(prefix)
Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
---
Doc/library/ensurepip.rst | 9 +++--
Doc/library/ensurepip.rst | 12 +++++-
Lib/ensurepip/__init__.py | 18 +++++++---
Lib/test/test_ensurepip.py | 11 ++++++
Makefile.pre.in | 4 +-
Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst | 1
5 files changed, 34 insertions(+), 9 deletions(-)
5 files changed, 37 insertions(+), 9 deletions(-)
create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
Index: Python-3.12.4/Doc/library/ensurepip.rst
Index: Python-3.12.10/Doc/library/ensurepip.rst
===================================================================
--- Python-3.12.4.orig/Doc/library/ensurepip.rst
+++ Python-3.12.4/Doc/library/ensurepip.rst
@@ -59,8 +59,9 @@ is at least as recent as the one availab
--- Python-3.12.10.orig/Doc/library/ensurepip.rst 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/library/ensurepip.rst 2025-04-11 21:16:06.140273604 +0200
@@ -61,7 +61,11 @@
By default, ``pip`` is installed into the current virtual environment
(if one is active) or into the system site packages (if there is no
active virtual environment). The installation location can be controlled
-through two additional command line options:
+through some additional command line options:
+
+.. option:: --prefix <dir>
+
+ Installs ``pip`` using the given directory prefix.
+* ``--prefix <dir>``: Installs ``pip`` using the given directory prefix.
* :samp:`--root {dir}`: Installs ``pip`` relative to the given root directory
rather than the root of the currently active virtual environment (if any)
or the default root for the current Python installation.
@@ -92,7 +93,7 @@ Module API
.. option:: --root <dir>
@@ -102,7 +106,7 @@
Returns a string specifying the available version of pip that will be
installed when bootstrapping an environment.
@@ -37,7 +39,7 @@ Index: Python-3.12.4/Doc/library/ensurepip.rst
altinstall=False, default_pip=False, \
verbosity=0)
@@ -102,6 +103,8 @@ Module API
@@ -112,6 +116,8 @@
If *root* is ``None``, then installation uses the default install location
for the current environment.
@@ -46,7 +48,7 @@ Index: Python-3.12.4/Doc/library/ensurepip.rst
*upgrade* indicates whether or not to upgrade an existing installation
of an earlier version of ``pip`` to the available version.
@@ -122,6 +125,8 @@ Module API
@@ -132,6 +138,8 @@
*verbosity* controls the level of output to :data:`sys.stdout` from the
bootstrapping operation.
@@ -55,11 +57,11 @@ Index: Python-3.12.4/Doc/library/ensurepip.rst
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
.. note::
Index: Python-3.12.4/Lib/ensurepip/__init__.py
Index: Python-3.12.10/Lib/ensurepip/__init__.py
===================================================================
--- Python-3.12.4.orig/Lib/ensurepip/__init__.py
+++ Python-3.12.4/Lib/ensurepip/__init__.py
@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings(
--- Python-3.12.10.orig/Lib/ensurepip/__init__.py 2025-04-11 21:04:42.789443156 +0200
+++ Python-3.12.10/Lib/ensurepip/__init__.py 2025-04-11 21:13:01.303399067 +0200
@@ -120,27 +120,27 @@
os.environ['PIP_CONFIG_FILE'] = os.devnull
@@ -92,7 +94,7 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py
Note that calling this function will alter both sys.path and os.environ.
"""
@@ -190,6 +190,8 @@ def _bootstrap(*, root=None, upgrade=Fal
@@ -190,6 +190,8 @@
args = ["install", "--no-cache-dir", "--no-index", "--find-links", tmpdir]
if root:
args += ["--root", root]
@@ -101,7 +103,7 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py
if upgrade:
args += ["--upgrade"]
if user:
@@ -265,6 +267,11 @@ def _main(argv=None):
@@ -265,6 +267,11 @@
help="Install everything relative to this alternate root directory.",
)
parser.add_argument(
@@ -113,7 +115,7 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py
"--altinstall",
action="store_true",
default=False,
@@ -283,6 +290,7 @@ def _main(argv=None):
@@ -283,6 +290,7 @@
return _bootstrap(
root=args.root,
@@ -121,11 +123,11 @@ Index: Python-3.12.4/Lib/ensurepip/__init__.py
upgrade=args.upgrade,
user=args.user,
verbosity=args.verbosity,
Index: Python-3.12.4/Lib/test/test_ensurepip.py
Index: Python-3.12.10/Lib/test/test_ensurepip.py
===================================================================
--- Python-3.12.4.orig/Lib/test/test_ensurepip.py
+++ Python-3.12.4/Lib/test/test_ensurepip.py
@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit
--- Python-3.12.10.orig/Lib/test/test_ensurepip.py 2025-04-11 21:04:44.274413027 +0200
+++ Python-3.12.10/Lib/test/test_ensurepip.py 2025-04-11 21:13:01.303691075 +0200
@@ -105,6 +105,17 @@
unittest.mock.ANY,
)
@@ -143,11 +145,11 @@ Index: Python-3.12.4/Lib/test/test_ensurepip.py
def test_bootstrapping_with_user(self):
ensurepip.bootstrap(user=True)
Index: Python-3.12.4/Makefile.pre.in
Index: Python-3.12.10/Makefile.pre.in
===================================================================
--- Python-3.12.4.orig/Makefile.pre.in
+++ Python-3.12.4/Makefile.pre.in
@@ -1914,7 +1914,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
--- Python-3.12.10.orig/Makefile.pre.in 2025-04-11 21:04:58.388346212 +0200
+++ Python-3.12.10/Makefile.pre.in 2025-04-11 21:13:01.304095180 +0200
@@ -1914,7 +1914,7 @@
install|*) ensurepip="" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -156,7 +158,7 @@ Index: Python-3.12.4/Makefile.pre.in
fi
.PHONY: altinstall
@@ -1925,7 +1925,7 @@ altinstall: commoninstall
@@ -1925,7 +1925,7 @@
install|*) ensurepip="--altinstall" ;; \
esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -165,9 +167,9 @@ Index: Python-3.12.4/Makefile.pre.in
fi
.PHONY: commoninstall
Index: Python-3.12.4/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
Index: Python-3.12.10/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
===================================================================
--- /dev/null
+++ Python-3.12.4/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ Python-3.12.10/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst 2025-04-11 21:13:01.304672632 +0200
@@ -0,0 +1 @@
+A directory prefix can now be specified when using :mod:`ensurepip`.

View File

@@ -11,9 +11,11 @@
Doc/tools/extensions/patchlevel.py | 9 ++---
10 files changed, 100 insertions(+), 84 deletions(-)
--- a/Doc/Makefile
+++ b/Doc/Makefile
@@ -14,15 +14,15 @@ PAPER =
Index: Python-3.12.10/Doc/Makefile
===================================================================
--- Python-3.12.10.orig/Doc/Makefile 2025-04-11 21:04:46.171424996 +0200
+++ Python-3.12.10/Doc/Makefile 2025-04-11 21:18:23.184451081 +0200
@@ -14,15 +14,15 @@
SOURCES =
DISTVERSION = $(shell $(PYTHON) tools/extensions/patchlevel.py)
REQUIREMENTS = requirements.txt
@@ -33,27 +35,29 @@
$(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) $(SPHINXERRORHANDLING) \
. build/$(BUILDER) $(SOURCES)
--- a/Doc/conf.py
+++ b/Doc/conf.py
@@ -10,6 +10,8 @@ import importlib
import os
import sys
Index: Python-3.12.10/Doc/conf.py
===================================================================
--- Python-3.12.10.orig/Doc/conf.py 2025-04-11 21:04:42.254653936 +0200
+++ Python-3.12.10/Doc/conf.py 2025-04-11 21:18:44.605665782 +0200
@@ -11,6 +11,8 @@
from importlib import import_module
from importlib.util import find_spec
+from sphinx import version_info
+
# Make our custom extensions available to Sphinx
sys.path.append(os.path.abspath('tools/extensions'))
sys.path.append(os.path.abspath('includes'))
@@ -82,7 +84,7 @@ highlight_language = 'python3'
@@ -87,7 +89,7 @@
# Minimum version of sphinx required
# Keep this version in sync with ``Doc/requirements.txt``.
-needs_sphinx = '8.1.3'
-needs_sphinx = '8.2.0'
+needs_sphinx = '4.2.0'
# Create table of contents entries for domain objects (e.g. functions, classes,
# attributes, etc.). Default is True.
@@ -337,7 +339,7 @@ html_short_title = f'{release} Documenta
@@ -342,7 +344,7 @@
# (See .readthedocs.yml and https://docs.readthedocs.io/en/stable/reference/environment-variables.html)
is_deployment_preview = os.getenv("READTHEDOCS_VERSION_TYPE") == "external"
repository_url = os.getenv("READTHEDOCS_GIT_CLONE_URL", "")
@@ -62,7 +66,7 @@
html_context = {
"is_deployment_preview": is_deployment_preview,
"repository_url": repository_url or None,
@@ -583,6 +585,16 @@ extlinks = {
@@ -588,6 +590,16 @@
}
extlinks_detect_hardcoded_links = True
@@ -79,9 +83,11 @@
# Options for c_annotations extension
# -----------------------------------
--- a/Doc/tools/check-warnings.py
+++ b/Doc/tools/check-warnings.py
@@ -228,7 +228,8 @@ def fail_if_regression(
Index: Python-3.12.10/Doc/tools/check-warnings.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/check-warnings.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/check-warnings.py 2025-04-11 21:18:23.185204047 +0200
@@ -228,7 +228,8 @@
print(filename)
for warning in warnings:
if filename in warning:
@@ -91,7 +97,7 @@
print(" {line}: {msg}".format_map(match))
return -1
return 0
@@ -316,7 +317,7 @@ def main(argv: list[str] | None = None)
@@ -316,7 +317,7 @@
cwd = str(Path.cwd()) + os.path.sep
files_with_nits = {
@@ -100,8 +106,10 @@
for warning in warnings
if "Doc/" in warning
}
--- a/Doc/tools/extensions/audit_events.py
+++ b/Doc/tools/extensions/audit_events.py
Index: Python-3.12.10/Doc/tools/extensions/audit_events.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/audit_events.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/audit_events.py 2025-04-11 21:18:23.185493402 +0200
@@ -1,9 +1,6 @@
"""Support for documenting audit events."""
@@ -112,7 +120,7 @@
from docutils import nodes
from sphinx.errors import NoUri
@@ -12,12 +9,11 @@ from sphinx.transforms.post_transforms i
@@ -12,12 +9,11 @@
from sphinx.util import logging
from sphinx.util.docutils import SphinxDirective
@@ -129,7 +137,7 @@
logger = logging.getLogger(__name__)
@@ -32,16 +28,16 @@ _SYNONYMS = [
@@ -32,16 +28,16 @@
class AuditEvents:
def __init__(self) -> None:
@@ -150,7 +158,7 @@
) -> None:
if name in self.events:
self._check_args_match(name, args)
@@ -49,7 +45,7 @@ class AuditEvents:
@@ -49,7 +45,7 @@
self.events[name] = args
self.sources.setdefault(name, []).append(source)
@@ -159,7 +167,7 @@
current_args = self.events[name]
msg = (
f"Mismatched arguments for audit-event {name}: "
@@ -60,7 +56,7 @@ class AuditEvents:
@@ -60,7 +56,7 @@
if len(current_args) != len(args):
logger.warning(msg)
return
@@ -168,7 +176,7 @@
if a1 == a2:
continue
if any(a1 in s and a2 in s for s in _SYNONYMS):
@@ -73,7 +69,7 @@ class AuditEvents:
@@ -73,7 +69,7 @@
name_clean = re.sub(r"\W", "_", name)
return f"audit_event_{name_clean}_{source_count}"
@@ -177,7 +185,7 @@
for name in sorted(self.events.keys()):
yield name, self.events[name], self.sources[name]
@@ -97,7 +93,7 @@ def audit_events_purge(
@@ -97,7 +93,7 @@
def audit_events_merge(
app: Sphinx,
env: BuildEnvironment,
@@ -186,7 +194,7 @@
other: BuildEnvironment,
) -> None:
"""In Sphinx parallel builds, this merges audit_events from subprocesses."""
@@ -126,14 +122,16 @@ class AuditEvent(SphinxDirective):
@@ -126,14 +122,16 @@
),
]
@@ -209,7 +217,7 @@
else:
args = []
ids = []
@@ -169,7 +167,7 @@ class audit_event_list(nodes.General, no
@@ -169,7 +167,7 @@
class AuditEventListDirective(SphinxDirective):
@@ -218,7 +226,7 @@
return [audit_event_list()]
@@ -181,7 +179,11 @@ class AuditEventListTransform(SphinxPost
@@ -181,7 +179,11 @@
return
table = self._make_table(self.app.builder, self.env.docname)
@@ -231,7 +239,7 @@
node.replace_self(table)
def _make_table(self, builder: Builder, docname: str) -> nodes.table:
@@ -217,8 +219,8 @@ class AuditEventListTransform(SphinxPost
@@ -217,8 +219,8 @@
builder: Builder,
docname: str,
name: str,
@@ -242,8 +250,10 @@
) -> nodes.row:
row = nodes.row()
name_node = nodes.paragraph("", nodes.Text(name))
--- a/Doc/tools/extensions/availability.py
+++ b/Doc/tools/extensions/availability.py
Index: Python-3.12.10/Doc/tools/extensions/availability.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/availability.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/availability.py 2025-04-11 21:18:23.185756636 +0200
@@ -1,8 +1,6 @@
"""Support for documenting platform availability"""
@@ -254,7 +264,7 @@
from docutils import nodes
from sphinx import addnodes
@@ -53,7 +51,7 @@ class Availability(SphinxDirective):
@@ -53,7 +51,7 @@
optional_arguments = 0
final_argument_whitespace = True
@@ -263,7 +273,7 @@
title = sphinx_gettext("Availability")
refnode = addnodes.pending_xref(
title,
@@ -77,7 +75,7 @@ class Availability(SphinxDirective):
@@ -77,7 +75,7 @@
return [cnode]
@@ -272,7 +282,7 @@
"""Parse platform information from arguments
Arguments is a comma-separated string of platforms. A platform may
@@ -96,12 +94,13 @@ class Availability(SphinxDirective):
@@ -96,12 +94,13 @@
platform, _, version = arg.partition(" >= ")
if platform.startswith("not "):
version = False
@@ -288,7 +298,7 @@
logger.warning(
"Unknown platform%s or syntax '%s' in '.. availability:: %s', "
"see %s:KNOWN_PLATFORMS for a set of known platforms.",
@@ -114,7 +113,7 @@ class Availability(SphinxDirective):
@@ -114,7 +113,7 @@
return platforms
@@ -297,9 +307,11 @@
app.add_directive("availability", Availability)
return {
--- a/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py
@@ -9,22 +9,18 @@ Configuration:
Index: Python-3.12.10/Doc/tools/extensions/c_annotations.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/c_annotations.py 2025-04-11 21:16:39.007011463 +0200
+++ Python-3.12.10/Doc/tools/extensions/c_annotations.py 2025-04-11 21:18:23.185953242 +0200
@@ -9,22 +9,18 @@
* Set ``stable_abi_file`` to the path to stable ABI list.
"""
@@ -325,7 +337,7 @@
ROLE_TO_OBJECT_TYPE = {
"func": "function",
@@ -35,20 +31,20 @@ ROLE_TO_OBJECT_TYPE = {
@@ -35,20 +31,20 @@
}
@@ -350,7 +362,7 @@
class StableABIEntry:
# Role of the object.
# Source: Each [item_kind] in stable_abi.toml is mapped to a C Domain role.
@@ -67,7 +63,7 @@ class StableABIEntry:
@@ -67,7 +63,7 @@
struct_abi_kind: str
@@ -359,7 +371,7 @@
refcount_data = {}
refcounts = refcount_filename.read_text(encoding="utf8")
for line in refcounts.splitlines():
@@ -103,7 +99,7 @@ def read_refcount_data(refcount_filename
@@ -103,7 +99,7 @@
return refcount_data
@@ -368,7 +380,7 @@
stable_abi_data = {}
with open(stable_abi_file, encoding="utf8") as fp:
for record in csv.DictReader(fp):
@@ -127,11 +123,14 @@ def add_annotations(app: Sphinx, doctree
@@ -127,11 +123,14 @@
continue
if not par[0].get("ids", None):
continue
@@ -385,7 +397,7 @@
if ROLE_TO_OBJECT_TYPE[record.role] != objtype:
msg = (
f"Object type mismatch in limited API annotation for {name}: "
@@ -238,7 +237,7 @@ def _unstable_api_annotation() -> nodes.
@@ -238,7 +237,7 @@
)
@@ -394,7 +406,7 @@
classes = ["refcount"]
if result_refs is None:
rc = sphinx_gettext("Return value: Always NULL.")
@@ -258,7 +257,7 @@ class LimitedAPIList(SphinxDirective):
@@ -258,7 +257,7 @@
optional_arguments = 0
final_argument_whitespace = True
@@ -403,7 +415,7 @@
state = self.env.domaindata["c_annotations"]
content = [
f"* :c:{record.role}:`{record.name}`"
@@ -281,13 +280,23 @@ def init_annotations(app: Sphinx) -> Non
@@ -281,13 +280,23 @@
)
@@ -428,8 +440,10 @@
return {
"version": "1.0",
"parallel_read_safe": True,
--- a/Doc/tools/extensions/changes.py
+++ b/Doc/tools/extensions/changes.py
Index: Python-3.12.10/Doc/tools/extensions/changes.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/changes.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/changes.py 2025-04-11 21:18:23.186150755 +0200
@@ -1,7 +1,5 @@
"""Support for documenting version of changes, additions, deprecations."""
@@ -438,7 +452,7 @@
from typing import TYPE_CHECKING
from sphinx.domains.changeset import (
@@ -25,7 +23,7 @@ def expand_version_arg(argument: str, re
@@ -25,7 +23,7 @@
class PyVersionChange(VersionChange):
@@ -447,7 +461,7 @@
# Replace the 'next' special token with the current development version
self.arguments[0] = expand_version_arg(
self.arguments[0], self.config.release
@@ -43,7 +41,7 @@ class DeprecatedRemoved(VersionChange):
@@ -43,7 +41,7 @@
"Deprecated since version %s, removed in version %s"
)
@@ -456,7 +470,7 @@
# Replace the first two arguments (deprecated version and removed version)
# with a single tuple of both versions.
version_deprecated = expand_version_arg(
@@ -73,7 +71,7 @@ class DeprecatedRemoved(VersionChange):
@@ -73,7 +71,7 @@
versionlabel_classes[self.name] = ""
@@ -465,8 +479,10 @@
# Override Sphinx's directives with support for 'next'
app.add_directive("versionadded", PyVersionChange, override=True)
app.add_directive("versionchanged", PyVersionChange, override=True)
--- a/Doc/tools/extensions/glossary_search.py
+++ b/Doc/tools/extensions/glossary_search.py
Index: Python-3.12.10/Doc/tools/extensions/glossary_search.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/glossary_search.py 2025-04-11 21:16:39.007340209 +0200
+++ Python-3.12.10/Doc/tools/extensions/glossary_search.py 2025-04-11 21:18:23.186307620 +0200
@@ -1,18 +1,14 @@
"""Feature search results for glossary items prominently."""
@@ -488,7 +504,7 @@
logger = logging.getLogger(__name__)
@@ -60,7 +56,7 @@ def write_glossary_json(app: Sphinx, _ex
@@ -60,7 +56,7 @@
dest.write_text(json.dumps(app.env.glossary_terms), encoding='utf-8')
@@ -497,8 +513,10 @@
app.connect('doctree-resolved', process_glossary_nodes)
app.connect('build-finished', write_glossary_json)
--- a/Doc/tools/extensions/misc_news.py
+++ b/Doc/tools/extensions/misc_news.py
Index: Python-3.12.10/Doc/tools/extensions/misc_news.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/misc_news.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/misc_news.py 2025-04-11 21:18:23.186501571 +0200
@@ -1,7 +1,5 @@
"""Support for including Misc/NEWS."""
@@ -507,7 +525,7 @@
import re
from pathlib import Path
from typing import TYPE_CHECKING
@@ -24,13 +22,13 @@ Python News
@@ -24,13 +22,13 @@
+++++++++++
"""
@@ -524,7 +542,7 @@
r"^what's new in (.*?)\??$", re.ASCII | re.IGNORECASE | re.MULTILINE
)
@@ -42,7 +40,7 @@ class MiscNews(SphinxDirective):
@@ -42,7 +40,7 @@
final_argument_whitespace = False
option_spec = {}
@@ -533,7 +551,7 @@
# Get content of NEWS file
source, _ = self.get_source_info()
news_file = Path(source).resolve().parent / self.arguments[0]
@@ -54,7 +52,7 @@ class MiscNews(SphinxDirective):
@@ -54,7 +52,7 @@
return [nodes.strong(text, text)]
# remove first 3 lines as they are the main heading
@@ -542,7 +560,7 @@
news_text = bpo_issue_re.sub(r":issue:`\1`", news_text)
# Fallback handling for GitHub issues
@@ -65,7 +63,7 @@ class MiscNews(SphinxDirective):
@@ -65,7 +63,7 @@
return []
@@ -551,8 +569,10 @@
app.add_directive("miscnews", MiscNews)
return {
--- a/Doc/tools/extensions/patchlevel.py
+++ b/Doc/tools/extensions/patchlevel.py
Index: Python-3.12.10/Doc/tools/extensions/patchlevel.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/patchlevel.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/patchlevel.py 2025-04-11 21:18:23.186669122 +0200
@@ -3,7 +3,7 @@
import re
import sys
@@ -562,7 +582,7 @@
CPYTHON_ROOT = Path(
__file__, # cpython/Doc/tools/extensions/patchlevel.py
@@ -26,7 +26,7 @@ class version_info(NamedTuple): # noqa:
@@ -26,7 +26,7 @@
major: int #: Major release number
minor: int #: Minor release number
micro: int #: Patch release number
@@ -571,7 +591,7 @@
serial: int #: Serial release number
@@ -37,7 +37,8 @@ def get_header_version_info() -> version
@@ -37,7 +37,8 @@
defines = {}
patchlevel_h = PATCHLEVEL_H.read_text(encoding="utf-8")
for line in patchlevel_h.splitlines():
@@ -581,7 +601,7 @@
name, value = m.groups()
defines[name] = value
@@ -50,7 +51,7 @@ def get_header_version_info() -> version
@@ -50,7 +51,7 @@
)

View File

@@ -1,12 +1,13 @@
---
Doc/tools/extensions/c_annotations.py | 6 +++++-
Doc/tools/extensions/glossary_search.py | 12 ++++++++++--
Doc/tools/extensions/pyspecific.py | 5 ++++-
3 files changed, 19 insertions(+), 4 deletions(-)
2 files changed, 15 insertions(+), 3 deletions(-)
--- a/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py
@@ -117,7 +117,11 @@ def add_annotations(app: Sphinx, doctree
Index: Python-3.12.10/Doc/tools/extensions/c_annotations.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/c_annotations.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/c_annotations.py 2025-04-11 21:16:39.007011463 +0200
@@ -117,7 +117,11 @@
state = app.env.domaindata["c_annotations"]
refcount_data = state["refcount_data"]
stable_abi_data = state["stable_abi_data"]
@@ -19,9 +20,11 @@
par = node.parent
if par["domain"] != "c":
continue
--- a/Doc/tools/extensions/glossary_search.py
+++ b/Doc/tools/extensions/glossary_search.py
@@ -30,8 +30,16 @@ def process_glossary_nodes(
Index: Python-3.12.10/Doc/tools/extensions/glossary_search.py
===================================================================
--- Python-3.12.10.orig/Doc/tools/extensions/glossary_search.py 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/tools/extensions/glossary_search.py 2025-04-11 21:16:39.007340209 +0200
@@ -30,8 +30,16 @@
else:
terms = app.env.glossary_terms = {}
@@ -40,17 +43,3 @@
term = glossary_item[0].astext()
definition = glossary_item[-1]
--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -25,7 +25,10 @@ from sphinx.domains.python import PyFunc
from sphinx.locale import _ as sphinx_gettext
from sphinx.util.docutils import SphinxDirective
from sphinx.writers.text import TextWriter, TextTranslator
-from sphinx.util.display import status_iterator
+try:
+ from sphinx.util.display import status_iterator
+except ModuleNotFoundError:
+ from sphinx.util import status_iterator
ISSUE_URI = 'https://bugs.python.org/issue?@action=redirect&bpo=%s'

View File

@@ -3,9 +3,11 @@
Misc/NEWS | 2 +-
2 files changed, 1 insertion(+), 3 deletions(-)
--- a/Doc/using/configure.rst
+++ b/Doc/using/configure.rst
@@ -640,13 +640,11 @@ macOS Options
Index: Python-3.12.10/Doc/using/configure.rst
===================================================================
--- Python-3.12.10.orig/Doc/using/configure.rst 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Doc/using/configure.rst 2025-04-11 21:16:27.319169087 +0200
@@ -640,13 +640,11 @@
See ``Mac/README.rst``.
@@ -19,9 +21,11 @@
.. option:: --enable-framework=INSTALLDIR
Create a Python.framework rather than a traditional Unix install. Optional
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -14838,7 +14838,7 @@ C API
Index: Python-3.12.10/Misc/NEWS
===================================================================
--- Python-3.12.10.orig/Misc/NEWS 2025-04-08 13:35:47.000000000 +0200
+++ Python-3.12.10/Misc/NEWS 2025-04-11 21:16:27.326169052 +0200
@@ -15106,7 +15106,7 @@
- bpo-40939: Removed documentation for the removed ``PyParser_*`` C API.
- bpo-43795: The list in :ref:`limited-api-list` now shows the public name

View File

@@ -1,3 +1,169 @@
-------------------------------------------------------------------
Fri Apr 11 19:22:06 UTC 2025 - Matej Cepl <mcepl@cepl.eu>
- Update to 3.12.10:
- gh-131852: msgfmt no longer adds the POT-Creation-Date to
generated .mo files for consistency with GNU msgfmt.
- gh-85012: Correctly reset msgctxt when compiling messages in
msgfmt.
- gh-131050: test_ssl.test_dh_params is skipped if the
underlying TLS library does not support finite-field
ephemeral Diffie-Hellman.
- gh-119727: Add --single-process command line option to Python
test runner (regrtest). Patch by Victor Stinner.
- gh-131809: Update bundled libexpat to 2.7.1
- gh-131261: Upgrade to libexpat 2.7.0
- gh-127371: Avoid unbounded buffering for
tempfile.SpooledTemporaryFile.writelines(). Previously, disk
spillover was only checked after the lines iterator had been
exhausted. This is now done after each line is written.
- gh-121284: Fix bug in the folding of rfc2047 encoded-words
when flattening an email message using a modern email
policy. Previously when an encoded-word was too long for
a line, it would be decoded, split across lines, and
re-encoded. But commas and other special characters in the
original text could be left unencoded and unquoted. This
could theoretically be used to spoof header lines using a
carefully constructed encoded-word if the resulting rendered
email was transmitted or re-parsed.
- gh-116608: undeprecate functional API for importlib.resources
- gh-132075: Fix possible use of socket address structures
with uninitialized members. Now all structure members are
initialized with zeroes by default.
- gh-132002: Fix crash when deallocating contextvars.ContextVar
with weird unahashable string names.
- gh-131668: socket: Fix code parsing AF_BLUETOOTH socket
addresses.
- gh-131492: Fix a resource leak when constructing a
gzip.GzipFile with a filename fails, for example when passing
an invalid compresslevel.
- gh-131325: Fix sendfile fallback implementation to drain data
after writing to transport in asyncio.
- gh-129843: Fix incorrect argument passing in
warnings.warn_explicit().
- gh-131204: Use monospace font from System Font Stack for
cross-platform support in difflib.HtmlDiff.
- gh-131045: Fix issue with __contains__, values, and
pseudo-members for enum.Flag.
- gh-130959: Fix pure-Python implementation of
datetime.time.fromisoformat() to reject times with spaces in
fractional part (for example, 12:34:56.400 +02:00), matching
the C implementation. Patch by Michał Gorny.
- gh-130637: Add validation for numeric response data in
poplib.POP3.stat() method
- gh-130461: Remove .. index:: directives from the uuid module
documentation. These directives previously created entries
in the general index for getnode() as well as the uuid1(),
uuid3(), uuid4(), and uuid5() constructor functions.
- gh-130285: Fix corner case for random.sample() allowing the
counts parameter to specify an empty population. So now,
sample([], 0, counts=[]) and sample('abc', k=0, counts=[0, 0,
0]) both give the same result as sample([], 0).
- gh-130250: Fix regression in traceback.print_last().
- gh-118761: Reverts a change in the previous release
attempting to make some stdlib imports used within the
subprocess module lazy as this was causing errors during
__del__ finalizers calling methods such as terminate, or
kill, or send_signal.
- gh-130164: Fixed failure to raise TypeError in
inspect.Signature.bind() for positional-only arguments
provided by keyword when a variadic keyword argument (e.g.
**kwargs) is present.
- gh-130151: Fix reference leaks in _hashlib.hmac_new() and
_hashlib.hmac_digest(). Patch by Bénédikt Tran.
- gh-129726: Fix gzip.GzipFile raising an unraisable exception
during garbage collection when referring to a temporary
object by breaking the reference loop with weakref.
- gh-129583: Update bundled pip to 25.0.1
- gh-97850: Update the deprecation warning of
importlib.abc.Loader.load_module().
- gh-129603: Fix bugs where sqlite3.Row objects could segfault
if their inherited description was set to None. Patch by
Erlend Aasland.
- gh-117779: Fix reading duplicated entries in zipfile by
name. Reading duplicated entries (except the last one) by
ZipInfo now emits a warning instead of raising an exception.
- gh-128772: Fix pydoc for methods with the __module__
attribute equal to None.
- gh-92897: Scheduled the deprecation of the check_home
argument of sysconfig.is_python_build() to Python 3.15.
- gh-128703: Fix mimetypes.guess_type() to use default mapping
for empty Content-Type in registry.
- gh-126037: xml.etree.ElementTree: Fix a crash in
Element.find, Element.findtext and Element.findall when
the tag to find implements an __eq__() method mutating the
element being queried. Patch by Bénédikt Tran.
- gh-127712: Fix handling of the secure argument of
logging.handlers.SMTPHandler.
- gh-126033: xml.etree.ElementTree: Fix a crash in
Element.remove when the element is concurrently
mutated. Patch by Bénédikt Tran.
- gh-125553: Fix round-trip invariance for backslash
continuations in tokenize.untokenize().
- gh-101137: Mime type text/x-rst is now supported by
mimetypes.
- gh-113238: Add Anchor to importlib.resources (in order for
the code to comply with the documentation)
- gh-89039: When replace() method is called on a subclass
of datetime, date or time, properly call derived
constructor. Previously, only the base classs constructor
was called.
- Also, make sure to pass non-zero fold values when creating
subclasses in various methods. Previously, fold was silently
ignored.
- gh-129873: Simplify displaying the IDLE doc by only copying
the text section of idle.html to idlelib/help.html. Patch by
Stan Ulbrych.
- gh-131417: Mention asyncio.Future and asyncio.Task in generic
classes list.
- gh-125722: Require Sphinx 8.2.0 or later to build the Python
documentation. Patch by Adam Turner.
- gh-129712: The wheel tags supported by each macOS universal
SDK option are now documented.
- gh-46236: C API: Document PyUnicode_RSplit(),
PyUnicode_Partition() and PyUnicode_RPartition().
- gh-131670: Fix anext() failing on sync __anext__() raising an
exception.
- gh-130809: Fixed an issue where _PyFrame_LocalsToFast tries
to write module level values to hidden fasts.
- gh-130775: Do not crash on negative column and end_column in
ast locations.
- gh-130618: Fix a bug that was causing UnicodeDecodeError or
SystemError to be raised when using f-strings with lambda
expressions with non-ASCII characters. Patch by Pablo Galindo
- gh-130163: Fix possible crashes related to concurrent change
and use of the sys module attributes.
- gh-88887: Fixing multiprocessing Resource Tracker process
leaking, usually observed when running Python as PID 1.
- gh-116042: Fix location for SyntaxErrors of invalid escapes
in the tokenizer. Patch by Pablo Galindo
- gh-128632: Disallow __classdict__ as the name of a type
parameter. Using this name would previously crash the
interpreter in some circumstances.
- gh-125331: from __future__ import barry_as_FLUFL now works in
more contexts, including when it is used in files, with the
-c flag, and in the REPL when there are multiple statements
on the same line. Previously, it worked only on subsequent
lines in the REPL, and when the appropriate flags were passed
directly to compile(). Patch by Pablo Galindo.
- gh-107526: Revert converting vars, dir, next, getattr, and
iter to argument clinic.
- gh-107674: Fixed performance regression in sys.settrace.
- gh-131740: Update PyUnstable_GC_VisitObjects to traverse perm
gen.
- gh-131865: The DTrace build now properly passes the CC
and CFLAGS variables to the dtrace command when utilizing
SystemTap on Linux.
- gh-130740: Ensure that Python.h is included before
stdbool.h unless pyconfig.h is included before or in some
platform-specific contexts.
- gh-129838: Dont redefine _Py_NO_SANITIZE_UNDEFINED when
compiling with a recent GCC version and undefined sanitizer
enabled.
- gh-129660: Drop test_embed from PGO training, whose
contribution in recent versions is considered to be
ignorable.
-------------------------------------------------------------------
Mon Mar 10 15:44:31 UTC 2025 - Bernhard Wiedemann <bwiedemann@suse.com>

View File

@@ -118,7 +118,7 @@
# _md5.cpython-38m-x86_64-linux-gnu.so
%define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so
Name: %{python_pkg_name}%{psuffix}
Version: 3.12.9
Version: 3.12.10
Release: 0
Summary: Python 3 Interpreter
License: Python-2.0

View File

@@ -1,18 +1,21 @@
---
Lib/test/test_subprocess.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Lib/test/test_subprocess.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
Index: Python-3.12.4/Lib/test/test_subprocess.py
Index: Python-3.12.10/Lib/test/test_subprocess.py
===================================================================
--- Python-3.12.4.orig/Lib/test/test_subprocess.py
+++ Python-3.12.4/Lib/test/test_subprocess.py
@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase):
"time.sleep(3600)"],
# Some heavily loaded buildbots (sparc Debian 3.x) require
# this much time to start and print.
- timeout=3)
+ # OBS might require even more
+ timeout=10)
self.fail("Expected TimeoutExpired.")
self.assertEqual(c.exception.output, b'BDFL')
--- Python-3.12.10.orig/Lib/test/test_subprocess.py 2025-04-11 21:04:45.154639562 +0200
+++ Python-3.12.10/Lib/test/test_subprocess.py 2025-04-11 21:12:03.374471647 +0200
@@ -274,7 +274,11 @@
output = subprocess.check_output(
[sys.executable, "-c",
"import time; time.sleep(3600)"],
- timeout=0.1)
+ # Some heavily loaded buildbots (sparc Debian 3.x) require
+ # this much time to start and print.
+ # timeout=0.1)
+ # OBS might require even more
+ timeout=10)
def test_call_kwargs(self):
# call() function with keyword args