From aafb1435d803c68ea3bbd2748f1e141c9deaadb0 Mon Sep 17 00:00:00 2001 From: Ani <5357586+anistark@users.noreply.github.com> Date: Wed, 23 Jul 2025 01:20:13 +0530 Subject: [PATCH 1/2] Use `test.support.is_wasm32` flag for `is_emscripten` or `is_wasi` for generic checks (GH-136815) Co-authored-by: Brett Cannon --- Lib/test/pythoninfo.py | 1 + Lib/test/support/__init__.py | 5 ++++- Lib/test/test_build_details.py | 4 ++-- Lib/test/test_import/__init__.py | 4 ++-- Lib/test/test_pathlib/test_pathlib.py | 6 +++--- Lib/test/test_pty.py | 4 ++-- Lib/test/test_pydoc/test_pydoc.py | 4 ++-- Lib/test/test_support.py | 2 +- Lib/test/test_venv.py | 4 ++-- 9 files changed, 19 insertions(+), 15 deletions(-) diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py index 80a262c18a5ad2..e8718decf6d6e9 100644 --- a/Lib/test/pythoninfo.py +++ b/Lib/test/pythoninfo.py @@ -762,6 +762,7 @@ def collect_support(info_add): 'is_emscripten', 'is_jython', 'is_wasi', + 'is_wasm32', ) copy_attributes(info_add, support, 'support.%s', attributes) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 196a2e5c600e24..100438bf71d3a6 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -569,6 +569,9 @@ def skip_android_selinux(name): is_emscripten = sys.platform == "emscripten" is_wasi = sys.platform == "wasi" +# Use is_wasm32 as a generic check for WebAssembly platforms. +is_wasm32 = is_emscripten or is_wasi + def skip_emscripten_stack_overflow(): return unittest.skipIf(is_emscripten, "Exhausts stack on Emscripten") @@ -3148,7 +3151,7 @@ def linked_to_musl(): # emscripten (at least as far as we're concerned) and wasi use musl, # but platform doesn't know how to get the version, so set it to zero. - if is_emscripten or is_wasi: + if is_wasm32: _linked_to_musl = (0, 0, 0) return _linked_to_musl diff --git a/Lib/test/test_build_details.py b/Lib/test/test_build_details.py index 691fd0bb98c097..bc04963f5ad613 100644 --- a/Lib/test/test_build_details.py +++ b/Lib/test/test_build_details.py @@ -5,7 +5,7 @@ import string import unittest -from test.support import is_android, is_apple_mobile, is_emscripten, is_wasi +from test.support import is_android, is_apple_mobile, is_wasm32 class FormatTestsBase: @@ -91,7 +91,7 @@ def test_implementation(self): @unittest.skipIf(os.name != 'posix', 'Feature only implemented on POSIX right now') -@unittest.skipIf(is_wasi or is_emscripten, 'Feature not available on WebAssembly builds') +@unittest.skipIf(is_wasm32, 'Feature not available on WebAssembly builds') class CPythonBuildDetailsTests(unittest.TestCase, FormatTestsBase): """Test CPython's install details file implementation.""" diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index 6e34094c5aa422..abbd5f1ed5f12f 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -35,7 +35,7 @@ cpython_only, is_apple_mobile, is_emscripten, - is_wasi, + is_wasm32, run_in_subinterp, run_in_subinterp_with_config, Py_TRACE_REFS, @@ -1257,7 +1257,7 @@ class FilePermissionTests(unittest.TestCase): @unittest.skipUnless(os.name == 'posix', "test meaningful only on posix systems") @unittest.skipIf( - is_emscripten or is_wasi, + is_wasm32, "Emscripten's/WASI's umask is a stub." ) def test_creation_mode(self): diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py index 16d30e3ca2d17d..a1105aae6351b6 100644 --- a/Lib/test/test_pathlib/test_pathlib.py +++ b/Lib/test/test_pathlib/test_pathlib.py @@ -17,7 +17,7 @@ from test.support import import_helper from test.support import cpython_only -from test.support import is_emscripten, is_wasi +from test.support import is_emscripten, is_wasi, is_wasm32 from test.support import infinite_recursion from test.support import os_helper from test.support.os_helper import TESTFN, FS_NONASCII, FakePath @@ -3158,7 +3158,7 @@ def test_absolute_posix(self): self.assertEqual(str(P('//a/b').absolute()), '//a/b') @unittest.skipIf( - is_emscripten or is_wasi, + is_wasm32, "umask is not implemented on Emscripten/WASI." ) @needs_posix @@ -3189,7 +3189,7 @@ def test_resolve_root(self): os.chdir(current_directory) @unittest.skipIf( - is_emscripten or is_wasi, + is_wasm32, "umask is not implemented on Emscripten/WASI." ) @needs_posix diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py index 4836f38c388c05..ed4fe8a140879d 100644 --- a/Lib/test/test_pty.py +++ b/Lib/test/test_pty.py @@ -1,6 +1,6 @@ import unittest from test.support import ( - is_android, is_apple_mobile, is_emscripten, is_wasi, reap_children, verbose + is_android, is_apple_mobile, is_wasm32, reap_children, verbose ) from test.support.import_helper import import_module from test.support.os_helper import TESTFN, unlink @@ -8,7 +8,7 @@ # Skip these tests if termios is not available import_module('termios') -if is_android or is_apple_mobile or is_emscripten or is_wasi: +if is_android or is_apple_mobile or is_wasm32: raise unittest.SkipTest("pty is not available on this platform") import errno diff --git a/Lib/test/test_pydoc/test_pydoc.py b/Lib/test/test_pydoc/test_pydoc.py index 005526d994bd62..3b50ead00bdd31 100644 --- a/Lib/test/test_pydoc/test_pydoc.py +++ b/Lib/test/test_pydoc/test_pydoc.py @@ -33,7 +33,7 @@ assert_python_failure, spawn_python) from test.support import threading_helper from test.support import (reap_children, captured_stdout, - captured_stderr, is_emscripten, is_wasi, + captured_stderr, is_wasm32, requires_docstrings, MISSING_C_DOCSTRINGS) from test.support.os_helper import (TESTFN, rmtree, unlink) from test.test_pydoc import pydoc_mod @@ -2081,7 +2081,7 @@ def test_html_doc_routines_in_module(self): @unittest.skipIf( - is_emscripten or is_wasi, + is_wasm32, "Socket server not available on Emscripten/WASI." ) class PydocServerTest(unittest.TestCase): diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 92b3ef26cd979a..9ec382afb65fe4 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -787,7 +787,7 @@ def test_get_signal_name(self): def test_linked_to_musl(self): linked = support.linked_to_musl() self.assertIsNotNone(linked) - if support.is_wasi or support.is_emscripten: + if support.is_wasm32: self.assertTrue(linked) # The value is cached, so make sure it returns the same value again. self.assertIs(linked, support.linked_to_musl()) diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index d62f3fba2d1a94..3c18c9c2900ad7 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -21,7 +21,7 @@ from test.support import (captured_stdout, captured_stderr, skip_if_broken_multiprocessing_synchronize, verbose, requires_subprocess, is_android, is_apple_mobile, - is_emscripten, is_wasi, + is_wasm32, requires_venv_with_pip, TEST_HOME_DIR, requires_resource, copy_python_src_ignore) from test.support.os_helper import (can_symlink, EnvironmentVarGuard, rmtree, @@ -42,7 +42,7 @@ or sys._base_executable != sys.executable, 'cannot run venv.create from within a venv on this platform') -if is_android or is_apple_mobile or is_emscripten or is_wasi: +if is_android or is_apple_mobile or is_wasm32: raise unittest.SkipTest("venv is not available on this platform") @requires_subprocess() From b13a5df52fc854d1097e8b5419cb8802dc4059e0 Mon Sep 17 00:00:00 2001 From: Nathan Goldbaum Date: Tue, 22 Jul 2025 14:27:50 -0600 Subject: [PATCH 2/2] gh-133296: Fix versionadded for C API functions that were backported (#137024) --- Doc/c-api/init.rst | 6 +++--- Doc/whatsnew/3.14.rst | 1 + Doc/whatsnew/3.15.rst | 2 -- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index d35e905b2e72df..e3ad4f4cdc52cc 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -2287,7 +2287,7 @@ The C-API provides a basic mutual exclusion lock. should not be used to make concurrency control decisions, as the lock state may change immediately after the check. - .. versionadded:: next + .. versionadded:: 3.14 .. _python-critical-section-api: @@ -2372,7 +2372,7 @@ code triggered by the finalizer blocks and calls :c:func:`PyEval_SaveThread`. On the default build, this macro expands to ``{``. - .. versionadded:: next + .. versionadded:: 3.14 .. c:macro:: Py_END_CRITICAL_SECTION() @@ -2418,7 +2418,7 @@ code triggered by the finalizer blocks and calls :c:func:`PyEval_SaveThread`. On the default build, this macro expands to ``{``. - .. versionadded:: next + .. versionadded:: 3.14 .. c:macro:: Py_END_CRITICAL_SECTION2() diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index e45a2bfa485c50..44ee2bbeb7761f 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -3035,6 +3035,7 @@ Porting to Python 3.14 * ``_Py_GetConfig()``: :c:func:`PyConfig_Get` and :c:func:`PyConfig_GetInt` * ``_Py_HashBytes()``: :c:func:`Py_HashBuffer` * ``_Py_fopen_obj()``: :c:func:`Py_fopen` + * ``PyMutex_IsLocked()`` : :c:func:`PyMutex_IsLocked` The `pythoncapi-compat project`_ can be used to get most of these new functions on Python 3.13 and older. diff --git a/Doc/whatsnew/3.15.rst b/Doc/whatsnew/3.15.rst index 4d4fb77ad4f030..e8e2c1ed6047bf 100644 --- a/Doc/whatsnew/3.15.rst +++ b/Doc/whatsnew/3.15.rst @@ -504,8 +504,6 @@ Porting to Python 3.15 * Private functions promoted to public C APIs: - * ``PyMutex_IsLocked()`` : :c:func:`PyMutex_IsLocked` - The |pythoncapi_compat_project| can be used to get most of these new functions on Python 3.14 and older.