From 5f5184f22ed0e749a58b7d2dc6f863b9c329df73 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Oct 2026 19:58:39 +0000 Subject: [PATCH 1/2] Initial plan From 35398c66ece7ff67b694e50f82a7e17c2f6b2212 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Oct 2026 20:02:34 +0000 Subject: [PATCH 2/2] Add Python 3.15 metadata, tests, and wheel builds Co-authored-by: PierreRaybaut <1311787+PierreRaybaut@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- .github/workflows/build_deploy.yml | 2 +- .github/workflows/test_pyqt5.yml | 2 +- doc/dev/platforms.rst | 2 +- plotpy/tests/unit/test_python_support.py | 17 +++++++++++++++++ pyproject.toml | 3 ++- 6 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 plotpy/tests/unit/test_python_support.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8171c691..7f024a82 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v4 - name: Build wheels - run: pipx run cibuildwheel==2.21.2 + run: pipx run cibuildwheel==4.3.1 - uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/build_deploy.yml b/.github/workflows/build_deploy.yml index 54470189..2d2f8d21 100644 --- a/.github/workflows/build_deploy.yml +++ b/.github/workflows/build_deploy.yml @@ -25,7 +25,7 @@ jobs: pip install babel - name: Build wheels - uses: pypa/cibuildwheel@v3.3.1 + uses: pypa/cibuildwheel@v4.3.1 env: CIBW_BEFORE_BUILD: pip install babel && pybabel compile -d plotpy/locale -D plotpy diff --git a/.github/workflows/test_pyqt5.yml b/.github/workflows/test_pyqt5.yml index 70c99afa..1a88da64 100644 --- a/.github/workflows/test_pyqt5.yml +++ b/.github/workflows/test_pyqt5.yml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.9", "3.13", "3.14"] + python-version: ["3.9", "3.13", "3.14", "3.15"] steps: - uses: actions/checkout@v4 diff --git a/doc/dev/platforms.rst b/doc/dev/platforms.rst index 621c19e6..1bd5b5ca 100644 --- a/doc/dev/platforms.rst +++ b/doc/dev/platforms.rst @@ -7,7 +7,7 @@ The following sections describe the reference platforms for the project. .. note:: - The officially supported Python versions are 3.9, 3.10, 3.11, 3.12 and 3.13. + The officially supported Python versions are 3.9 through 3.15. The officially supported Qt binding is PyQt5. However, efforts have been made and will continue to be made to support PyQt6 and PySide6 as well. diff --git a/plotpy/tests/unit/test_python_support.py b/plotpy/tests/unit/test_python_support.py new file mode 100644 index 00000000..af067802 --- /dev/null +++ b/plotpy/tests/unit/test_python_support.py @@ -0,0 +1,17 @@ +# Licensed under the terms of the BSD 3-Clause +# (see plotpy/LICENSE for details) + +"""Tests for supported Python versions in package metadata.""" + +from __future__ import annotations + +from importlib.metadata import metadata + +import pytest + + +@pytest.mark.parametrize("minor", range(9, 16)) +def test_python_classifiers(minor): + """Check that package metadata advertises every supported Python version.""" + classifiers = metadata("PlotPy").get_all("Classifier") + assert f"Programming Language :: Python :: 3.{minor}" in classifiers diff --git a/pyproject.toml b/pyproject.toml index cc5bb739..3f2c6a90 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Image Processing", "Topic :: Scientific/Engineering :: Human Machine Interfaces", @@ -117,5 +118,5 @@ line-ending = "auto" # Like Black, automatically detect the appropr convention = "google" [tool.cibuildwheel] -build = ["cp39-*", "cp310-*", "cp311-*", "cp312-*", "cp313-*", "cp314-*"] +build = ["cp39-*", "cp310-*", "cp311-*", "cp312-*", "cp313-*", "cp314-*", "cp315-*"] skip = ["*-manylinux_i686", "*-musllinux*"]