Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
0116348
chore(python): Add support for Python 3.14
chalmerlowe Oct 24, 2025
4851f4e
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 24, 2025
f1bb114
feat(ci): Add Python 3.14 support to core files
chalmerlowe Oct 24, 2025
9bdac11
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 24, 2025
e675d4b
fix(owlbot): Ensure 3.14 is in noxfile cpp skip
chalmerlowe Oct 24, 2025
cc2fb9d
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 24, 2025
e757e58
feat: Add constraints for Python 3.14
chalmerlowe Oct 27, 2025
9a3f316
feat: Update repo settings and samples for Python 3.14
chalmerlowe Oct 27, 2025
b0062d7
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 27, 2025
f9c269b
feat(ci): Update system tests to Python 3.12 and prep for Kokoro sess…
chalmerlowe Oct 29, 2025
603391e
chore(ci): Specify NOX_SESSIONs for default Kokoro presubmit
chalmerlowe Oct 29, 2025
2fa2cc9
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 29, 2025
d2f0005
fix(owlbot): Prevent overwriting Python version and Kokoro configs
chalmerlowe Oct 30, 2025
7829b32
fix: Add setuptools to lint_setup_py session
chalmerlowe Oct 30, 2025
c7c49a3
Apply suggestion from @chalmerlowe
chalmerlowe Oct 30, 2025
7ed0dd2
Apply suggestion from @chalmerlowe
chalmerlowe Oct 30, 2025
3130603
Apply suggestion from @chalmerlowe
chalmerlowe Oct 30, 2025
83d70a9
Apply suggestion from @chalmerlowe
chalmerlowe Oct 30, 2025
97a8352
Apply suggestion from @chalmerlowe
chalmerlowe Oct 30, 2025
377b1a4
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 30, 2025
ed545e6
chore: Update mypy.yml python version in owlbot.py
chalmerlowe Oct 30, 2025
eb03b52
fix(owlbot): Escape brackets in mypy.yml regex
chalmerlowe Oct 30, 2025
4cdc4d9
fix(owlbot): Correct regex for mypy.yml to use double quotes
chalmerlowe Oct 30, 2025
a4ea5b5
fix(owlbot): Correct quoting in mypy.yml regex
chalmerlowe Oct 30, 2025
3d2dc6e
trying to get the regex just right. sigh.
chalmerlowe Oct 30, 2025
8b27239
fix(owlbot): Final correction to mypy.yml regex
chalmerlowe Oct 30, 2025
a322da1
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Oct 30, 2025
d6b5ec2
fix: Update python_version in mypy.ini to 3.10
chalmerlowe Oct 30, 2025
0d85c26
chore(owlbot): Exclude .kokoro/presubmit/presubmit.cfg from templated…
chalmerlowe Oct 30, 2025
f1a655d
chore: Restore and update NOX_SESSION in presubmit.cfg
chalmerlowe Oct 30, 2025
bb3c73b
Apply suggestion from @chalmerlowe
chalmerlowe Oct 30, 2025
77b7120
updates system test flag to enable system to be run within kokoro
chalmerlowe Oct 30, 2025
d8d051e
updates presubmit to account for system 3.12 being run elsewhere
chalmerlowe Nov 5, 2025
1e9c026
updates mypy.ini to deal with type hint issue that should be correcte…
chalmerlowe Nov 5, 2025
5fa6318
updates cover pragma to account for path that is not expected to be p…
chalmerlowe Nov 5, 2025
7c1824a
Update .github/workflows/lint.yml
chalmerlowe Nov 5, 2025
136a789
Update .github/workflows/mypy.yml
chalmerlowe Nov 5, 2025
3128b9a
Update .github/workflows/unittest.yml
chalmerlowe Nov 5, 2025
c84ecdd
Update owlbot.py
chalmerlowe Nov 5, 2025
bf1579e
Update setup.py
chalmerlowe Nov 5, 2025
7f8108f
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Nov 5, 2025
5d9ba84
Merge branch 'feat/add-python-3.14' of https://github.com/googleapis/…
gcf-owl-bot[bot] Nov 5, 2025
3ceda6f
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Nov 5, 2025
b0dfe46
Merge branch 'feat/add-python-3.14' of https://github.com/googleapis/…
gcf-owl-bot[bot] Nov 5, 2025
c254496
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Nov 5, 2025
bbf389a
Merge branch 'feat/add-python-3.14' of https://github.com/googleapis/…
gcf-owl-bot[bot] Nov 5, 2025
3fd4644
update post processor/python runtime to 3.14
parthea Nov 11, 2025
cc62430
Add TODO comment
parthea Nov 11, 2025
f2f73d1
update post processor image
parthea Nov 11, 2025
62c9c58
remove configure_previous_major_version_branches which is unused
parthea Nov 11, 2025
c2e3592
remove unused replacements
parthea Nov 11, 2025
f510cd3
revert changes to generated files
parthea Nov 11, 2025
4997699
restore testing for Python 3.7
parthea Nov 11, 2025
97887fd
Add missing entry for 3.13
parthea Nov 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/.OwlBot.lock.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,4 @@
# limitations under the License.
docker:
image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest
digest: sha256:710b70faff81151657d89db6e028c23a1051787598c8276bdd8eef25c92da8ab
# created: 2025-04-10T17:48:54.829145676Z
digest: sha256:fbbc8db67afd8b7d71bf694c5081a32da0c528eba166fbcffb3b6e56ddf907d5
1 change: 1 addition & 0 deletions .github/sync-repo-settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ branchProtectionRules:
- 'unit (3.11)'
- 'unit (3.12)'
- 'unit (3.13)'
- 'unit (3.14)'
- 'cover'
- 'mypy'
# List of explicit permissions to add (additive only)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.8"
python-version: "3.14"
- name: Install nox
run: |
python -m pip install --upgrade setuptools pip wheel
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/mypy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.8"
python-version: "3.14"
- name: Install nox
run: |
python -m pip install --upgrade setuptools pip wheel
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/unittest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -45,7 +45,7 @@ jobs:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.8"
python-version: "3.14"
- name: Install coverage
run: |
python -m pip install --upgrade setuptools pip wheel
Expand Down
5 changes: 5 additions & 0 deletions .kokoro/presubmit/presubmit.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@ env_vars: {
key: "RUN_SYSTEM_TESTS"
value: "false"
}

