From 0c7f6a6d6e6e68d275ae40c66ec9b8d1c27e70e4 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Wed, 30 Jul 2025 14:02:48 -0700 Subject: [PATCH 01/11] feat: check Python and dependency versions in generated GAPICs --- .../%namespace/%name_%version/%sub/__init__.py.j2 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 8ee1670431..3727fa1f98 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -7,6 +7,17 @@ from {{package_path}} import gapic_version as package_version __version__ = package_version.__version__ + +import google.api_core + +{# How do we get the name of the PyPI path into this template? We + want the string arguments below to be something like + "google-cloud-foo (google.cloud.foo)", where the name outside the + parentheses is the PyPI package name, and the the name inside the + parentheses is the qualified Python package name installed. #} +api_core.check_python_version("{package_path}") +api_core.check_dependency_versions("{package_path}") + {# Import subpackages. -#} {% for subpackage, _ in api.subpackages|dictsort %} from . import {{ subpackage }} From 63ccd410bf8d55cef308ce3795939203e42318a7 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Wed, 30 Jul 2025 15:14:04 -0700 Subject: [PATCH 02/11] fix import --- gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 3727fa1f98..8e0a9ec473 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -8,7 +8,7 @@ from {{package_path}} import gapic_version as package_version __version__ = package_version.__version__ -import google.api_core +import google.api_core as api_core {# How do we get the name of the PyPI path into this template? We want the string arguments below to be something like From 91f20d49add94b781d3671823ab17ea689ba5c35 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Thu, 31 Jul 2025 13:23:13 -0700 Subject: [PATCH 03/11] Update goldens --- .../templates/%namespace/%name_%version/%sub/__init__.py.j2 | 4 ++-- .../goldens/asset/google/cloud/asset_v1/__init__.py | 6 ++++++ .../credentials/google/iam/credentials_v1/__init__.py | 6 ++++++ .../goldens/eventarc/google/cloud/eventarc_v1/__init__.py | 6 ++++++ .../goldens/logging/google/cloud/logging_v2/__init__.py | 6 ++++++ .../logging_internal/google/cloud/logging_v2/__init__.py | 6 ++++++ .../goldens/redis/google/cloud/redis_v1/__init__.py | 6 ++++++ .../redis_selective/google/cloud/redis_v1/__init__.py | 6 ++++++ 8 files changed, 44 insertions(+), 2 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 8e0a9ec473..5f9332bf4e 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -15,8 +15,8 @@ import google.api_core as api_core "google-cloud-foo (google.cloud.foo)", where the name outside the parentheses is the PyPI package name, and the the name inside the parentheses is the qualified Python package name installed. #} -api_core.check_python_version("{package_path}") -api_core.check_dependency_versions("{package_path}") +api_core.check_python_version("{{package_path}}") +api_core.check_dependency_versions("{{package_path}}") {# Import subpackages. -#} {% for subpackage, _ in api.subpackages|dictsort %} diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index 03ee9ec521..3288e11f2d 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.cloud.asset_v1") +api_core.check_dependency_versions("google.cloud.asset_v1") + + from .services.asset_service import AssetServiceClient from .services.asset_service import AssetServiceAsyncClient diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index 2be4471eb8..18cbdd3d1e 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.iam.credentials_v1") +api_core.check_dependency_versions("google.iam.credentials_v1") + + from .services.iam_credentials import IAMCredentialsClient from .services.iam_credentials import IAMCredentialsAsyncClient diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index a343867284..9072d37a2e 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.cloud.eventarc_v1") +api_core.check_dependency_versions("google.cloud.eventarc_v1") + + from .services.eventarc import EventarcClient from .services.eventarc import EventarcAsyncClient diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index e8b59e0bb5..54d86bfede 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.cloud.logging_v2") +api_core.check_dependency_versions("google.cloud.logging_v2") + + from .services.config_service_v2 import ConfigServiceV2Client from .services.config_service_v2 import ConfigServiceV2AsyncClient from .services.logging_service_v2 import LoggingServiceV2Client diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index 3e0f9c2155..caddceb3c8 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.cloud.logging_v2") +api_core.check_dependency_versions("google.cloud.logging_v2") + + from .services.config_service_v2 import BaseConfigServiceV2Client from .services.config_service_v2 import BaseConfigServiceV2AsyncClient from .services.logging_service_v2 import LoggingServiceV2Client diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index af3d250ccd..f08c081fa3 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.cloud.redis_v1") +api_core.check_dependency_versions("google.cloud.redis_v1") + + from .services.cloud_redis import CloudRedisClient from .services.cloud_redis import CloudRedisAsyncClient diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index 760fe80f6c..de6f95b7e1 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -18,6 +18,12 @@ __version__ = package_version.__version__ +import google.api_core as api_core + +api_core.check_python_version("google.cloud.redis_v1") +api_core.check_dependency_versions("google.cloud.redis_v1") + + from .services.cloud_redis import CloudRedisClient from .services.cloud_redis import CloudRedisAsyncClient From 4489b456c06a72ab595e5ca77028770b089d206f Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Thu, 31 Jul 2025 16:36:38 -0700 Subject: [PATCH 04/11] allow Python, dependency versions checks without upgrading api_core The preferred method is still to sue the code in api_core, but we have a (repetitive) fallback in case users haven't installed the new version that implements that functionality. --- .../%name_%version/%sub/__init__.py.j2 | 61 ++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 5f9332bf4e..ec236902fd 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -10,14 +10,61 @@ __version__ = package_version.__version__ import google.api_core as api_core -{# How do we get the name of the PyPI path into this template? We - want the string arguments below to be something like - "google-cloud-foo (google.cloud.foo)", where the name outside the - parentheses is the PyPI package name, and the the name inside the - parentheses is the qualified Python package name installed. #} -api_core.check_python_version("{{package_path}}") -api_core.check_dependency_versions("{{package_path}}") +try: + api_core.check_python_version("{{package_path}}") + api_core.check_dependency_versions("{{package_path}}") +except AttributeError: +{# TODO: Remove this try-catch when we require api-core at a version that + supports the changes in https://github.com/googleapis/python-api-core/pull/832 + In the meantime, please ensure the functionality here mirrors the + equivalent functionality in api_core, in those two functions above. +-#} + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + + _py_version_str = sys.version.split()[0] + _package_label = "{{package_path}}" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}. " + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}." + + {# Import subpackages. -#} {% for subpackage, _ in api.subpackages|dictsort %} from . import {{ subpackage }} From 953b81da06816b410b6e69a3d049221cdd586ca1 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Thu, 31 Jul 2025 19:15:53 -0700 Subject: [PATCH 05/11] Update goldens; allow for not found dependencies --- .../%name_%version/%sub/__init__.py.j2 | 39 +++++++------- .../asset/google/cloud/asset_v1/__init__.py | 53 ++++++++++++++++++- .../google/iam/credentials_v1/__init__.py | 53 ++++++++++++++++++- .../google/cloud/eventarc_v1/__init__.py | 53 ++++++++++++++++++- .../google/cloud/logging_v2/__init__.py | 53 ++++++++++++++++++- .../google/cloud/logging_v2/__init__.py | 53 ++++++++++++++++++- .../redis/google/cloud/redis_v1/__init__.py | 53 ++++++++++++++++++- .../google/cloud/redis_v1/__init__.py | 53 ++++++++++++++++++- 8 files changed, 378 insertions(+), 32 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index ec236902fd..9edbfa3ec8 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -19,11 +19,12 @@ except AttributeError: In the meantime, please ensure the functionality here mirrors the equivalent functionality in api_core, in those two functions above. --#} +#} # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. import logging + import sys _py_version_str = sys.version.split()[0] _package_label = "{{package_path}}" @@ -39,7 +40,7 @@ except AttributeError: "it reaches its end of life (October 2025). Please " + "upgrade to the latest Python version, or at " + "least Python 3.10, before then, and " + - f"then update {_package_label}. " + f"then update {_package_label}.") import pkg_resources from packaging.version import parse as parse_version @@ -48,22 +49,24 @@ except AttributeError: version_string = pkg_resources.get_distribution(dependency_name).version return parse_version(version_string) - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}." - + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass {# Import subpackages. -#} {% for subpackage, _ in api.subpackages|dictsort %} diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index 3288e11f2d..8a090afdb3 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.cloud.asset_v1") -api_core.check_dependency_versions("google.cloud.asset_v1") +try: + api_core.check_python_version("google.cloud.asset_v1") + api_core.check_dependency_versions("google.cloud.asset_v1") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.asset_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.asset_service import AssetServiceClient diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index 18cbdd3d1e..5ef5a4db75 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.iam.credentials_v1") -api_core.check_dependency_versions("google.iam.credentials_v1") +try: + api_core.check_python_version("google.iam.credentials_v1") + api_core.check_dependency_versions("google.iam.credentials_v1") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.iam.credentials_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.iam_credentials import IAMCredentialsClient diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index 9072d37a2e..93170704e5 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.cloud.eventarc_v1") -api_core.check_dependency_versions("google.cloud.eventarc_v1") +try: + api_core.check_python_version("google.cloud.eventarc_v1") + api_core.check_dependency_versions("google.cloud.eventarc_v1") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.eventarc_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.eventarc import EventarcClient diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index 54d86bfede..14158339b6 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.cloud.logging_v2") -api_core.check_dependency_versions("google.cloud.logging_v2") +try: + api_core.check_python_version("google.cloud.logging_v2") + api_core.check_dependency_versions("google.cloud.logging_v2") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.logging_v2" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.config_service_v2 import ConfigServiceV2Client diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index caddceb3c8..899c74782d 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.cloud.logging_v2") -api_core.check_dependency_versions("google.cloud.logging_v2") +try: + api_core.check_python_version("google.cloud.logging_v2") + api_core.check_dependency_versions("google.cloud.logging_v2") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.logging_v2" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.config_service_v2 import BaseConfigServiceV2Client diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index f08c081fa3..d3d6503473 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.cloud.redis_v1") -api_core.check_dependency_versions("google.cloud.redis_v1") +try: + api_core.check_python_version("google.cloud.redis_v1") + api_core.check_dependency_versions("google.cloud.redis_v1") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.redis_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.cloud_redis import CloudRedisClient diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index de6f95b7e1..6e69a90ac0 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -20,8 +20,57 @@ import google.api_core as api_core -api_core.check_python_version("google.cloud.redis_v1") -api_core.check_dependency_versions("google.cloud.redis_v1") +try: + api_core.check_python_version("google.cloud.redis_v1") + api_core.check_dependency_versions("google.cloud.redis_v1") +except AttributeError: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.redis_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + import pkg_resources + from packaging.version import parse as parse_version + + def _get_version(dependency_name): + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + + try: + _dependency_package = "google.protobuf" + _version_used = _get_version(_dependency_package) + _next_supported_version = "4.25.8" + if _version_used < parse_version(_next_supported_version): + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + except pkg_resources.DistributionNotFound: + pass from .services.cloud_redis import CloudRedisClient From 84987b943f1c60460c8e4adef1f6a834613133d3 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Thu, 31 Jul 2025 21:32:09 -0700 Subject: [PATCH 06/11] Update code & integration tests to work on all Python versions --- .../%name_%version/%sub/__init__.py.j2 | 58 +++++++++++-------- noxfile.py | 8 +++ .../asset/google/cloud/asset_v1/__init__.py | 56 +++++++++++------- .../google/iam/credentials_v1/__init__.py | 56 +++++++++++------- .../google/cloud/eventarc_v1/__init__.py | 56 +++++++++++------- .../google/cloud/logging_v2/__init__.py | 56 +++++++++++------- .../google/cloud/logging_v2/__init__.py | 56 +++++++++++------- .../redis/google/cloud/redis_v1/__init__.py | 56 +++++++++++------- .../google/cloud/redis_v1/__init__.py | 56 +++++++++++------- 9 files changed, 281 insertions(+), 177 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 9edbfa3ec8..5492cc9e2d 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -42,31 +42,43 @@ except AttributeError: "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata + + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") {# Import subpackages. -#} {% for subpackage, _ in api.subpackages|dictsort %} diff --git a/noxfile.py b/noxfile.py index 2d688e139b..870949fcc5 100644 --- a/noxfile.py +++ b/noxfile.py @@ -60,6 +60,8 @@ def unit(session): "pyfakefs", "grpcio-status", "proto-plus", + "setuptools", # TODO: Remove when not needed in __init__.py.j2 + "packaging", # TODO: Remove when not needed in __init__.py.j2 ) session.install("-e", ".") session.run( @@ -481,6 +483,8 @@ def run_showcase_unit_tests(session, fail_under=100, rest_async_io_enabled=False "pytest-xdist", "asyncmock; python_version < '3.8'", "pytest-asyncio", + "setuptools", # TODO: Remove when not needed in __init__.py.j2 + "packaging", # TODO: Remove when not needed in __init__.py.j2 ) # Run the tests. # NOTE: async rest is not supported against the minimum supported version of google-api-core. @@ -595,6 +599,8 @@ def showcase_mypy( "types-protobuf", "types-requests", "types-dataclasses", + "setuptools", # TODO: Remove when not needed in __init__.py.j2 + "packaging", # TODO: Remove when not needed in __init__.py.j2 ) with showcase_library(session, templates=templates, other_opts=other_opts) as lib: @@ -725,6 +731,8 @@ def mypy(session): "types-PyYAML", "types-dataclasses", "click==8.1.3", + "setuptools", # TODO: Remove when not needed in __init__.py.j2 + "packaging", # TODO: Remove when not needed in __init__.py.j2 ) session.install(".") session.run("mypy", "-p", "gapic") diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index 8a090afdb3..cf6b765ee9 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.asset_service import AssetServiceClient diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index 5ef5a4db75..98349907a0 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.iam_credentials import IAMCredentialsClient diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index 93170704e5..6deb432abe 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.eventarc import EventarcClient diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index 14158339b6..c286dff4cf 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.config_service_v2 import ConfigServiceV2Client diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index 899c74782d..f32009e695 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.config_service_v2 import BaseConfigServiceV2Client diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index d3d6503473..c57d143587 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.cloud_redis import CloudRedisClient diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index 6e69a90ac0..68fab62221 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -46,31 +46,43 @@ "least Python 3.10, before then, and " + f"then update {_package_label}.") - import pkg_resources from packaging.version import parse as parse_version - def _get_version(dependency_name): - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) + if sys.version_info < (3, 8): + import pkg_resources + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - try: - _dependency_package = "google.protobuf" - _version_used = _get_version(_dependency_package) - _next_supported_version = "4.25.8" - if _version_used < parse_version(_next_supported_version): - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - except pkg_resources.DistributionNotFound: - pass + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.cloud_redis import CloudRedisClient From 8645eadf31bbcc88fe9fbbf96c3148e737e4c7f0 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Tue, 2 Sep 2025 15:31:28 -0700 Subject: [PATCH 07/11] fix import errors --- .../%name_%version/%sub/__init__.py.j2 | 131 +++++++++--------- .../asset/google/cloud/asset_v1/__init__.py | 115 +++++++-------- .../google/iam/credentials_v1/__init__.py | 115 +++++++-------- .../google/cloud/eventarc_v1/__init__.py | 115 +++++++-------- .../google/cloud/logging_v2/__init__.py | 115 +++++++-------- .../google/cloud/logging_v2/__init__.py | 115 +++++++-------- .../redis/google/cloud/redis_v1/__init__.py | 115 +++++++-------- .../google/cloud/redis_v1/__init__.py | 115 +++++++-------- 8 files changed, 472 insertions(+), 464 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 5492cc9e2d..f2ee6b20c9 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -10,76 +10,77 @@ __version__ = package_version.__version__ import google.api_core as api_core -try: - api_core.check_python_version("{{package_path}}") - api_core.check_dependency_versions("{{package_path}}") -except AttributeError: +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("{{package_path}}") + api_core.check_dependency_versions("{{package_path}}") +else: {# TODO: Remove this try-catch when we require api-core at a version that supports the changes in https://github.com/googleapis/python-api-core/pull/832 In the meantime, please ensure the functionality here mirrors the - equivalent functionality in api_core, in those two functions above. + equivalent functionality in api_core, in those two functions above. #} - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. - - import logging - import sys - - _py_version_str = sys.version.split()[0] - _package_label = "{{package_path}}" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") - - from packaging.version import parse as parse_version - - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata - - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None - - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") - + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. + + import logging + import sys + + _py_version_str = sys.version.split()[0] + _package_label = "{{package_path}}" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") + + from packaging.version import parse as parse_version + + if sys.version_info < (3, 8): + import pkg_resources + + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata + + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") + {# Import subpackages. -#} {% for subpackage, _ in api.subpackages|dictsort %} from . import {{ subpackage }} diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index cf6b765ee9..86c8ea11dc 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.cloud.asset_v1") - api_core.check_dependency_versions("google.cloud.asset_v1") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.cloud.asset_v1") + api_core.check_dependency_versions("google.cloud.asset_v1") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.cloud.asset_v1" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.asset_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.asset_service import AssetServiceClient diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index 98349907a0..ea849952bb 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.iam.credentials_v1") - api_core.check_dependency_versions("google.iam.credentials_v1") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.iam.credentials_v1") + api_core.check_dependency_versions("google.iam.credentials_v1") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.iam.credentials_v1" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.iam.credentials_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.iam_credentials import IAMCredentialsClient diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index 6deb432abe..96d465502c 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.cloud.eventarc_v1") - api_core.check_dependency_versions("google.cloud.eventarc_v1") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.cloud.eventarc_v1") + api_core.check_dependency_versions("google.cloud.eventarc_v1") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.cloud.eventarc_v1" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.eventarc_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.eventarc import EventarcClient diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index c286dff4cf..7db3e0f508 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.cloud.logging_v2") - api_core.check_dependency_versions("google.cloud.logging_v2") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.cloud.logging_v2") + api_core.check_dependency_versions("google.cloud.logging_v2") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.cloud.logging_v2" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.logging_v2" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.config_service_v2 import ConfigServiceV2Client diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index f32009e695..1ee14142b3 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.cloud.logging_v2") - api_core.check_dependency_versions("google.cloud.logging_v2") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.cloud.logging_v2") + api_core.check_dependency_versions("google.cloud.logging_v2") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.cloud.logging_v2" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.logging_v2" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.config_service_v2 import BaseConfigServiceV2Client diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index c57d143587..679807e7c3 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.cloud.redis_v1") - api_core.check_dependency_versions("google.cloud.redis_v1") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.cloud.redis_v1") + api_core.check_dependency_versions("google.cloud.redis_v1") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.cloud.redis_v1" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.redis_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.cloud_redis import CloudRedisClient diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index 68fab62221..1fbdd3e368 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -20,69 +20,70 @@ import google.api_core as api_core -try: - api_core.check_python_version("google.cloud.redis_v1") - api_core.check_dependency_versions("google.cloud.redis_v1") -except AttributeError: - # An older version of api_core is installed, which does not define the - # functions above. We do equivalent checks manually. +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): + api_core.check_python_version("google.cloud.redis_v1") + api_core.check_dependency_versions("google.cloud.redis_v1") +else: + # An older version of api_core is installed, which does not define the + # functions above. We do equivalent checks manually. - import logging - import sys + import logging + import sys - _py_version_str = sys.version.split()[0] - _package_label = "google.cloud.redis_v1" - if sys.version_info < (3, 9): - logging.warning("You are using a non-supported Python version " + - f"({_py_version_str}). Google will not post any further " + - f"updates to {_package_label} supporting this Python version. " + - "Please upgrade to the latest Python version, or at " + - f"least to Python 3.9, and then update {_package_label}.") - if sys.version_info[:2] == (3, 9): - logging.warning(f"You are using a Python version ({_py_version_str}) " + - f"which Google will stop supporting in {_package_label} when " + - "it reaches its end of life (October 2025). Please " + - "upgrade to the latest Python version, or at " + - "least Python 3.10, before then, and " + - f"then update {_package_label}.") + _py_version_str = sys.version.split()[0] + _package_label = "google.cloud.redis_v1" + if sys.version_info < (3, 9): + logging.warning("You are using a non-supported Python version " + + f"({_py_version_str}). Google will not post any further " + + f"updates to {_package_label} supporting this Python version. " + + "Please upgrade to the latest Python version, or at " + + f"least to Python 3.9, and then update {_package_label}.") + if sys.version_info[:2] == (3, 9): + logging.warning(f"You are using a Python version ({_py_version_str}) " + + f"which Google will stop supporting in {_package_label} when " + + "it reaches its end of life (October 2025). Please " + + "upgrade to the latest Python version, or at " + + "least Python 3.10, before then, and " + + f"then update {_package_label}.") - from packaging.version import parse as parse_version + from packaging.version import parse as parse_version - if sys.version_info < (3, 8): - import pkg_resources - def _get_version(dependency_name): - try: - version_string = pkg_resources.get_distribution(dependency_name).version - return parse_version(version_string) - except pkg_resources.DistributionNotFound: - return None - else: - from importlib import metadata + if sys.version_info < (3, 8): + import pkg_resources - def _get_version(dependency_name): - try: - version_string = metadata.version("requests") - parsed_version = parse_version(version_string) - return parsed_version.release - except metadata.PackageNotFoundError: - return None + def _get_version(dependency_name): + try: + version_string = pkg_resources.get_distribution(dependency_name).version + return parse_version(version_string) + except pkg_resources.DistributionNotFound: + return None + else: + from importlib import metadata - _dependency_package = "google.protobuf" - _next_supported_version = "4.25.8" - _next_supported_version_tuple = (4, 25, 8) - _version_used = _get_version(_dependency_package) - if _version_used and _version_used < _next_supported_version_tuple: - logging.warning(f"DEPRECATION: Package {_package_label} depends on " + - f"{_dependency_package}, currently installed at version " + - f"{_version_used.__str__}. Future updates to " + - f"{_package_label} will require {_dependency_package} at " + - f"version {_next_supported_version} or higher. Please ensure " + - "that either (a) your Python environment doesn't pin the " + - f"version of {_dependency_package}, so that updates to " + - f"{_package_label} can require the higher version, or " + - "(b) you manually update your Python environment to use at " + - f"least version {_next_supported_version} of " + - f"{_dependency_package}.") + def _get_version(dependency_name): + try: + version_string = metadata.version("requests") + parsed_version = parse_version(version_string) + return parsed_version.release + except metadata.PackageNotFoundError: + return None + + _dependency_package = "google.protobuf" + _next_supported_version = "4.25.8" + _next_supported_version_tuple = (4, 25, 8) + _version_used = _get_version(_dependency_package) + if _version_used and _version_used < _next_supported_version_tuple: + logging.warning(f"DEPRECATION: Package {_package_label} depends on " + + f"{_dependency_package}, currently installed at version " + + f"{_version_used.__str__}. Future updates to " + + f"{_package_label} will require {_dependency_package} at " + + f"version {_next_supported_version} or higher. Please ensure " + + "that either (a) your Python environment doesn't pin the " + + f"version of {_dependency_package}, so that updates to " + + f"{_package_label} can require the higher version, or " + + "(b) you manually update your Python environment to use at " + + f"least version {_next_supported_version} of " + + f"{_dependency_package}.") from .services.cloud_redis import CloudRedisClient From 830559aa339496026ec2e973fd153b82e629494f Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Wed, 3 Sep 2025 10:55:06 -0700 Subject: [PATCH 08/11] Install `packaging` package --- gapic/templates/setup.py.j2 | 1 + tests/integration/goldens/asset/setup.py | 1 + tests/integration/goldens/credentials/setup.py | 1 + tests/integration/goldens/eventarc/setup.py | 1 + tests/integration/goldens/logging/setup.py | 1 + tests/integration/goldens/logging_internal/setup.py | 1 + tests/integration/goldens/redis/setup.py | 1 + tests/integration/goldens/redis_selective/setup.py | 1 + 8 files changed, 8 insertions(+) diff --git a/gapic/templates/setup.py.j2 b/gapic/templates/setup.py.j2 index 2f265dd994..79ffd1885a 100644 --- a/gapic/templates/setup.py.j2 +++ b/gapic/templates/setup.py.j2 @@ -37,6 +37,7 @@ dependencies = [ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", {# Explicitly exclude protobuf versions mentioned in https://cloud.google.com/support/bulletins#GCP-2022-019 #} diff --git a/tests/integration/goldens/asset/setup.py b/tests/integration/goldens/asset/setup.py index 5d506dc2d9..2ae1de860b 100755 --- a/tests/integration/goldens/asset/setup.py +++ b/tests/integration/goldens/asset/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", diff --git a/tests/integration/goldens/credentials/setup.py b/tests/integration/goldens/credentials/setup.py index 6ffe75b3ba..e1728860d3 100755 --- a/tests/integration/goldens/credentials/setup.py +++ b/tests/integration/goldens/credentials/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", diff --git a/tests/integration/goldens/eventarc/setup.py b/tests/integration/goldens/eventarc/setup.py index 4cba69da02..50e26c8ca3 100755 --- a/tests/integration/goldens/eventarc/setup.py +++ b/tests/integration/goldens/eventarc/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", diff --git a/tests/integration/goldens/logging/setup.py b/tests/integration/goldens/logging/setup.py index 23a3a12a2b..f991eec737 100755 --- a/tests/integration/goldens/logging/setup.py +++ b/tests/integration/goldens/logging/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", diff --git a/tests/integration/goldens/logging_internal/setup.py b/tests/integration/goldens/logging_internal/setup.py index 23a3a12a2b..f991eec737 100755 --- a/tests/integration/goldens/logging_internal/setup.py +++ b/tests/integration/goldens/logging_internal/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", diff --git a/tests/integration/goldens/redis/setup.py b/tests/integration/goldens/redis/setup.py index 54fece2f91..0d28f00404 100755 --- a/tests/integration/goldens/redis/setup.py +++ b/tests/integration/goldens/redis/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", diff --git a/tests/integration/goldens/redis_selective/setup.py b/tests/integration/goldens/redis_selective/setup.py index 54fece2f91..0d28f00404 100755 --- a/tests/integration/goldens/redis_selective/setup.py +++ b/tests/integration/goldens/redis_selective/setup.py @@ -43,6 +43,7 @@ # Exclude incompatible versions of `google-auth` # See https://github.com/googleapis/google-cloud-python/issues/12364 "google-auth >= 2.14.1, <3.0.0,!=2.24.0,!=2.25.0", + "packaging", # TODO: Remove once we require versions of api core that include this "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf>=3.20.2,<7.0.0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", From b809fba381be24cfd22cba2ef07ed51be0ee4753 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Wed, 3 Sep 2025 11:30:47 -0700 Subject: [PATCH 09/11] fix: skip type warnings for imports not present in older api_core --- .../%namespace/%name_%version/%sub/__init__.py.j2 | 7 ++++--- .../goldens/asset/google/cloud/asset_v1/__init__.py | 4 ++-- .../credentials/google/iam/credentials_v1/__init__.py | 4 ++-- .../goldens/eventarc/google/cloud/eventarc_v1/__init__.py | 4 ++-- .../goldens/logging/google/cloud/logging_v2/__init__.py | 4 ++-- .../logging_internal/google/cloud/logging_v2/__init__.py | 4 ++-- .../goldens/redis/google/cloud/redis_v1/__init__.py | 4 ++-- .../redis_selective/google/cloud/redis_v1/__init__.py | 4 ++-- 8 files changed, 18 insertions(+), 17 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index f2ee6b20c9..b0857255d3 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -11,10 +11,11 @@ __version__ = package_version.__version__ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("{{package_path}}") - api_core.check_dependency_versions("{{package_path}}") + {# TODO(api_core): remove `type:ignore` below when minimum version of api_core makes the else clause unnecessary. #} + api_core.check_python_version("{{package_path}}") # type: ignore + api_core.check_dependency_versions("{{package_path}}") # type: ignore else: -{# TODO: Remove this try-catch when we require api-core at a version that +{# TODO(api_core): Remove this try-catch when we require api-core at a version that supports the changes in https://github.com/googleapis/python-api-core/pull/832 In the meantime, please ensure the functionality here mirrors the diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index 86c8ea11dc..d34867257e 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.cloud.asset_v1") - api_core.check_dependency_versions("google.cloud.asset_v1") + api_core.check_python_version("google.cloud.asset_v1") # type: ignore + api_core.check_dependency_versions("google.cloud.asset_v1") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index ea849952bb..b5da2f5bbb 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.iam.credentials_v1") - api_core.check_dependency_versions("google.iam.credentials_v1") + api_core.check_python_version("google.iam.credentials_v1") # type: ignore + api_core.check_dependency_versions("google.iam.credentials_v1") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index 96d465502c..e585f1dcde 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.cloud.eventarc_v1") - api_core.check_dependency_versions("google.cloud.eventarc_v1") + api_core.check_python_version("google.cloud.eventarc_v1") # type: ignore + api_core.check_dependency_versions("google.cloud.eventarc_v1") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index 7db3e0f508..5d2e82df53 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.cloud.logging_v2") - api_core.check_dependency_versions("google.cloud.logging_v2") + api_core.check_python_version("google.cloud.logging_v2") # type: ignore + api_core.check_dependency_versions("google.cloud.logging_v2") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index 1ee14142b3..10737277e7 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.cloud.logging_v2") - api_core.check_dependency_versions("google.cloud.logging_v2") + api_core.check_python_version("google.cloud.logging_v2") # type: ignore + api_core.check_dependency_versions("google.cloud.logging_v2") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index 679807e7c3..3e25b02dea 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.cloud.redis_v1") - api_core.check_dependency_versions("google.cloud.redis_v1") + api_core.check_python_version("google.cloud.redis_v1") # type: ignore + api_core.check_dependency_versions("google.cloud.redis_v1") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index 1fbdd3e368..19d7ad41fd 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -21,8 +21,8 @@ import google.api_core as api_core if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): - api_core.check_python_version("google.cloud.redis_v1") - api_core.check_dependency_versions("google.cloud.redis_v1") + api_core.check_python_version("google.cloud.redis_v1") # type: ignore + api_core.check_dependency_versions("google.cloud.redis_v1") # type: ignore else: # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. From eb30d4f6b752e061f47f81d5ab9444751f158e84 Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Wed, 3 Sep 2025 12:34:51 -0700 Subject: [PATCH 10/11] fix: exclude the backwards-compatibility code fro mcoverage checks --- gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 | 4 ++-- .../goldens/asset/google/cloud/asset_v1/__init__.py | 4 ++-- .../goldens/credentials/google/iam/credentials_v1/__init__.py | 4 ++-- .../goldens/eventarc/google/cloud/eventarc_v1/__init__.py | 4 ++-- .../goldens/logging/google/cloud/logging_v2/__init__.py | 4 ++-- .../logging_internal/google/cloud/logging_v2/__init__.py | 4 ++-- .../goldens/redis/google/cloud/redis_v1/__init__.py | 4 ++-- .../goldens/redis_selective/google/cloud/redis_v1/__init__.py | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index b0857255d3..2994e85066 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -10,11 +10,11 @@ __version__ = package_version.__version__ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage {# TODO(api_core): remove `type:ignore` below when minimum version of api_core makes the else clause unnecessary. #} api_core.check_python_version("{{package_path}}") # type: ignore api_core.check_dependency_versions("{{package_path}}") # type: ignore -else: +else: # pragma: no coverage {# TODO(api_core): Remove this try-catch when we require api-core at a version that supports the changes in https://github.com/googleapis/python-api-core/pull/832 diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index d34867257e..f98e3304a2 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.cloud.asset_v1") # type: ignore api_core.check_dependency_versions("google.cloud.asset_v1") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index b5da2f5bbb..5153a87607 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.iam.credentials_v1") # type: ignore api_core.check_dependency_versions("google.iam.credentials_v1") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index e585f1dcde..b7f9a402c6 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.cloud.eventarc_v1") # type: ignore api_core.check_dependency_versions("google.cloud.eventarc_v1") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index 5d2e82df53..86d8d2cf83 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.cloud.logging_v2") # type: ignore api_core.check_dependency_versions("google.cloud.logging_v2") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index 10737277e7..109c095471 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.cloud.logging_v2") # type: ignore api_core.check_dependency_versions("google.cloud.logging_v2") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index 3e25b02dea..3ad00b5a69 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.cloud.redis_v1") # type: ignore api_core.check_dependency_versions("google.cloud.redis_v1") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index 19d7ad41fd..50904731d7 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage api_core.check_python_version("google.cloud.redis_v1") # type: ignore api_core.check_dependency_versions("google.cloud.redis_v1") # type: ignore -else: +else: # pragma: no coverage # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. From aa6c36023aff0c95a948bd066124a64e2c8ab88b Mon Sep 17 00:00:00 2001 From: Victor Chudnovsky Date: Wed, 3 Sep 2025 13:27:29 -0700 Subject: [PATCH 11/11] fix: fix coverage skip pragmas --- gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 | 4 ++-- .../goldens/asset/google/cloud/asset_v1/__init__.py | 4 ++-- .../goldens/credentials/google/iam/credentials_v1/__init__.py | 4 ++-- .../goldens/eventarc/google/cloud/eventarc_v1/__init__.py | 4 ++-- .../goldens/logging/google/cloud/logging_v2/__init__.py | 4 ++-- .../logging_internal/google/cloud/logging_v2/__init__.py | 4 ++-- .../goldens/redis/google/cloud/redis_v1/__init__.py | 4 ++-- .../goldens/redis_selective/google/cloud/redis_v1/__init__.py | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 index 2994e85066..ad0834acf5 100644 --- a/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 +++ b/gapic/templates/%namespace/%name_%version/%sub/__init__.py.j2 @@ -10,11 +10,11 @@ __version__ = package_version.__version__ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER {# TODO(api_core): remove `type:ignore` below when minimum version of api_core makes the else clause unnecessary. #} api_core.check_python_version("{{package_path}}") # type: ignore api_core.check_dependency_versions("{{package_path}}") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER {# TODO(api_core): Remove this try-catch when we require api-core at a version that supports the changes in https://github.com/googleapis/python-api-core/pull/832 diff --git a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py index f98e3304a2..eef78ac984 100755 --- a/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py +++ b/tests/integration/goldens/asset/google/cloud/asset_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.cloud.asset_v1") # type: ignore api_core.check_dependency_versions("google.cloud.asset_v1") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py index 5153a87607..effaaa43c8 100755 --- a/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py +++ b/tests/integration/goldens/credentials/google/iam/credentials_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.iam.credentials_v1") # type: ignore api_core.check_dependency_versions("google.iam.credentials_v1") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py index b7f9a402c6..01f1418ddb 100755 --- a/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py +++ b/tests/integration/goldens/eventarc/google/cloud/eventarc_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.cloud.eventarc_v1") # type: ignore api_core.check_dependency_versions("google.cloud.eventarc_v1") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py index 86d8d2cf83..577ef39057 100755 --- a/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging/google/cloud/logging_v2/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.cloud.logging_v2") # type: ignore api_core.check_dependency_versions("google.cloud.logging_v2") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py index 109c095471..ef0c021397 100755 --- a/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py +++ b/tests/integration/goldens/logging_internal/google/cloud/logging_v2/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.cloud.logging_v2") # type: ignore api_core.check_dependency_versions("google.cloud.logging_v2") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py index 3ad00b5a69..83c2d1e030 100755 --- a/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis/google/cloud/redis_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.cloud.redis_v1") # type: ignore api_core.check_dependency_versions("google.cloud.redis_v1") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually. diff --git a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py index 50904731d7..b88bef1b53 100755 --- a/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py +++ b/tests/integration/goldens/redis_selective/google/cloud/redis_v1/__init__.py @@ -20,10 +20,10 @@ import google.api_core as api_core -if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: no coverage +if hasattr(api_core, "check_python_version") and hasattr(api_core, "check_dependency_versions"): # pragma: NO COVER api_core.check_python_version("google.cloud.redis_v1") # type: ignore api_core.check_dependency_versions("google.cloud.redis_v1") # type: ignore -else: # pragma: no coverage +else: # pragma: NO COVER # An older version of api_core is installed, which does not define the # functions above. We do equivalent checks manually.