diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index d9de7a03..c3e26318 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -11,7 +11,6 @@ branchProtectionRules: - 'OwlBot Post Processor' - 'Kokoro' - 'Samples - Lint' - - 'Samples - Python 3.8' - 'Samples - Python 3.9' - 'Samples - Python 3.10' - 'Samples - Python 3.11' diff --git a/.kokoro/samples/python3.8/common.cfg b/.kokoro/samples/python3.8/common.cfg deleted file mode 100644 index e8cc035c..00000000 --- a/.kokoro/samples/python3.8/common.cfg +++ /dev/null @@ -1,40 +0,0 @@ -# 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.8" -} - -# Declare build specific Cloud project. -env_vars: { - key: "BUILD_SPECIFIC_GCLOUD_PROJECT" - value: "python-docs-samples-tests-py38" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/python-bigquery-sqlalchemy/.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-bigquery-sqlalchemy/.kokoro/trampoline_v2.sh" \ No newline at end of file diff --git a/.kokoro/samples/python3.8/continuous.cfg b/.kokoro/samples/python3.8/continuous.cfg deleted file mode 100644 index a1c8d975..00000000 --- a/.kokoro/samples/python3.8/continuous.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/.kokoro/samples/python3.8/periodic-head.cfg b/.kokoro/samples/python3.8/periodic-head.cfg deleted file mode 100644 index abf3481d..00000000 --- a/.kokoro/samples/python3.8/periodic-head.cfg +++ /dev/null @@ -1,11 +0,0 @@ -# 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-bigquery-sqlalchemy/.kokoro/test-samples-against-head.sh" -} diff --git a/.kokoro/samples/python3.8/periodic.cfg b/.kokoro/samples/python3.8/periodic.cfg deleted file mode 100644 index 71cd1e59..00000000 --- a/.kokoro/samples/python3.8/periodic.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "False" -} diff --git a/.kokoro/samples/python3.8/presubmit.cfg b/.kokoro/samples/python3.8/presubmit.cfg deleted file mode 100644 index a1c8d975..00000000 --- a/.kokoro/samples/python3.8/presubmit.cfg +++ /dev/null @@ -1,6 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -env_vars: { - key: "INSTALL_LIBRARY_FROM_SOURCE" - value: "True" -} \ No newline at end of file diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 2f03f9d0..51eb8676 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, 3.12, and 3.13 on both UNIX and Windows. + 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 @@ -148,7 +148,7 @@ Running System Tests .. note:: - System tests are only configured to run under Python 3.8, 3.12, and 3.13. + System tests are only configured to run under Python 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 @@ -195,11 +195,11 @@ configure them just like the System Tests. # Run all tests in a folder $ cd samples/snippets - $ nox -s py-3.8 + $ nox -s py-3.9 # Run a single sample test $ cd samples/snippets - $ nox -s py-3.8 -- -k + $ nox -s py-3.9 -- -k ******************************************** Note About ``README`` as it pertains to PyPI @@ -221,14 +221,12 @@ Supported Python Versions We support: -- `Python 3.8`_ - `Python 3.9`_ - `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/ @@ -241,7 +239,7 @@ Supported versions can be found in our ``noxfile.py`` `config`_. .. _config: https://github.com/googleapis/python-bigquery-sqlalchemy/blob/main/noxfile.py -We also explicitly decided to support Python 3 beginning with version 3.8. +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 diff --git a/README.rst b/README.rst index 2a64c0c7..be964f0c 100644 --- a/README.rst +++ b/README.rst @@ -51,7 +51,7 @@ dependencies. Supported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^ -Python >= 3.8, <3.14 +Python >= 3.9, <3.14 Unsupported Python Versions ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/noxfile.py b/noxfile.py index b6e34730..87e1653a 100644 --- a/noxfile.py +++ b/noxfile.py @@ -39,9 +39,9 @@ "setup.py", ] -DEFAULT_PYTHON_VERSION = "3.8" +DEFAULT_PYTHON_VERSION = "3.9" -UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] +UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.9", "3.10", "3.11", "3.12", "3.13"] UNIT_TEST_STANDARD_DEPENDENCIES = [ "mock", "asyncmock", @@ -56,11 +56,6 @@ "tests", ] UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = { - "3.8": [ - "tests", - "alembic", - "bqstorage", - ], "3.11": [ "tests", "geography", @@ -78,7 +73,7 @@ ], } -SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.8", "3.12", "3.13"] +SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.12", "3.13"] SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [ "mock", "pytest", @@ -91,11 +86,6 @@ "tests", ] SYSTEM_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = { - "3.8": [ - "tests", - "alembic", - "bqstorage", - ], "3.12": [ "tests", "geography", @@ -398,9 +388,7 @@ def compliance(session): "-c", constraints_path, ) - if session.python == "3.8": - extras = "[tests,alembic]" - elif session.python in ["3.12", "3.13"]: + if session.python in ["3.12", "3.13"]: extras = "[tests,geography]" else: extras = "[tests]" diff --git a/owlbot.py b/owlbot.py index 5173dce0..c9512594 100644 --- a/owlbot.py +++ b/owlbot.py @@ -30,14 +30,13 @@ # ---------------------------------------------------------------------------- extras = ["tests"] extras_by_python = { - "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", "3.13"], - system_test_python_versions=["3.8", "3.12", "3.13"], + unit_test_python_versions=["3.9", "3.10", "3.11", "3.12", "3.13"], + system_test_python_versions=["3.12", "3.13"], cov_level=100, unit_test_extras=extras, unit_test_extras_by_python=extras_by_python, diff --git a/samples/snippets/noxfile.py b/samples/snippets/noxfile.py index e5885544..10ecc88e 100644 --- a/samples/snippets/noxfile.py +++ b/samples/snippets/noxfile.py @@ -89,7 +89,7 @@ def get_pytest_env_vars() -> Dict[str, str]: # DO NOT EDIT - automatically generated. # All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] +ALL_VERSIONS = ["3.7", "3.9", "3.10", "3.11", "3.12", "3.13"] # Any default versions that should be ignored. IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt index d31b0a4e..de552810 100644 --- a/samples/snippets/requirements-test.txt +++ b/samples/snippets/requirements-test.txt @@ -5,16 +5,13 @@ google-auth==2.40.3 google-cloud-testutils==1.6.4 iniconfig==2.1.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.1 six==1.17.0 toml==0.10.2 -typing-extensions===4.13.0; python_version == '3.8' typing-extensions==4.14.1; python_version >= '3.9' diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt index a98926e2..9fb5e6cf 100644 --- a/samples/snippets/requirements.txt +++ b/samples/snippets/requirements.txt @@ -1,37 +1,26 @@ -alembic===1.14.0; python_version == '3.8' alembic==1.16.4; python_version >= '3.9' certifi==2025.7.14 charset-normalizer==3.4.2 geoalchemy2==0.17.1 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.35.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.70.0 -greenlet===3.1.1; python_version == '3.8' greenlet==3.2.3; python_version >= '3.9' -grpcio===1.68.0; python_version == '3.8' grpcio==1.73.1; python_version >= '3.9' -grpcio-status===1.68.0; python_version == '3.8' grpcio-status==1.73.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.10; python_version >= '3.9' -markupsafe===2.1.5; python_version == '3.8' 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.31.1; python_version >= '3.9' 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' python-dateutil==2.9.0.post0 pytz==2025.2 @@ -41,7 +30,5 @@ 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; python_version == '3.8' typing-extensions==4.14.1; python_version >= '3.9' -urllib3===2.2.3; python_version == '3.8' urllib3==2.5.0; python_version >= '3.9' diff --git a/testing/constraints-3.8.txt b/testing/constraints-3.8.txt deleted file mode 100644 index 667a747d..00000000 --- a/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==1.25.0 -google-cloud-bigquery==3.3.6 -google-cloud-bigquery-storage==2.0.0 -google-api-core==1.31.5 -grpcio==1.47.0 -pyarrow==3.0.0