diff --git a/.github/py-shiny/setup/action.yaml b/.github/py-shiny/setup/action.yaml index 0c50c616e..723e5187b 100644 --- a/.github/py-shiny/setup/action.yaml +++ b/.github/py-shiny/setup/action.yaml @@ -4,7 +4,7 @@ inputs: python-version: description: 'Python version to use' required: false - default: "3.13" + default: "3.14" runs: using: "composite" steps: diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index aa78ef110..cff10c5f7 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -17,13 +17,14 @@ jobs: strategy: matrix: # "3.10" must be a string; otherwise it is interpreted as 3.1. - python-version: ["3.13", "3.12", "3.11", "3.10", "3.9"] + python-version: ["3.14", "3.13", "3.12", "3.11", "3.10"] os: [ubuntu-latest, windows-latest, macOS-latest] exclude: + - python-version: ${{ github.event.pull_request.draft && '3.14' }} + - python-version: ${{ github.event.pull_request.draft && '3.13' }} - python-version: ${{ github.event.pull_request.draft && '3.12' }} - python-version: ${{ github.event.pull_request.draft && '3.11' }} - python-version: ${{ github.event.pull_request.draft && '3.10' }} - - python-version: ${{ github.event.pull_request.draft && '3.9' }} - os: ${{ github.event.pull_request.draft && 'windows-latest' }} - os: ${{ github.event.pull_request.draft && 'macOS-latest' }} @@ -108,19 +109,16 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.13", "3.12", "3.11", "3.10", "3.9"] + python-version: ["3.14", "3.13", "3.12", "3.11", "3.10"] browser: ["chromium", "firefox", "webkit"] exclude: + - python-version: ${{ github.event.pull_request.draft && '3.14' }} + - python-version: ${{ github.event.pull_request.draft && '3.13' }} - python-version: ${{ github.event.pull_request.draft && '3.12' }} - python-version: ${{ github.event.pull_request.draft && '3.11' }} - python-version: ${{ github.event.pull_request.draft && '3.10' }} - - python-version: ${{ github.event.pull_request.draft && '3.9' }} - browser: ${{ github.event.pull_request.draft && 'firefox' }} - browser: ${{ github.event.pull_request.draft && 'webkit' }} - # There are many unexplained tests that fail on webkit w/ python 3.8, 3.9 - # Given the more recent versions of python work, we will exclude this combination - - browser: "webkit" - python-version: "3.9" fail-fast: false steps: @@ -157,13 +155,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.13", "3.12", "3.11", "3.10", "3.9"] + python-version: ["3.14", "3.13", "3.12", "3.11", "3.10"] browser: ["chromium", "firefox", "webkit"] exclude: + - python-version: ${{ github.event.pull_request.draft && '3.14' }} + - python-version: ${{ github.event.pull_request.draft && '3.13' }} - python-version: ${{ github.event.pull_request.draft && '3.12' }} - python-version: ${{ github.event.pull_request.draft && '3.11' }} - python-version: ${{ github.event.pull_request.draft && '3.10' }} - - python-version: ${{ github.event.pull_request.draft && '3.9' }} - browser: ${{ github.event.pull_request.draft && 'firefox' }} - browser: ${{ github.event.pull_request.draft && 'webkit' }} fail-fast: false @@ -201,8 +200,6 @@ jobs: path: py-shiny-templates - name: Install py-shiny-templates dependencies - if: matrix.python-version != '3.9' - # Scikit-learn 1.7.0+ requires Python 3.10+ run: | make ci-install-py-shiny-templates-deps @@ -222,13 +219,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.13", "3.12", "3.11", "3.10", "3.9"] + python-version: ["3.14", "3.13", "3.12", "3.11", "3.10"] browser: ["chromium", "firefox", "webkit"] exclude: + - python-version: ${{ github.event.pull_request.draft && '3.14' }} + - python-version: ${{ github.event.pull_request.draft && '3.13' }} - python-version: ${{ github.event.pull_request.draft && '3.12' }} - python-version: ${{ github.event.pull_request.draft && '3.11' }} - python-version: ${{ github.event.pull_request.draft && '3.10' }} - - python-version: ${{ github.event.pull_request.draft && '3.9' }} - browser: ${{ github.event.pull_request.draft && 'firefox' }} - browser: ${{ github.event.pull_request.draft && 'webkit' }} fail-fast: false diff --git a/pyproject.toml b/pyproject.toml index 3c11464c3..49e55a173 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,18 +15,18 @@ dynamic = ["version"] authors = [{ name = "Winston Chang", email = "winston@posit.co" }] description = "A web development framework for Python." readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.10" license = { text = "MIT" } classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] dependencies = [ "typing-extensions>=4.10.0", diff --git a/scripts/generate-imports.py b/scripts/generate-imports.py index a3bfc7f15..e516bc3a0 100755 --- a/scripts/generate-imports.py +++ b/scripts/generate-imports.py @@ -5,8 +5,8 @@ from types import ModuleType from typing import Union, cast -if sys.version_info < (3, 9): - raise RuntimeError("This script requires Python 3.9 or later") +if sys.version_info < (3, 10): + raise RuntimeError("This script requires Python 3.10 or later") def gen_init_py(package_name: str) -> None: diff --git a/tests/playwright/shiny/components/data_frame/pandas_compatible/test_df_pandas_compatible.py b/tests/playwright/shiny/components/data_frame/pandas_compatible/test_df_pandas_compatible.py index 0978b5708..283a74aca 100644 --- a/tests/playwright/shiny/components/data_frame/pandas_compatible/test_df_pandas_compatible.py +++ b/tests/playwright/shiny/components/data_frame/pandas_compatible/test_df_pandas_compatible.py @@ -1,16 +1,11 @@ import re from playwright.sync_api import Page -from utils.deploy_utils import skip_on_python_version from shiny.playwright import controller from shiny.run import ShinyAppProc -@skip_on_python_version( - "3.9", - reason="Astropy (and numpy) hav difficulty loading on python 3.9. posit-dev/py-shiny#1678", -) def test_data_frame_pandas_compatible( page: Page, local_app: ShinyAppProc,