env_vars: {
key: "NOX_SESSION"
value: "blacken doctests format"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
# Only run this nox session.
env_vars: {
key: "NOX_SESSION"
value: "system-3.8"
value: "system-3.12"
}
7 changes: 7 additions & 0 deletions .kokoro/presubmit/system-3.14.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Format: //devtools/kokoro/config/proto/build.proto

# Only run this nox session.
env_vars: {
key: "NOX_SESSION"
value: "system-3.14"
}
40 changes: 40 additions & 0 deletions .kokoro/samples/python3.14/common.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Format: //devtools/kokoro/config/proto/build.proto

# Build logs will be here
action {
define_artifacts {
regex: "**/*sponge_log.xml"
}
}

# Specify which tests to run
env_vars: {
key: "RUN_TESTS_SESSION"
value: "py-3.14"
}

# Declare build specific Cloud project.
env_vars: {
key: "BUILD_SPECIFIC_GCLOUD_PROJECT"
value: "python-docs-samples-tests-314"
}

env_vars: {
key: "TRAMPOLINE_BUILD_FILE"
value: "github/python-datastore/.kokoro/test-samples.sh"
}

# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker"
}

# Download secrets for samples
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"

# Download trampoline resources.
gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"

# Use the trampoline script to run in docker.
build_file: "python-datastore/.kokoro/trampoline_v2.sh"
6 changes: 6 additions & 0 deletions .kokoro/samples/python3.14/continuous.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Format: //devtools/kokoro/config/proto/build.proto

env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "True"
}
11 changes: 11 additions & 0 deletions .kokoro/samples/python3.14/periodic-head.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Format: //devtools/kokoro/config/proto/build.proto

env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "True"
}

env_vars: {
key: "TRAMPOLINE_BUILD_FILE"
value: "github/python-datastore/.kokoro/test-samples-against-head.sh"
}
6 changes: 6 additions & 0 deletions .kokoro/samples/python3.14/periodic.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Format: //devtools/kokoro/config/proto/build.proto

env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "False"
}
6 changes: 6 additions & 0 deletions .kokoro/samples/python3.14/presubmit.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Format: //devtools/kokoro/config/proto/build.proto

env_vars: {
key: "INSTALL_LIBRARY_FROM_SOURCE"
value: "True"
}
4 changes: 3 additions & 1 deletion CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -253,6 +253,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/
Expand All @@ -261,6 +262,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`_.
Expand Down
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ Supported Python Versions
Our client libraries are compatible with all current `active`_ and `maintenance`_ versions of
Python.

Python >= 3.7
Python >= 3.7, including 3.14

.. _active: https://devguide.python.org/devcycle/#in-development-main-branch
.. _maintenance: https://devguide.python.org/devcycle/#maintenance-branches
Expand Down
12 changes: 11 additions & 1 deletion mypy.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
[mypy]
python_version = 3.8
python_version = 3.10
namespace_packages = True
ignore_missing_imports = True

[mypy-google.cloud.datastore._app_engine_key_pb2]
ignore_errors = True

# TODO(https://github.com/googleapis/gapic-generator-python/issues/2410):
# Remove once this generator bug is fixed
[mypy-google.cloud.datastore_v1.services.datastore.async_client]
ignore_errors = True

# TODO(https://github.com/googleapis/gapic-generator-python/issues/2410):
# Remove once this generator bug is fixed
[mypy-google.cloud.datastore_v1.services.datastore.client]
ignore_errors = True
23 changes: 17 additions & 6 deletions noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
ISORT_VERSION = "isort==5.11.0"
LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"]

DEFAULT_PYTHON_VERSION = "3.8"
DEFAULT_PYTHON_VERSION = "3.14"

UNIT_TEST_PYTHON_VERSIONS: List[str] = [
"3.7",
Expand All @@ -42,6 +42,7 @@
"3.11",
"3.12",
"3.13",
"3.14",
]
UNIT_TEST_STANDARD_DEPENDENCIES = [
"mock",
Expand All @@ -58,7 +59,7 @@
UNIT_TEST_EXTRAS: List[str] = []
UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {}

SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.8"]
SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.12"]
SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [
"mock",
"pytest",
Expand Down Expand Up @@ -157,7 +158,7 @@ def mypy(session):
@nox.session(python=DEFAULT_PYTHON_VERSION)
def lint_setup_py(session):
"""Verify that setup.py is valid (including RST check)."""
session.install("docutils", "pygments")
session.install("docutils", "pygments", "setuptools")
session.run("python", "setup.py", "check", "--restructuredtext", "--strict")


Expand Down Expand Up @@ -197,7 +198,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(
Expand Down Expand Up @@ -415,15 +421,20 @@ def docfx(session):
)


@nox.session(python="3.13")
@nox.session(python="3.14")
@nox.parametrize(
"protobuf_implementation",
["python", "upb", "cpp"],
)
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
Expand Down
Loading