From 0895d92075df62af92b061d273ba020d16965703 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Thu, 23 Oct 2025 11:42:32 -0400 Subject: [PATCH 01/16] updates trove classifier --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index d125caf..f64b46a 100644 --- a/setup.py +++ b/setup.py @@ -84,6 +84,7 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Operating System :: OS Independent", "Topic :: Internet", ], From fe34053529e88d6963ffbbbf598ab324e96cf8e5 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Wed, 22 Oct 2025 16:36:48 -0400 Subject: [PATCH 02/16] feat: Add constraints file for Python 3.14 --- testing/constraints-3.14.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 testing/constraints-3.14.txt diff --git a/testing/constraints-3.14.txt b/testing/constraints-3.14.txt new file mode 100644 index 0000000..e69de29 From 05194eb5af302d65d1ee1b9e46956f26e13f2c15 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Wed, 22 Oct 2025 16:36:49 -0400 Subject: [PATCH 03/16] ci: Add Python 3.14 to GitHub Actions workflow --- .github/workflows/unittest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 1c9d078..aaab92a 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout uses: actions/checkout@v4 From 72667c9404619ecaf67352bbdf7e8934a96f8d24 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Thu, 23 Oct 2025 06:28:06 -0400 Subject: [PATCH 04/16] fix(kokoro): Preserve NOX_SESSION in presubmit.cfg --- owlbot.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/owlbot.py b/owlbot.py index c42e67f..47c0250 100644 --- a/owlbot.py +++ b/owlbot.py @@ -32,12 +32,6 @@ ) s.move(templated_files, excludes=["docs/multiprocessing.rst", "README.rst"]) -s.replace( - ".github/workflows/lint.yml", - 'python-version: "3.8"', - 'python-version: "3.10"' -) - s.replace( ".kokoro/presubmit/presubmit.cfg", """# Format: //devtools/kokoro/config/proto/build.proto""", From e2655686f6a19904cdab91bb476f47dba27a790b Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Thu, 23 Oct 2025 07:28:09 -0400 Subject: [PATCH 05/16] feat(ci): Add Python 3.14 support --- CONTRIBUTING.rst | 4 +++- noxfile.py | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index c047364..0445287 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -228,6 +228,7 @@ We support: - `Python 3.11`_ - `Python 3.12`_ - `Python 3.13`_ +- `Python 3.14`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ @@ -236,6 +237,7 @@ We support: .. _Python 3.11: https://docs.python.org/3.11/ .. _Python 3.12: https://docs.python.org/3.12/ .. _Python 3.13: https://docs.python.org/3.13/ +.. _Python 3.14: https://docs.python.org/3.14/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/noxfile.py b/noxfile.py index f9f8de9..7b1da27 100644 --- a/noxfile.py +++ b/noxfile.py @@ -42,6 +42,7 @@ "3.11", "3.12", "3.13", + "3.14", ] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", @@ -175,7 +176,7 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13", "3.14"): session.skip("cpp implementation is not supported in python 3.11+") constraints_path = str( @@ -370,7 +371,7 @@ def docfx(session): ) -@nox.session(python="3.13") +@nox.session(python="3.14") @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], @@ -378,7 +379,7 @@ def docfx(session): def prerelease_deps(session, protobuf_implementation): """Run all tests with prerelease versions of dependencies installed.""" - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13", "3.14"): session.skip("cpp implementation is not supported in python 3.11+") # Install all dependencies From 3047e619a0ab1ec2fc82d8ad026b6968364c5679 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 23 Oct 2025 16:17:37 +0000 Subject: [PATCH 06/16] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20?= =?UTF-8?q?post-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- .github/workflows/unittest.yml | 2 +- CONTRIBUTING.rst | 4 +--- noxfile.py | 7 +++---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index aaab92a..1c9d078 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 0445287..c047364 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -228,7 +228,6 @@ We support: - `Python 3.11`_ - `Python 3.12`_ - `Python 3.13`_ -- `Python 3.14`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ @@ -237,7 +236,6 @@ We support: .. _Python 3.11: https://docs.python.org/3.11/ .. _Python 3.12: https://docs.python.org/3.12/ .. _Python 3.13: https://docs.python.org/3.13/ -.. _Python 3.14: https://docs.python.org/3.14/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/noxfile.py b/noxfile.py index 7b1da27..f9f8de9 100644 --- a/noxfile.py +++ b/noxfile.py @@ -42,7 +42,6 @@ "3.11", "3.12", "3.13", - "3.14", ] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", @@ -176,7 +175,7 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13", "3.14"): + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): session.skip("cpp implementation is not supported in python 3.11+") constraints_path = str( @@ -371,7 +370,7 @@ def docfx(session): ) -@nox.session(python="3.14") +@nox.session(python="3.13") @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], @@ -379,7 +378,7 @@ def docfx(session): def prerelease_deps(session, protobuf_implementation): """Run all tests with prerelease versions of dependencies installed.""" - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13", "3.14"): + if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): session.skip("cpp implementation is not supported in python 3.11+") # Install all dependencies From 7c31e84d59373636fec3c25f4e357406a0c6e4d0 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Thu, 23 Oct 2025 12:55:34 -0400 Subject: [PATCH 07/16] ci: Re-add Python 3.14 to unittest matrix --- .github/workflows/unittest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 1c9d078..aaab92a 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout uses: actions/checkout@v4 From 2a9b3a4b91de37c41b5cecf1b8bf4d4b85e7a050 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 23 Oct 2025 16:57:59 +0000 Subject: [PATCH 08/16] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20?= =?UTF-8?q?post-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- .github/workflows/unittest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index aaab92a..1c9d078 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] steps: - name: Checkout uses: actions/checkout@v4 From 275d0d7191962bc4a2ed04d4816907a58dbbc20d Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Thu, 23 Oct 2025 13:13:49 -0400 Subject: [PATCH 09/16] fix(owlbot): Use kwargs to control python versions in templates --- owlbot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/owlbot.py b/owlbot.py index 47c0250..3153cc6 100644 --- a/owlbot.py +++ b/owlbot.py @@ -28,6 +28,7 @@ templated_files = common.py_library( microgenerator=True, default_python_version="3.10", + unit_test_python_versions=["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"], system_test_python_versions=["3.10"], ) s.move(templated_files, excludes=["docs/multiprocessing.rst", "README.rst"]) From 5148459cc7696b8f735ce07cd697ad34a43012f5 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 23 Oct 2025 17:16:10 +0000 Subject: [PATCH 10/16] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20?= =?UTF-8?q?post-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- .github/workflows/unittest.yml | 2 +- CONTRIBUTING.rst | 6 ++++-- noxfile.py | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml index 1c9d078..aaab92a 100644 --- a/.github/workflows/unittest.yml +++ b/.github/workflows/unittest.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index c047364..124b9fb 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13 on both UNIX and Windows. + 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14 on both UNIX and Windows. - The feature must not add unnecessary dependencies (where "unnecessary" is of course subjective, but new dependencies should @@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests. - To run a single unit test:: - $ nox -s unit-3.13 -- -k + $ nox -s unit-3.14 -- -k .. note:: @@ -228,6 +228,7 @@ We support: - `Python 3.11`_ - `Python 3.12`_ - `Python 3.13`_ +- `Python 3.14`_ .. _Python 3.7: https://docs.python.org/3.7/ .. _Python 3.8: https://docs.python.org/3.8/ @@ -236,6 +237,7 @@ We support: .. _Python 3.11: https://docs.python.org/3.11/ .. _Python 3.12: https://docs.python.org/3.12/ .. _Python 3.13: https://docs.python.org/3.13/ +.. _Python 3.14: https://docs.python.org/3.14/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/noxfile.py b/noxfile.py index f9f8de9..da85545 100644 --- a/noxfile.py +++ b/noxfile.py @@ -42,6 +42,7 @@ "3.11", "3.12", "3.13", + "3.14", ] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", @@ -370,7 +371,7 @@ def docfx(session): ) -@nox.session(python="3.13") +@nox.session(python="3.14") @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], From 44a5cd50fc65881cc9b53890743f3d70f9a8b107 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Thu, 23 Oct 2025 13:37:26 -0400 Subject: [PATCH 11/16] fix(owlbot): Ensure noxfile.py skips cpp impl for 3.14 --- owlbot.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/owlbot.py b/owlbot.py index 3153cc6..5ad938d 100644 --- a/owlbot.py +++ b/owlbot.py @@ -33,6 +33,12 @@ ) s.move(templated_files, excludes=["docs/multiprocessing.rst", "README.rst"]) +s.replace( + "noxfile.py", + '''session.python in ("3.11", "3.12", "3.13")''', + '''session.python in ("3.11", "3.12", "3.13", "3.14")''' +) + s.replace( ".kokoro/presubmit/presubmit.cfg", """# Format: //devtools/kokoro/config/proto/build.proto""", From c66e25ce21a23388b9113a2b5111a5f0e558594b Mon Sep 17 00:00:00 2001 From: Chalmer Lowe Date: Thu, 23 Oct 2025 13:57:22 -0400 Subject: [PATCH 12/16] Apply suggestion from @chalmerlowe --- noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxfile.py b/noxfile.py index da85545..51b5112 100644 --- a/noxfile.py +++ b/noxfile.py @@ -371,7 +371,7 @@ def docfx(session): ) -@nox.session(python="3.14") +@nox.session(python='3.14') @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], From 7982e08c292d8ada86771e810c4e0165cf29d322 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 23 Oct 2025 17:59:48 +0000 Subject: [PATCH 13/16] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20?= =?UTF-8?q?post-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxfile.py b/noxfile.py index 51b5112..da85545 100644 --- a/noxfile.py +++ b/noxfile.py @@ -371,7 +371,7 @@ def docfx(session): ) -@nox.session(python='3.14') +@nox.session(python="3.14") @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], From 3bb4d1fae9aef956e8adbdf00945ca2e0b63134b Mon Sep 17 00:00:00 2001 From: Chalmer Lowe Date: Thu, 23 Oct 2025 14:02:40 -0400 Subject: [PATCH 14/16] Apply suggestion from @chalmerlowe --- owlbot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/owlbot.py b/owlbot.py index 5ad938d..a9dce4e 100644 --- a/owlbot.py +++ b/owlbot.py @@ -36,7 +36,8 @@ s.replace( "noxfile.py", '''session.python in ("3.11", "3.12", "3.13")''', - '''session.python in ("3.11", "3.12", "3.13", "3.14")''' + 'session.python in \("3.11", "3.12", "3.13"\)', + 'session.python in ("3.11", "3.12", "3.13", "3.14")' ) s.replace( From ed3d2d3ab5a834ecb056e9274d14ad9243b00f5a Mon Sep 17 00:00:00 2001 From: Chalmer Lowe Date: Thu, 23 Oct 2025 14:03:17 -0400 Subject: [PATCH 15/16] Apply suggestion from @chalmerlowe --- owlbot.py | 1 - 1 file changed, 1 deletion(-) diff --git a/owlbot.py b/owlbot.py index a9dce4e..f183bb8 100644 --- a/owlbot.py +++ b/owlbot.py @@ -35,7 +35,6 @@ s.replace( "noxfile.py", - '''session.python in ("3.11", "3.12", "3.13")''', 'session.python in \("3.11", "3.12", "3.13"\)', 'session.python in ("3.11", "3.12", "3.13", "3.14")' ) From 4a20612e2206a19ead39241f5fab5cfdb7d47176 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 23 Oct 2025 18:04:44 +0000 Subject: [PATCH 16/16] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20?= =?UTF-8?q?post-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- noxfile.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/noxfile.py b/noxfile.py index da85545..e41ee6c 100644 --- a/noxfile.py +++ b/noxfile.py @@ -176,7 +176,12 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation): # Install all test dependencies, then install this package in-place. - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): + if protobuf_implementation == "cpp" and session.python in ( + "3.11", + "3.12", + "3.13", + "3.14", + ): session.skip("cpp implementation is not supported in python 3.11+") constraints_path = str( @@ -379,7 +384,12 @@ def docfx(session): def prerelease_deps(session, protobuf_implementation): """Run all tests with prerelease versions of dependencies installed.""" - if protobuf_implementation == "cpp" and session.python in ("3.11", "3.12", "3.13"): + if protobuf_implementation == "cpp" and session.python in ( + "3.11", + "3.12", + "3.13", + "3.14", + ): session.skip("cpp implementation is not supported in python 3.11+") # Install all dependencies