From e2e98e41354d2be70760519245b3d630bf5a3f1a Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 15:36:15 -0400 Subject: [PATCH 01/11] feat(sqlalchemy-bigquery): Update setup.py metadata and python_requires --- packages/sqlalchemy-bigquery/setup.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/sqlalchemy-bigquery/setup.py b/packages/sqlalchemy-bigquery/setup.py index bfe5b0299a91..6b0f97f41788 100644 --- a/packages/sqlalchemy-bigquery/setup.py +++ b/packages/sqlalchemy-bigquery/setup.py @@ -101,8 +101,6 @@ def readme(): "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -123,7 +121,7 @@ def readme(): "sqlalchemy>=1.4.16,<3.0.0", ], extras_require=extras, - python_requires=">=3.8, <3.15", + python_requires=">=3.10, <3.15", tests_require=["packaging", "pytz"], entry_points={ "sqlalchemy.dialects": ["bigquery = sqlalchemy_bigquery:BigQueryDialect"] From df19f982fe3637dc33a6e2c9ba0ec8270c2993cd Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 15:36:40 -0400 Subject: [PATCH 02/11] feat(sqlalchemy-bigquery): Update Nox sessions to remove old versions --- packages/sqlalchemy-bigquery/noxfile.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/sqlalchemy-bigquery/noxfile.py b/packages/sqlalchemy-bigquery/noxfile.py index 615ac0c30f5c..7e0bebd08159 100644 --- a/packages/sqlalchemy-bigquery/noxfile.py +++ b/packages/sqlalchemy-bigquery/noxfile.py @@ -44,8 +44,6 @@ DEFAULT_PYTHON_VERSION = "3.14" UNIT_TEST_PYTHON_VERSIONS: List[str] = [ - "3.8", - "3.9", "3.10", "3.11", "3.12", @@ -53,7 +51,6 @@ "3.14", ] ALL_PYTHON = list(UNIT_TEST_PYTHON_VERSIONS) -ALL_PYTHON.extend(["3.7"]) UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", @@ -268,8 +265,6 @@ def install_unittest_dependencies(session, *constraints): def unit(session, protobuf_implementation, install_extras=True): # Install all test dependencies, then install this package in-place. - if session.python in ("3.7",): - session.skip("Python 3.7 is no longer supported") if protobuf_implementation == "cpp" and session.python in ( "3.11", "3.12", From 0940a4f9bdcf0d899fb1bf32511d1a6230239795 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 15:37:00 -0400 Subject: [PATCH 03/11] docs(sqlalchemy-bigquery): Update README and CONTRIBUTING documentation --- packages/sqlalchemy-bigquery/CONTRIBUTING.rst | 10 ++++------ packages/sqlalchemy-bigquery/README.rst | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/sqlalchemy-bigquery/CONTRIBUTING.rst b/packages/sqlalchemy-bigquery/CONTRIBUTING.rst index 7e3bc4cd672d..30320852e2db 100644 --- a/packages/sqlalchemy-bigquery/CONTRIBUTING.rst +++ b/packages/sqlalchemy-bigquery/CONTRIBUTING.rst @@ -22,7 +22,7 @@ In order to add a feature: documentation. - The feature must work fully on the following CPython versions: - 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14 on both UNIX and Windows. + 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 @@ -148,7 +148,7 @@ Running System Tests .. note:: - System tests are only configured to run under Python 3.9, 3.12, and 3.14. + System tests are only configured to run under Python 3.12 and 3.14. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local @@ -195,11 +195,11 @@ configure them just like the System Tests. # Run all tests in a folder $ cd samples/snippets - $ nox -s py-3.9 + $ nox -s py-3.10 # Run a single sample test $ cd samples/snippets - $ nox -s py-3.9 -- -k + $ nox -s py-3.10 -- -k ******************************************** Note About ``README`` as it pertains to PyPI @@ -221,14 +221,12 @@ Supported Python Versions We support: -- `Python 3.9`_ - `Python 3.10`_ - `Python 3.11`_ - `Python 3.12`_ - `Python 3.13`_ - `Python 3.14`_ -.. _Python 3.9: https://docs.python.org/3.9/ .. _Python 3.10: https://docs.python.org/3.10/ .. _Python 3.11: https://docs.python.org/3.11/ .. _Python 3.12: https://docs.python.org/3.12/ diff --git a/packages/sqlalchemy-bigquery/README.rst b/packages/sqlalchemy-bigquery/README.rst index be964f0c251c..71532f6fe2d8 100644 --- a/packages/sqlalchemy-bigquery/README.rst +++ b/packages/sqlalchemy-bigquery/README.rst @@ -51,11 +51,11 @@ dependencies. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.9, <3.14 +Python >= 3.10, <3.14 Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Python <= 3.7. +Python <= 3.9 Mac/Linux From a26d2268c4ed01c6447e4abc8da1102336a5c4f1 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 15:37:17 -0400 Subject: [PATCH 04/11] test(sqlalchemy-bigquery): Update testing constraints to 3.10 and drop 3.8/3.9 --- .../testing/constraints-3.10.txt | 13 +++++++++++++ .../sqlalchemy-bigquery/testing/constraints-3.8.txt | 13 ------------- .../sqlalchemy-bigquery/testing/constraints-3.9.txt | 13 ------------- 3 files changed, 13 insertions(+), 26 deletions(-) delete mode 100644 packages/sqlalchemy-bigquery/testing/constraints-3.8.txt delete mode 100644 packages/sqlalchemy-bigquery/testing/constraints-3.9.txt diff --git a/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt b/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt index e69de29bb2d1..574a7ffd4a55 100644 --- a/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt +++ b/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt @@ -0,0 +1,13 @@ +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List *all* library dependencies and extras in this file. +# Pin the version to the lower bound. +# +# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", +sqlalchemy==1.4.16 +google-auth==2.14.1 +google-cloud-bigquery==3.20.0 +google-cloud-bigquery-storage==2.18.0 +google-api-core==2.11.1 +grpcio==1.47.0 +numpy==1.26.4 diff --git a/packages/sqlalchemy-bigquery/testing/constraints-3.8.txt b/packages/sqlalchemy-bigquery/testing/constraints-3.8.txt deleted file mode 100644 index 6138b6b82bf0..000000000000 --- a/packages/sqlalchemy-bigquery/testing/constraints-3.8.txt +++ /dev/null @@ -1,13 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List *all* library dependencies and extras in this file. -# Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -sqlalchemy==1.4.16 -google-auth==2.14.1 -google-cloud-bigquery==3.20.0 -google-cloud-bigquery-storage==2.18.0 -google-api-core==2.11.1 -grpcio==1.47.0 -numpy==1.24.4 diff --git a/packages/sqlalchemy-bigquery/testing/constraints-3.9.txt b/packages/sqlalchemy-bigquery/testing/constraints-3.9.txt deleted file mode 100644 index 574a7ffd4a55..000000000000 --- a/packages/sqlalchemy-bigquery/testing/constraints-3.9.txt +++ /dev/null @@ -1,13 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List *all* library dependencies and extras in this file. -# Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -sqlalchemy==1.4.16 -google-auth==2.14.1 -google-cloud-bigquery==3.20.0 -google-cloud-bigquery-storage==2.18.0 -google-api-core==2.11.1 -grpcio==1.47.0 -numpy==1.26.4 From b1af28216073462180aa3d46f929a3e253a61fd1 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 15:55:32 -0400 Subject: [PATCH 05/11] fix(sqlalchemy-bigquery): Add missing constraints for alembic and pyarrow to constraints-3.10.txt --- packages/sqlalchemy-bigquery/testing/constraints-3.10.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt b/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt index 574a7ffd4a55..56bd6139d84d 100644 --- a/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt +++ b/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt @@ -11,3 +11,5 @@ google-cloud-bigquery-storage==2.18.0 google-api-core==2.11.1 grpcio==1.47.0 numpy==1.26.4 +alembic==1.7.7 +pyarrow==5.0.0 From 7ab4bd0a92e332661356461028dbe8a8d0c9764b Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 15:57:39 -0400 Subject: [PATCH 06/11] fix(sqlalchemy-bigquery): Bump pyarrow to 6.0.0 for Python 3.10 compatibility --- packages/sqlalchemy-bigquery/setup.py | 2 +- packages/sqlalchemy-bigquery/testing/constraints-3.10.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sqlalchemy-bigquery/setup.py b/packages/sqlalchemy-bigquery/setup.py index 6b0f97f41788..8d7ad005c2ee 100644 --- a/packages/sqlalchemy-bigquery/setup.py +++ b/packages/sqlalchemy-bigquery/setup.py @@ -64,7 +64,7 @@ def readme(): "grpcio >= 1.47.0, < 2.0.0", "grpcio >= 1.49.1, < 2.0.0; python_version =='3.11'", "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", - "pyarrow >= 5.0.0", + "pyarrow >= 6.0.0", ], } diff --git a/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt b/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt index 56bd6139d84d..31dd91a92cb5 100644 --- a/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt +++ b/packages/sqlalchemy-bigquery/testing/constraints-3.10.txt @@ -12,4 +12,4 @@ google-api-core==2.11.1 grpcio==1.47.0 numpy==1.26.4 alembic==1.7.7 -pyarrow==5.0.0 +pyarrow==6.0.0 From 690b25bd39d9972b4d22515dd8a87507b0baccd6 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Tue, 5 May 2026 16:05:16 -0400 Subject: [PATCH 07/11] docs(sqlalchemy-bigquery): Update supported Python versions to <= 3.14 --- packages/sqlalchemy-bigquery/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sqlalchemy-bigquery/README.rst b/packages/sqlalchemy-bigquery/README.rst index 71532f6fe2d8..0c31785fa9fe 100644 --- a/packages/sqlalchemy-bigquery/README.rst +++ b/packages/sqlalchemy-bigquery/README.rst @@ -51,7 +51,7 @@ dependencies. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.10, <3.14 +Python >= 3.10, <= 3.14 Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 8da7e4b196a2b3601ed128ca1a09d985e1eb5d5a Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Wed, 6 May 2026 07:14:53 -0400 Subject: [PATCH 08/11] feat(sqla): Update Python version warning to include 3.9 --- .../sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py index 762c7bba4b9a..d84b1fa060ba 100644 --- a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py +++ b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py @@ -47,12 +47,12 @@ sys_major, sys_minor, sys_micro = _versions_helpers.extract_runtime_version() -# Now that support for Python 3.7 and 3.8 has been removed, we don't expect the +# Now that support for Python 3.7, 3.8 and 3.9 has been removed, we don't expect the # following check to succeed. The warning is only included for robustness. -if sys_major == 3 and sys_minor in (7, 8): # pragma: NO COVER +if sys_major == 3 and sys_minor in (7, 8, 9): # pragma: NO COVER warnings.warn( - "The python-bigquery-sqlalchemy library no longer supports Python 3.7 " - "and Python 3.8. " + "The python-bigquery-sqlalchemy library no longer supports Python 3.7, " + "3.8 and 3.9. " f"Your Python version is {sys_major}.{sys_minor}.{sys_micro}. We " "recommend that you update soon to ensure ongoing support. For " "more details, see: [Google Cloud Client Libraries Supported Python Versions policy](https://cloud.google.com/python/docs/supported-python-versions)", From d41682e9eb353295cd36b002e8bf22f388216920 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Wed, 6 May 2026 07:14:55 -0400 Subject: [PATCH 09/11] docs(sqla): Update README and CONTRIBUTING for Python 3.9 drop --- packages/sqlalchemy-bigquery/CONTRIBUTING.rst | 11 ----------- packages/sqlalchemy-bigquery/README.rst | 1 + 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/sqlalchemy-bigquery/CONTRIBUTING.rst b/packages/sqlalchemy-bigquery/CONTRIBUTING.rst index 30320852e2db..7db9f22985ff 100644 --- a/packages/sqlalchemy-bigquery/CONTRIBUTING.rst +++ b/packages/sqlalchemy-bigquery/CONTRIBUTING.rst @@ -239,17 +239,6 @@ Supported versions can be found in our ``noxfile.py`` `config`_. .. _config: https://github.com/googleapis/google-cloud-python/blob/main/packages/sqlalchemy-bigquery/noxfile.py -We also explicitly decided to support Python 3 beginning with version 3.9. -Reasons for this include: - -- Encouraging use of newest versions of Python 3 -- Taking the lead of `prominent`_ open-source `projects`_ -- `Unicode literal support`_ which allows for a cleaner codebase that - works in both Python 2 and Python 3 - -.. _prominent: https://docs.djangoproject.com/en/1.9/faq/install/#what-python-version-can-i-use-with-django -.. _projects: http://flask.pocoo.org/docs/0.10/python3/ -.. _Unicode literal support: https://www.python.org/dev/peps/pep-0414/ ********** Versioning diff --git a/packages/sqlalchemy-bigquery/README.rst b/packages/sqlalchemy-bigquery/README.rst index 0c31785fa9fe..e617632f95f8 100644 --- a/packages/sqlalchemy-bigquery/README.rst +++ b/packages/sqlalchemy-bigquery/README.rst @@ -55,6 +55,7 @@ Python >= 3.10, <= 3.14 Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. version-scanner: ignore-next-line Python <= 3.9 From df95b9b322f21254bc912735474af9664f7bbb13 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Wed, 6 May 2026 07:48:13 -0400 Subject: [PATCH 10/11] refactor(sqlalchemy-bigquery): drop extract_runtime_version for sys.version_info --- .../sqlalchemy_bigquery/__init__.py | 8 ++--- .../sqlalchemy_bigquery/_versions_helpers.py | 32 ------------------- 2 files changed, 3 insertions(+), 37 deletions(-) delete mode 100644 packages/sqlalchemy-bigquery/sqlalchemy_bigquery/_versions_helpers.py diff --git a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py index d84b1fa060ba..7473f3326a46 100644 --- a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py +++ b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/__init__.py @@ -22,7 +22,6 @@ import warnings -from . import _versions_helpers from ._types import ( ARRAY, BIGNUMERIC, @@ -44,16 +43,15 @@ ) from .base import BigQueryDialect, dialect from .version import __version__ - -sys_major, sys_minor, sys_micro = _versions_helpers.extract_runtime_version() +import sys # Now that support for Python 3.7, 3.8 and 3.9 has been removed, we don't expect the # following check to succeed. The warning is only included for robustness. -if sys_major == 3 and sys_minor in (7, 8, 9): # pragma: NO COVER +if sys.version_info < (3, 10): # pragma: NO COVER warnings.warn( "The python-bigquery-sqlalchemy library no longer supports Python 3.7, " "3.8 and 3.9. " - f"Your Python version is {sys_major}.{sys_minor}.{sys_micro}. We " + f"Your Python version is {sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}. We " "recommend that you update soon to ensure ongoing support. For " "more details, see: [Google Cloud Client Libraries Supported Python Versions policy](https://cloud.google.com/python/docs/supported-python-versions)", FutureWarning, diff --git a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/_versions_helpers.py b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/_versions_helpers.py deleted file mode 100644 index 37247c456d81..000000000000 --- a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/_versions_helpers.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Shared helper functions for verifying versions of installed modules.""" - - -import sys -from typing import Tuple - - -def extract_runtime_version() -> Tuple[int, int, int]: - # Retrieve the version information - version_info = sys.version_info - - # Extract the major, minor, and micro components - major = version_info.major - minor = version_info.minor - micro = version_info.micro - - # Display the version number in a clear format - return major, minor, micro From c867a5f19fe37652fc1a72aed095e059c9f2d2a5 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Wed, 6 May 2026 08:43:23 -0400 Subject: [PATCH 11/11] chore(sqlalchemy-bigquery): remove scanner pragma from README.rst --- packages/sqlalchemy-bigquery/README.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/sqlalchemy-bigquery/README.rst b/packages/sqlalchemy-bigquery/README.rst index e617632f95f8..0c31785fa9fe 100644 --- a/packages/sqlalchemy-bigquery/README.rst +++ b/packages/sqlalchemy-bigquery/README.rst @@ -55,7 +55,6 @@ Python >= 3.10, <= 3.14 Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. version-scanner: ignore-next-line Python <= 3.9