From e37e54c1d7cc9d6b4f28fa3e8ba2573c4ecd439c Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 17 Nov 2024 13:54:58 +0100 Subject: [PATCH] Upgrade to Python 3.12.7 (#5149) --- .circleci/config.yml | 5 ++- .devcontainer/devcontainer.json | 2 +- Dockerfile | 4 +- Makefile.envs | 4 +- docs/project/changelog.md | 3 ++ docs/requirements-doc.txt | 2 +- packages/pygame-ce/meta.yaml | 1 + packages/test/meta.yaml | 1 + src/core/jsproxy.c | 2 +- src/tests/python_tests.yaml | 79 ++++++++++++++++++++++++--------- src/tests/test_pyodide.py | 10 ++++- 11 files changed, 81 insertions(+), 32 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1a4dc6d8f..407a27ae6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ defaults: &defaults # Note: when updating the docker image version, # make sure there are no extra old versions lying around. # (e.g. `rg -F --hidden `) - - image: pyodide/pyodide-env:20241028-chrome130-firefox131 + - image: pyodide/pyodide-env:20241106-chrome130-firefox132 environment: - EMSDK_NUM_CORES: 3 EMCC_CORES: 3 @@ -339,7 +339,8 @@ jobs: command: | make npm-link pip install -r requirements.txt - pytest -s benchmark/stack_usage.py --rt node,chrome,firefox | sed -n 's/## //pg' + # TODO(cclauss): Re-add 'firefox' below. + pytest -s benchmark/stack_usage.py --rt node,chrome | sed -n 's/## //pg' test-js: <<: *defaults diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9ecfffcad..c180d848a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ { "name": "Docker", // keep in sync with "run_docker" - "image": "pyodide/pyodide-env:20241028-chrome130-firefox131", + "image": "pyodide/pyodide-env:20241106-chrome130-firefox132", "remoteUser": "root", "onCreateCommand": ".devcontainer/onCreate-docker.sh" } diff --git a/Dockerfile b/Dockerfile index 10c084043..6813b87b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM node:20.11-bookworm-slim AS node-image -FROM python:3.12.1-slim-bookworm +FROM python:3.12.7-slim-bookworm # Requirements for building packages RUN apt-get update \ @@ -104,7 +104,7 @@ RUN if [ $CHROME_VERSION = "latest" ]; \ then CHROME_VERSION_FULL=$(wget --no-verbose -O - "https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE"); \ else CHROME_VERSION_FULL=$(wget --no-verbose -O - "https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_${CHROME_VERSION}"); \ fi \ - && CHROME_DOWNLOAD_URL="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION_FULL}-1_amd64.deb" \ + && CHROME_DOWNLOAD_URL="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb." \ && CHROMEDRIVER_DOWNLOAD_URL="https://storage.googleapis.com/chrome-for-testing-public/${CHROME_VERSION_FULL}/linux64/chromedriver-linux64.zip" \ && wget --no-verbose -O /tmp/google-chrome.deb ${CHROME_DOWNLOAD_URL} \ && apt-get update \ diff --git a/Makefile.envs b/Makefile.envs index 54fea4eb4..34b54834f 100644 --- a/Makefile.envs +++ b/Makefile.envs @@ -1,9 +1,9 @@ -export PYVERSION ?= 3.12.1 +export PYVERSION ?= 3.12.7 export PYODIDE_EMSCRIPTEN_VERSION ?= 3.1.58 export PYODIDE_VERSION ?= 0.27.0.dev0 export PYODIDE_ABI_VERSION ?= 2024_0 -export PYTHON_ARCHIVE_SHA256=d01ec6a33bc10009b09c17da95cc2759af5a580a7316b3a446eb4190e13f97b2 +export PYTHON_ARCHIVE_SHA256=73ac8fe780227bf371add8373c3079f42a0dc62deff8d612cd15a618082ab623 ifdef CPYTHON_DEBUG export CPYTHON_ABI_FLAGS=d diff --git a/docs/project/changelog.md b/docs/project/changelog.md index 67a093d8d..39bc18750 100644 --- a/docs/project/changelog.md +++ b/docs/project/changelog.md @@ -16,6 +16,9 @@ myst: ## Unreleased +- {{ Enhancement }} Upgrade to Python 3.12.7. + {pr}`5149` + - {{ Enhancement }} Add unix-timezones module, which installs Unix compatible timezone data in /usr/share/zoneinfo, for use with C/C++ libraries which do timezone handling. diff --git a/docs/requirements-doc.txt b/docs/requirements-doc.txt index b62d33da3..c66b0e76a 100644 --- a/docs/requirements-doc.txt +++ b/docs/requirements-doc.txt @@ -22,4 +22,4 @@ pyodide-build>=0.27.3 micropip==0.2.2 jinja2>=3.0 ruamel.yaml -sphinx-js @ git+https://github.com/pyodide/sphinx-js-fork@14958086d51939ae4078751abec004e1f3fea1fe +sphinx-js @ git+https://github.com/pyodide/sphinx-js-fork@1428f1547b510a1574c227ced4356ba546a21f74 diff --git a/packages/pygame-ce/meta.yaml b/packages/pygame-ce/meta.yaml index 464c3dce7..030adc389 100644 --- a/packages/pygame-ce/meta.yaml +++ b/packages/pygame-ce/meta.yaml @@ -31,6 +31,7 @@ build: -sUSE_LIBPNG=1 -sUSE_GIFLIB=1 -sUSE_HARFBUZZ=1 + -Wno-unreachable-code-fallthrough ldflags: | -sRELOCATABLE=1 -sUSE_SDL=2 diff --git a/packages/test/meta.yaml b/packages/test/meta.yaml index 5af447fe6..0f20fff9a 100644 --- a/packages/test/meta.yaml +++ b/packages/test/meta.yaml @@ -51,6 +51,7 @@ build: _testcapi/code.c \ _testcapi/buffer.c \ _testcapi/pyos.c \ + _testcapi/run.c \ _testcapi/file.c \ _testcapi/codec.c \ _testcapi/immortal.c \ diff --git a/src/core/jsproxy.c b/src/core/jsproxy.c index 711b15e13..4e3b3d09b 100644 --- a/src/core/jsproxy.c +++ b/src/core/jsproxy.c @@ -1698,7 +1698,7 @@ JsArray_ass_subscript(PyObject* self, PyObject* item, PyObject* pyvalue) slicelength = PySlice_AdjustIndices(length, &start, &stop, step); if (pyvalue != NULL) { - seq = PySequence_Fast(pyvalue, "can only assign an iterable"); + seq = PySequence_Fast(pyvalue, "must assign iterable to extended slice"); FAIL_IF_NULL(seq); } if (pyvalue != NULL && step != 1 && diff --git a/src/tests/python_tests.yaml b/src/tests/python_tests.yaml index 8e5a875d5..07869b7ec 100644 --- a/src/tests/python_tests.yaml +++ b/src/tests/python_tests.yaml @@ -57,10 +57,9 @@ xfail: slow, sometimes times out - test_array - test_asdl_parser -- test_ast: - xfail-safari: Stack overflow +- test_ast.test_ast: skip: - - test_stdlib_validates # incompatible with zipimport + - "*_recursion_*" - test_asyncgen: xfail: async - test_asyncio.test_base_events: @@ -97,6 +96,7 @@ xfail: async - test_asyncio.test_ssl - test_asyncio.test_sslproto +- test_asyncio.test_staggered - test_asyncio.test_streams: xfail: async - test_asyncio.test_subprocess: @@ -179,9 +179,12 @@ - test_capi.test_misc: skip: - "*subinterpreter*" # Should we disable _xxsubinterpreters in Setup.local? +- test_capi.test_number +- test_capi.test_run - test_capi.test_set - test_capi.test_structmembers - test_capi.test_sys +- test_capi.test_tuple - test_capi.test_unicode - test_capi.test_watchers - test_cgi: @@ -189,7 +192,9 @@ - test_log # OSError: [Errno 70] Invalid seek - test_cgitb - test_charmapcodec -- test_class +- test_class: + skip: + - testSFBug532646 # Maximum call stack size exceeded - test_clinic - test_cmath - test_cmd @@ -216,7 +221,10 @@ - test_collections - test_colorsys - test_compare -- test_compile +- test_compile: + skip: + - test_compiler_recursion_limit + - test_extended_arg - test_compileall: xfail: multiprocessing - test_compiler_assemble @@ -238,7 +246,11 @@ - test_contextlib - test_contextlib_async: xfail: async -- test_copy +- test_copy: + skip: + - test_deepcopy_reflexive_dict + - test_deepcopy_reflexive_list + - test_deepcopy_reflexive_tuple - test_copyreg: xfail: dbm - test_coroutines: @@ -250,7 +262,9 @@ - test_ctypes.test_anon - test_ctypes.test_array_in_pointer - test_ctypes.test_arrays -- test_ctypes.test_as_parameter +- test_ctypes.test_as_parameter: + skip: + - test_recursive_as_param - test_ctypes.test_bitfields - test_ctypes.test_buffers - test_ctypes.test_bytes @@ -293,7 +307,9 @@ - test_ctypes.test_struct_fields - test_ctypes.test_structures: skip: + - test_array_in_struct - test_array_in_struct_registers # needs https://github.com/libffi/libffi/pull/818 + - test_issue18060* - test_ctypes.test_unaligned_structures - test_ctypes.test_unicode - test_ctypes.test_values @@ -320,16 +336,19 @@ xfail: stack overflow - test_descrtut - test_devpoll -- test_dict +- test_dict: + skip: + - test_repr_deep - test_dict_version - test_dictcomps -- test_dictviews +- test_dictviews: + skip: + - test_deeply_nested_repr - test_difflib - test_dis: xfail-safari: safaridriver unexpectedly exited -- test_doctest: - xfail: subprocess -- test_doctest2 +- test_doctest.test_doctest +- test_doctest.test_doctest2 - test_docxmlrpc: xfail: socket - test_dtrace: @@ -367,7 +386,10 @@ - test_epoll - test_errno - test_except_star -- test_exception_group +- test_exception_group: + skip: + - test_deep_split + - test_deep_subgroup - test_exception_hierarchy - test_exception_variations - test_exceptions: @@ -403,13 +425,15 @@ skip: # frozen modules are disabled in runtime - test_unfrozen_submodule_in_frozen_package -- test_fstring +- test_fstring: + xfail-chrome: times out on Python 3.12.7 - test_ftplib: xfail: socket - test_funcattrs - test_functools: skip: - "*threaded*" + - test_recursive_pickle - test_future_stmt.test_future - test_future_stmt.test_future_flags - test_future_stmt.test_future_multiple_features @@ -540,7 +564,10 @@ # The remaining test_io tests seem to hang too - test_ioctl - test_ipaddress -- test_isinstance +- test_isinstance: + skip: + - "*recursion*" + - "*infinite*" - test_iter - test_iterlen - test_itertools @@ -555,7 +582,8 @@ - test_json.test_pass1 - test_json.test_pass2 - test_json.test_pass3 -- test_json.test_recursion +- test_json.test_recursion: + xfail: Stack overflow - test_json.test_scanstring - test_json.test_separators - test_json.test_speedups @@ -588,7 +616,9 @@ - test_clearcache - test_getline - test_memoryerror -- test_list +- test_list: + skip: + - test_repr_deep - test_listcomps - test_lltrace - test_locale: @@ -727,8 +757,8 @@ skip: - test_stdin # fork - test_pyclbr -- test_pydoc: - xfail: pydoc_data unvendored +- test_pydoc.test_pydoc: + xfail: Missing doc data - test_pyexpat - test_queue: # More than half of these make a thread @@ -873,6 +903,8 @@ - test_sly_relative* - test_extractall* - test_parent_symlink* + - test_overwrite_broken_file_symlink_as_file + - test_overwrite_file_as_implicit_dir - test_tcl - test_telnetlib: xfail: 7/19 fail with sockets @@ -923,6 +955,7 @@ - test_tomllib.test_misc - test_tools.test_freeze - test_tools.test_i18n +- test_tools.test_makefile - test_tools.test_reindent - test_tools.test_sundry - test_trace: @@ -974,6 +1007,7 @@ - test_unittest.test_setups - test_unittest.test_skipping - test_unittest.test_suite +- test_unittest.test_util - test_univnewlines - test_unpack - test_unpack_ex @@ -989,8 +1023,10 @@ - test_urllib_response - test_urllibnet - test_urlparse -- test_userdict -- test_userlist +- test_userdict: + xfail: Stack overflow +- test_userlist: + xfail: Stack overflow - test_userstring - test_utf8_mode - test_utf8source @@ -1010,6 +1046,7 @@ - test_weakset - test_webbrowser: xfail: replaced +- test_winapi - test_winconsoleio - test_winreg - test_winsound diff --git a/src/tests/test_pyodide.py b/src/tests/test_pyodide.py index 73a97f6ce..f1b8f4d14 100644 --- a/src/tests/test_pyodide.py +++ b/src/tests/test_pyodide.py @@ -280,7 +280,10 @@ def test_relaxed_call(): return [a, args, b] with pytest.raises( - TypeError, match="'a' parameter is positional only, but was passed as a keyword" + TypeError, + match=re.escape( + "test_relaxed_call..f4() missing 1 required positional argument: 'a'" + ), ): relaxed_call(f4, a=2, b=7) @@ -342,7 +345,10 @@ def test_relaxed_wrap(): return [a, args, b] with pytest.raises( - TypeError, match="'a' parameter is positional only, but was passed as a keyword" + TypeError, + match=re.escape( + "test_relaxed_wrap..f4() missing 1 required positional argument: 'a'" + ), ): f4(a=2, b=7)