diff --git a/pyodide_build/buildall.py b/pyodide_build/buildall.py index 4fdfedbf..6d56b6e4 100755 --- a/pyodide_build/buildall.py +++ b/pyodide_build/buildall.py @@ -5,13 +5,13 @@ """ import dataclasses +import datetime import shutil import subprocess import sys from collections import defaultdict from collections.abc import Iterable, Iterator from contextlib import contextmanager -from datetime import datetime from functools import total_ordering from graphlib import TopologicalSorter from pathlib import Path @@ -188,7 +188,7 @@ def __init__( self.finished = False def finish(self, success: bool, elapsed_time: float) -> None: - time = datetime.utcfromtimestamp(elapsed_time) + time = datetime.datetime.fromtimestamp(elapsed_time, tz=datetime.UTC) if time.minute == 0: minutes = "" else: diff --git a/pyodide_build/buildpkg.py b/pyodide_build/buildpkg.py index 622b3a0f..7a3225fa 100755 --- a/pyodide_build/buildpkg.py +++ b/pyodide_build/buildpkg.py @@ -11,6 +11,7 @@ import shutil import subprocess import sys +import warnings from collections.abc import Iterator from datetime import datetime from pathlib import Path @@ -348,7 +349,12 @@ def _download_and_extract(self) -> None: shutil.copy(tarballpath, self.src_dist_dir) return - shutil.unpack_archive(tarballpath, self.build_dir) + with warnings.catch_warnings(): + # Python 3.12-3.13 emits a DeprecationWarning when using shutil.unpack_archive without a filter, + # but filter doesn't work well for zip files, so we suppress the warning until we find a better solution. + # https://github.com/python/cpython/issues/112760 + warnings.simplefilter("ignore") + shutil.unpack_archive(tarballpath, self.build_dir) extract_dir_name = self.source_metadata.extract_dir if extract_dir_name is None: diff --git a/pyodide_build/tests/test_bash_runner.py b/pyodide_build/tests/test_bash_runner.py index 4bd1839c..df94324d 100644 --- a/pyodide_build/tests/test_bash_runner.py +++ b/pyodide_build/tests/test_bash_runner.py @@ -70,7 +70,5 @@ def test_subprocess_with_shared_env_logging(capfd, tmp_path): "Running test2 script in", str(dir), ] - assert [l.strip() for l in cap.err.splitlines()] == [ - "ERROR: test2 script failed", - "exit 7", - ] + + assert "ERROR: test2 script failed" in cap.err diff --git a/pyodide_build/tests/test_cli.py b/pyodide_build/tests/test_cli.py index 5f3b57d2..f2bde964 100644 --- a/pyodide_build/tests/test_cli.py +++ b/pyodide_build/tests/test_cli.py @@ -18,11 +18,6 @@ skeleton, ) -only_node = pytest.mark.xfail_browsers( - chrome="node only", firefox="node only", safari="node only" -) - - runner = CliRunner() diff --git a/pyodide_build/xbuildenv_releases.py b/pyodide_build/xbuildenv_releases.py index 4bddf9cc..b0782b3a 100644 --- a/pyodide_build/xbuildenv_releases.py +++ b/pyodide_build/xbuildenv_releases.py @@ -1,7 +1,6 @@ import os from functools import cache -import pydantic from packaging.version import Version from pydantic import BaseModel, ConfigDict @@ -23,9 +22,7 @@ class CrossBuildEnvReleaseSpec(BaseModel): # Minimum and maximum pyodide-build versions that is compatible with this release min_pyodide_build_version: str | None = None max_pyodide_build_version: str | None = None - model_config = ConfigDict( - extra=pydantic.Extra.forbid, title="CrossBuildEnvReleasesSpec" - ) + model_config = ConfigDict(extra="forbid", title="CrossBuildEnvReleasesSpec") @property def python_version_tuple(self) -> tuple[int, int, int]: @@ -95,7 +92,7 @@ class CrossBuildEnvMetaSpec(BaseModel): releases: dict[str, CrossBuildEnvReleaseSpec] model_config = ConfigDict( - extra=pydantic.Extra.forbid, + extra="forbid", title="CrossBuildEnvMetaSpec", ) @@ -224,6 +221,8 @@ def load_cross_build_env_metadata(url_or_filename: str) -> CrossBuildEnvMetaSpec response = requests.get(url_or_filename) response.raise_for_status() data = response.json() - return CrossBuildEnvMetaSpec.parse_obj(data) + return CrossBuildEnvMetaSpec.model_validate(data) - return CrossBuildEnvMetaSpec.parse_file(url_or_filename) + with open(url_or_filename) as f: + data = f.read() + return CrossBuildEnvMetaSpec.model_validate_json(data)