From d0347202c5fb144f960558d9022b7a22af6ce3f7 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Thu, 5 Jun 2025 18:46:39 +0200 Subject: [PATCH 1/6] chore(deps): update all dependencies (#1185) * chore(deps): update all dependencies * Update samples/snippets/requirements.txt * Update samples/snippets/requirements.txt * Update samples/snippets/requirements.txt * Update samples/snippets/requirements-test.txt * Update samples/snippets/requirements.txt * Update samples/snippets/requirements.txt * Update samples/snippets/requirements.txt * Update samples/snippets/requirements-test.txt * Update samples/snippets/requirements-test.txt * Update samples/snippets/requirements-test.txt --------- Co-authored-by: Chalmer Lowe --- samples/snippets/requirements-test.txt | 17 +++++++----- samples/snippets/requirements.txt | 38 ++++++++++++++------------ 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt index 7cf0be72..82b196c3 100644 --- a/samples/snippets/requirements-test.txt +++ b/samples/snippets/requirements-test.txt @@ -1,17 +1,20 @@ attrs==25.3.0 -click==8.1.8 -google-auth==2.38.0 -google-cloud-testutils==1.6.0 +click===8.1.8; python_version <= '3.9' +click==8.2.1; python_version >= '3.10' +google-auth==2.40.3 +google-cloud-testutils==1.6.4 iniconfig==2.1.0 -packaging==24.2 -pluggy==1.5.0 +packaging==25.0 +pluggy===1.5.0; python_version == '3.8' +pluggy==1.6.0; python_version >= '3.9' py==1.11.0 pyasn1==0.6.1 pyasn1-modules==0.4.2 pyparsing===3.1.4; python_version == '3.8' pyparsing==3.2.3; python_version >= '3.9' pytest===6.2.5 -rsa==4.9 +rsa==4.9.1 six==1.17.0 toml==0.10.2 -typing-extensions==4.13.0 +typing-extensions===4.13.0; python_version == '3.8' +typing-extensions==4.14.0; python_version >= '3.9' diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index d2a9ab03..c5e7e8fe 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,32 +1,34 @@ alembic===1.14.0; python_version == '3.8' -alembic==1.15.2; python_version >= '3.9' -certifi==2025.1.31 -charset-normalizer==3.4.1 +alembic==1.16.1; python_version >= '3.9' +certifi==2025.4.26 +charset-normalizer==3.4.2 geoalchemy2==0.17.1 -google-api-core[grpc]==2.24.2 -google-auth==2.38.0 +google-api-core[grpc]==2.25.0 +google-auth==2.40.3 google-cloud-bigquery===3.30.0; python_version == '3.8' -google-cloud-bigquery==3.31.0; python_version >= '3.9' +google-cloud-bigquery==3.34.0; python_version >= '3.9' google-cloud-core==2.4.3 google-crc32c===1.5.0; python_version == '3.8' google-crc32c==1.7.1; python_version >= '3.9' google-resumable-media==2.7.2 -googleapis-common-protos==1.69.2 -greenlet==3.1.1 +googleapis-common-protos==1.70.0 +greenlet===3.1.1; python_version == '3.8' +greenlet==3.2.2; python_version >= '3.9' grpcio===1.68.0; python_version == '3.8' -grpcio==1.71.0; python_version >= '3.9' +grpcio==1.72.1; python_version >= '3.9' grpcio-status===1.68.0; python_version == '3.8' -grpcio-status==1.71.0; python_version >= '3.9' +grpcio-status==1.72.1; python_version >= '3.9' idna==3.10 importlib-resources===6.4.5; python_version == '3.8' importlib-resources==6.5.2; python_version >= '3.9' mako===1.3.5; python_version == '3.8' -mako==1.3.9; python_version >= '3.9' +mako==1.3.10; python_version >= '3.9' markupsafe===2.1.5; python_version == '3.8' markupsafe==3.0.2; python_version >= '3.9' -packaging==24.2 +packaging==25.0 proto-plus==1.26.1 -protobuf===5.28.3; python_version >= '3.8' +protobuf===5.28.3; python_version == '3.8' +protobuf==6.30.0; python_version >= '3.9' pyasn1==0.6.1 pyasn1-modules==0.4.2 pyparsing===3.1.4; python_version == '3.8' @@ -34,10 +36,12 @@ pyparsing==3.2.3; python_version >= '3.9' python-dateutil==2.9.0.post0 pytz==2025.2 requests==2.32.3 -rsa==4.9 -shapely==2.0.7 +rsa==4.9.1 +shapely===2.0.7; python_version <= '3.9' +shapely==2.1.1; python_version >= '3.10' six==1.17.0 sqlalchemy===1.4.27 -typing-extensions==4.13.0 +typing-extensions===4.13.0; python_version == '3.8' +typing-extensions==4.14.0; python_version >= '3.9' urllib3===2.2.3; python_version == '3.8' -urllib3==2.3.0; python_version >= '3.9' +urllib3==2.4.0; python_version >= '3.9' From ffe26ad0ba9ee354b8dcac115e407f5193754eba Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 9 Jun 2025 20:50:14 +0200 Subject: [PATCH 2/6] chore(deps): update all dependencies (#1204) --- samples/snippets/requirements.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index c5e7e8fe..d6ce5bb6 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -13,11 +13,11 @@ google-crc32c==1.7.1; python_version >= '3.9' google-resumable-media==2.7.2 googleapis-common-protos==1.70.0 greenlet===3.1.1; python_version == '3.8' -greenlet==3.2.2; python_version >= '3.9' +greenlet==3.2.3; python_version >= '3.9' grpcio===1.68.0; python_version == '3.8' -grpcio==1.72.1; python_version >= '3.9' +grpcio==1.73.0; python_version >= '3.9' grpcio-status===1.68.0; python_version == '3.8' -grpcio-status==1.72.1; python_version >= '3.9' +grpcio-status==1.73.0; python_version >= '3.9' idna==3.10 importlib-resources===6.4.5; python_version == '3.8' importlib-resources==6.5.2; python_version >= '3.9' @@ -28,7 +28,7 @@ markupsafe==3.0.2; python_version >= '3.9' packaging==25.0 proto-plus==1.26.1 protobuf===5.28.3; python_version == '3.8' -protobuf==6.30.0; python_version >= '3.9' +protobuf==6.31.1; python_version >= '3.9' pyasn1==0.6.1 pyasn1-modules==0.4.2 pyparsing===3.1.4; python_version == '3.8' From f363b87f7587c21ad32501e17cb4d9987fdd5d5d Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Tue, 10 Jun 2025 19:17:00 +0200 Subject: [PATCH 3/6] chore(deps): update dependency requests to v2.32.4 [security] (#1208) --- samples/snippets/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index d6ce5bb6..faafce28 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -35,7 +35,7 @@ pyparsing===3.1.4; python_version == '3.8' pyparsing==3.2.3; python_version >= '3.9' python-dateutil==2.9.0.post0 pytz==2025.2 -requests==2.32.3 +requests==2.32.4 rsa==4.9.1 shapely===2.0.7; python_version <= '3.9' shapely==2.1.1; python_version >= '3.10' From 55336f38e57cfd245e603fd2246c6bae50065d67 Mon Sep 17 00:00:00 2001 From: Chalmer Lowe Date: Tue, 17 Jun 2025 13:52:24 -0400 Subject: [PATCH 4/6] feat: Add Python 3.13 runtime support (#1211) * feat: Add Python 3.13 runtime support This commit introduces support for Python 3.13 as a runtime dependency. The following changes were made: - Updated `noxfile.py` to include Python 3.13 in unit and system test configurations, including necessary extras and confirming skip conditions for cpp protobuf implementation. - Modified `setup.py` to update `python_requires` to include Python 3.13 (i.e., `<3.14`) and added the corresponding classifier. - Updated `owlbot.py` to include Python 3.13 in the `unit_test_python_versions`, `system_test_python_versions`, and `extras_by_python` configurations. - Created `testing/constraints-3.13.txt` by copying constraints from the 3.12 version. - Updated `README.rst` and `docs/README.rst` to list Python 3.13 as a supported version. * additional updates to add 3.13 --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- .github/sync-repo-settings.yaml | 2 ++ CONTRIBUTING.rst | 10 ++++++---- README.rst | 2 +- noxfile.py | 19 ++++++++++++------- owlbot.py | 5 +++-- setup.py | 3 ++- testing/constraints-3.13.txt | 14 +------------- 7 files changed, 27 insertions(+), 28 deletions(-) diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index 38bd545c..d9de7a03 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -16,6 +16,8 @@ branchProtectionRules: - 'Samples - Python 3.10' - 'Samples - Python 3.11' - 'Samples - Python 3.12' + - 'Samples - Python 3.13' + permissionRules: - team: actools-python permission: admin diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 3f0d9cdb..2f03f9d0 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.8, 3.9, 3.10, 3.11 and 3.12 on both UNIX and Windows. + 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 @@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests. - To run a single unit test:: - $ nox -s unit-3.12 -- -k + $ nox -s unit-3.13 -- -k .. note:: @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system-3.12 -- -k + $ nox -s system-3.13 -- -k .. note:: - System tests are only configured to run under Python 3.8, 3.11 and 3.12. + System tests are only configured to run under Python 3.8, 3.12, and 3.13. 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 @@ -226,12 +226,14 @@ We support: - `Python 3.10`_ - `Python 3.11`_ - `Python 3.12`_ +- `Python 3.13`_ .. _Python 3.8: https://docs.python.org/3.8/ .. _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/ +.. _Python 3.13: https://docs.python.org/3.13/ Supported versions can be found in our ``noxfile.py`` `config`_. diff --git a/README.rst b/README.rst index b3e19045..2a64c0c7 100644 --- a/README.rst +++ b/README.rst @@ -51,7 +51,7 @@ dependencies. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.8 +Python >= 3.8, <3.14 Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/noxfile.py b/noxfile.py index 9825e03c..b6e34730 100644 --- a/noxfile.py +++ b/noxfile.py @@ -41,7 +41,7 @@ DEFAULT_PYTHON_VERSION = "3.8" -UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.8", "3.9", "3.10", "3.11", "3.12"] +UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", @@ -71,9 +71,14 @@ "geography", "bqstorage", ], + "3.13": [ + "tests", + "geography", + "bqstorage", + ], } -SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.8", "3.11", "3.12"] +SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.8", "3.12", "3.13"] SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [ "mock", "pytest", @@ -91,12 +96,12 @@ "alembic", "bqstorage", ], - "3.11": [ + "3.12": [ "tests", "geography", "bqstorage", ], - "3.12": [ + "3.13": [ "tests", "geography", "bqstorage", @@ -219,7 +224,7 @@ def unit(session, protobuf_implementation, install_extras=True): ) install_unittest_dependencies(session, "-c", constraints_path) - if install_extras and session.python in ["3.11", "3.12"]: + if install_extras and session.python in ["3.11", "3.12", "3.13"]: install_target = ".[geography,alembic,tests,bqstorage]" elif install_extras: install_target = ".[all]" @@ -395,7 +400,7 @@ def compliance(session): ) if session.python == "3.8": extras = "[tests,alembic]" - elif session.python in ["3.11", "3.12"]: + elif session.python in ["3.12", "3.13"]: extras = "[tests,geography]" else: extras = "[tests]" @@ -522,7 +527,7 @@ def docfx(session): ) -@nox.session(python="3.12") +@nox.session(python="3.13") @nox.parametrize( "protobuf_implementation", ["python", "upb", "cpp"], diff --git a/owlbot.py b/owlbot.py index 3b2884f3..5173dce0 100644 --- a/owlbot.py +++ b/owlbot.py @@ -33,10 +33,11 @@ "3.8": ["tests", "alembic", "bqstorage"], "3.11": ["tests", "geography", "bqstorage"], "3.12": ["tests", "geography", "bqstorage"], + "3.13": ["tests", "geography", "bqstorage"], } templated_files = common.py_library( - unit_test_python_versions=["3.8", "3.9", "3.10", "3.11", "3.12"], - system_test_python_versions=["3.8", "3.11", "3.12"], + unit_test_python_versions=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"], + system_test_python_versions=["3.8", "3.12", "3.13"], cov_level=100, unit_test_extras=extras, unit_test_extras_by_python=extras_by_python, diff --git a/setup.py b/setup.py index f655101c..6d6c814a 100644 --- a/setup.py +++ b/setup.py @@ -104,6 +104,7 @@ def readme(): "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Operating System :: OS Independent", "Topic :: Database :: Front-Ends", ], @@ -119,7 +120,7 @@ def readme(): "sqlalchemy>=1.4.16,<3.0.0", ], extras_require=extras, - python_requires=">=3.8, <3.13", + python_requires=">=3.8, <3.14", tests_require=["packaging", "pytz"], entry_points={ "sqlalchemy.dialects": ["bigquery = sqlalchemy_bigquery:BigQueryDialect"] diff --git a/testing/constraints-3.13.txt b/testing/constraints-3.13.txt index 0e713350..5b82150f 100644 --- a/testing/constraints-3.13.txt +++ b/testing/constraints-3.13.txt @@ -1,13 +1 @@ -# 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 "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core == 1.31.5 -google-auth==1.25.0 -google-cloud-bigquery==3.3.6 -google-cloud-bigquery-storage == 2.0.0 -grpcio == 1.47.0 -pyarrow == 3.0.0 -sqlalchemy==1.4.16 +numpy>=1.23 From 974514b42d87c446a63bf9483f5feb8fece28124 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 18 Jun 2025 18:46:28 +0200 Subject: [PATCH 5/6] chore(deps): update all dependencies (#1210) --- samples/snippets/requirements.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index faafce28..3ee07a2d 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,9 +1,9 @@ alembic===1.14.0; python_version == '3.8' -alembic==1.16.1; python_version >= '3.9' -certifi==2025.4.26 +alembic==1.16.2; python_version >= '3.9' +certifi==2025.6.15 charset-normalizer==3.4.2 geoalchemy2==0.17.1 -google-api-core[grpc]==2.25.0 +google-api-core[grpc]==2.25.1 google-auth==2.40.3 google-cloud-bigquery===3.30.0; python_version == '3.8' google-cloud-bigquery==3.34.0; python_version >= '3.9' @@ -44,4 +44,4 @@ sqlalchemy===1.4.27 typing-extensions===4.13.0; python_version == '3.8' typing-extensions==4.14.0; python_version >= '3.9' urllib3===2.2.3; python_version == '3.8' -urllib3==2.4.0; python_version >= '3.9' +urllib3==2.5.0; python_version >= '3.9' From 0b5c26cbca161a067aed2d9931fbe2904dd265e4 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 23 Jun 2025 14:05:36 -0400 Subject: [PATCH 6/6] chore(main): release 1.15.0 (#1212) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ sqlalchemy_bigquery/version.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d845b07..72311aa6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,13 @@ Older versions of this project were distributed as [pybigquery][0]. [2]: https://pypi.org/project/pybigquery/#history +## [1.15.0](https://github.com/googleapis/python-bigquery-sqlalchemy/compare/v1.14.1...v1.15.0) (2025-06-18) + + +### Features + +* Add Python 3.13 runtime support ([#1211](https://github.com/googleapis/python-bigquery-sqlalchemy/issues/1211)) ([55336f3](https://github.com/googleapis/python-bigquery-sqlalchemy/commit/55336f38e57cfd245e603fd2246c6bae50065d67)) + ## [1.14.1](https://github.com/googleapis/python-bigquery-sqlalchemy/compare/v1.14.0...v1.14.1) (2025-05-09) diff --git a/sqlalchemy_bigquery/version.py b/sqlalchemy_bigquery/version.py index f69b018d..86059295 100644 --- a/sqlalchemy_bigquery/version.py +++ b/sqlalchemy_bigquery/version.py @@ -17,4 +17,4 @@ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -__version__ = "1.14.1" +__version__ = "1.15.0"