diff --git a/.coveragerc b/.coveragerc index 6e581776..c1323f88 100644 --- a/.coveragerc +++ b/.coveragerc @@ -11,5 +11,9 @@ omit = [report] show_missing = true fail_under = 95 +# Python 3.14 (PEP 649) defers annotation evaluation, so a bare `_children_layout:` +# declaration never executes and coverage stops counting it. Excluding it keeps the +# total comparable across versions. exclude_lines = raise NotImplementedError + ^\s*_children_layout: diff --git a/.github/workflows/pr_check.yml b/.github/workflows/pr_check.yml index 71a4436d..752404d2 100644 --- a/.github/workflows/pr_check.yml +++ b/.github/workflows/pr_check.yml @@ -13,11 +13,11 @@ jobs: runs-on: github-hosted-static-ip strategy: matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] steps: - uses: actions/checkout@master - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index 24d448a5..69a3666b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## \[Unreleased\] -- Nothing yet. +### Added + +- Python 3.14 is now tested and declared as supported. No source changes were needed; the full + suite passes on 3.14 as-is. ## \[8.1.4\] - 2026-09-08 diff --git a/pyproject.toml b/pyproject.toml index 8e4a1753..cc4c243a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] requires-python = ">=3.8.0" diff --git a/tox.ini b/tox.ini index 45c926ee..f997b37c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist={py38}-unit,{py39}-unit,{py310}-unit,{py311}-unit,{py312}-unit,{py313}-unit +envlist={py38}-unit,{py39}-unit,{py310}-unit,{py311}-unit,{py312}-unit,{py313}-unit,{py314}-unit skipsdist=true [gh-actions] @@ -10,6 +10,7 @@ python = 3.11: py311-unit 3.12: py312-unit 3.13: py313-unit + 3.14: py314-unit [testenv] commands =