From 4c0cce76a2928dee52187e2960e351e0bfe690a2 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Mon, 18 May 2026 07:20:57 -0400 Subject: [PATCH 1/3] feat: regenerate monitoring using generator v1.32.0 Regenerates google-cloud-monitoring library using gapic-generator v1.32.0. --- librarian.yaml | 1 - packages/google-cloud-monitoring/docs/conf.py | 4 +-- .../google/cloud/monitoring_v3/__init__.py | 25 +++------------- .../monitoring_v3/types/metric_service.py | 15 +++++----- packages/google-cloud-monitoring/noxfile.py | 4 +-- packages/google-cloud-monitoring/setup.py | 11 ++++--- .../testing/constraints-3.10.txt | 21 ++++++------- .../testing/constraints-3.9.txt | 16 ---------- .../test_alert_policy_service.py | 20 ++++--------- .../gapic/monitoring_v3/test_group_service.py | 26 ++++------------ .../monitoring_v3/test_metric_service.py | 30 +++++-------------- .../test_notification_channel_service.py | 24 ++++----------- .../gapic/monitoring_v3/test_query_service.py | 20 ++++--------- .../test_service_monitoring_service.py | 24 ++++----------- .../monitoring_v3/test_snooze_service.py | 20 ++++--------- .../test_uptime_check_service.py | 26 ++++------------ 16 files changed, 76 insertions(+), 211 deletions(-) delete mode 100644 packages/google-cloud-monitoring/testing/constraints-3.9.txt diff --git a/librarian.yaml b/librarian.yaml index c172b599571c..91c21f465e42 100644 --- a/librarian.yaml +++ b/librarian.yaml @@ -1430,7 +1430,6 @@ libraries: version: 2.30.0 apis: - path: google/monitoring/v3 - skip_generate: true python: library_type: GAPIC_COMBO opt_args_by_api: diff --git a/packages/google-cloud-monitoring/docs/conf.py b/packages/google-cloud-monitoring/docs/conf.py index 0f577cbffaee..06d14b94e942 100644 --- a/packages/google-cloud-monitoring/docs/conf.py +++ b/packages/google-cloud-monitoring/docs/conf.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -83,7 +83,7 @@ # General information about the project. project = "google-cloud-monitoring" -copyright = "2025, Google, LLC" +copyright = "2026, Google, LLC" author = "Google APIs" # The version info for the project you're documenting, acts as replacement for diff --git a/packages/google-cloud-monitoring/google/cloud/monitoring_v3/__init__.py b/packages/google-cloud-monitoring/google/cloud/monitoring_v3/__init__.py index 8f7e8df64e39..0d3318ec2d4b 100644 --- a/packages/google-cloud-monitoring/google/cloud/monitoring_v3/__init__.py +++ b/packages/google-cloud-monitoring/google/cloud/monitoring_v3/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,13 +21,7 @@ __version__ = package_version.__version__ -if sys.version_info >= (3, 8): # pragma: NO COVER - from importlib import metadata -else: # pragma: NO COVER - # TODO(https://github.com/googleapis/python-api-core/issues/835): Remove - # this code path once we drop support for Python 3.7 - import importlib_metadata as metadata - +from importlib import metadata from .services.alert_policy_service import ( AlertPolicyServiceAsyncClient, @@ -183,28 +177,17 @@ # An older version of api_core is installed which does not define the # functions above. We do equivalent checks manually. try: - import sys import warnings _py_version_str = sys.version.split()[0] _package_label = "google.cloud.monitoring_v3" - if sys.version_info < (3, 9): + if sys.version_info < (3, 10): warnings.warn( "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}.", - FutureWarning, - ) - if sys.version_info[:2] == (3, 9): - warnings.warn( - f"You are using a Python version ({_py_version_str}) " - + f"which Google will stop supporting in {_package_label} in " - + "January 2026. Please " - + "upgrade to the latest Python version, or at " - + "least to Python 3.10, before then, and " - + f"then update {_package_label}.", + + f"least to Python 3.10, and then update {_package_label}.", FutureWarning, ) diff --git a/packages/google-cloud-monitoring/google/cloud/monitoring_v3/types/metric_service.py b/packages/google-cloud-monitoring/google/cloud/monitoring_v3/types/metric_service.py index 0b1f9c77ccaf..5a3bba7e5267 100644 --- a/packages/google-cloud-monitoring/google/cloud/monitoring_v3/types/metric_service.py +++ b/packages/google-cloud-monitoring/google/cloud/monitoring_v3/types/metric_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -191,18 +191,17 @@ class ListMetricDescriptorsRequest(proto.Message): resource types that have recent data (within roughly 25 hours) will be included in the response. - - - If a metric descriptor enumerates monitored - resource types, only the monitored resource + - If a metric descriptor enumerates monitored + resource types, only the monitored resource types for which the metric type has recent - data will be included in the returned + data will be included in the returned metric descriptor, and if none of them have recent data, the metric descriptor will not be returned. - - If a metric descriptor does not enumerate the - compatible monitored resource types, it + - If a metric descriptor does not enumerate the + compatible monitored resource types, it will be returned only if the metric type has - recent data for some monitored resource + recent data for some monitored resource type. The returned descriptor will not enumerate any monitored resource types. """ diff --git a/packages/google-cloud-monitoring/noxfile.py b/packages/google-cloud-monitoring/noxfile.py index 776c306158d6..871d0cfb7349 100644 --- a/packages/google-cloud-monitoring/noxfile.py +++ b/packages/google-cloud-monitoring/noxfile.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,7 +31,6 @@ LINT_PATHS.append("samples") ALL_PYTHON = [ - "3.9", "3.10", "3.11", "3.12", @@ -392,7 +391,6 @@ def docs(session): shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) session.run( "sphinx-build", - "-W", # warnings as errors "-T", # show full traceback on exception "-N", # no colors "-b", diff --git a/packages/google-cloud-monitoring/setup.py b/packages/google-cloud-monitoring/setup.py index f3e56abf85b5..afa617e08029 100644 --- a/packages/google-cloud-monitoring/setup.py +++ b/packages/google-cloud-monitoring/setup.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -39,11 +39,11 @@ release_status = "Development Status :: 5 - Production/Stable" dependencies = [ - "google-api-core[grpc] >= 2.11.0, <3.0.0", + "google-api-core[grpc] >= 2.17.1, <3.0.0", # 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", - "grpcio >= 1.33.2, < 2.0.0", + "grpcio >= 1.44.0, < 2.0.0", "grpcio >= 1.75.1, < 2.0.0; python_version >= '3.14'", "proto-plus >= 1.22.3, <2.0.0", "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", @@ -72,7 +72,7 @@ long_description=readme, author="Google LLC", author_email="googleapis-packages@google.com", - license="Apache 2.0", + license="Apache-2.0", url=url, classifiers=[ release_status, @@ -80,7 +80,6 @@ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -91,7 +90,7 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, - python_requires=">=3.9", + python_requires=">=3.10", install_requires=dependencies, extras_require=extras, include_package_data=True, diff --git a/packages/google-cloud-monitoring/testing/constraints-3.10.txt b/packages/google-cloud-monitoring/testing/constraints-3.10.txt index 7599dea499ed..bac7ba85b4ee 100644 --- a/packages/google-cloud-monitoring/testing/constraints-3.10.txt +++ b/packages/google-cloud-monitoring/testing/constraints-3.10.txt @@ -1,10 +1,11 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -google-auth -grpcio -proto-plus -protobuf -# cryptography is a direct dependency of google-auth -cryptography +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file, +# pinning their versions to their lower bounds. +# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", +# then this file should have google-cloud-foo==1.14.0 +google-api-core==2.17.1 +google-auth==2.14.1 +grpcio==1.44.0 +proto-plus==1.22.3 +protobuf==4.25.8 diff --git a/packages/google-cloud-monitoring/testing/constraints-3.9.txt b/packages/google-cloud-monitoring/testing/constraints-3.9.txt deleted file mode 100644 index b2e7acbcc7d3..000000000000 --- a/packages/google-cloud-monitoring/testing/constraints-3.9.txt +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file, -# pinning their versions to their lower bounds. -# For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", -# then this file should have google-cloud-foo==1.14.0 -google-api-core==2.21.0 -pandas==1.1.3 -# numpy is a dependency of pandas -numpy==1.19.3 -google-auth==2.35.0 -# TODO(https://github.com/googleapis/gapic-generator-python/issues/2453) -# Add the minimum supported version of grpcio to constraints files -proto-plus==1.22.3 -protobuf==4.25.8 diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_alert_policy_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_alert_policy_service.py index a624d95ea958..d76635404b73 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_alert_policy_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_alert_policy_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -1880,11 +1874,7 @@ async def test_list_alert_policies_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_alert_policies(request={}) - ).pages: + async for page_ in (await client.list_alert_policies(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_group_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_group_service.py index c2e236f4b796..84c9bf991d10 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_group_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_group_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -1793,11 +1787,7 @@ async def test_list_groups_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_groups(request={}) - ).pages: + async for page_ in (await client.list_groups(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -3668,11 +3658,7 @@ async def test_list_group_members_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_group_members(request={}) - ).pages: + async for page_ in (await client.list_group_members(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_metric_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_metric_service.py index c52b8c5d4c51..b7d0f4949e58 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_metric_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_metric_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -1852,9 +1846,7 @@ async def test_list_monitored_resource_descriptors_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch + async for page_ in ( await client.list_monitored_resource_descriptors(request={}) ).pages: pages.append(page_) @@ -2760,11 +2752,7 @@ async def test_list_metric_descriptors_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_metric_descriptors(request={}) - ).pages: + async for page_ in (await client.list_metric_descriptors(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -4410,11 +4398,7 @@ async def test_list_time_series_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_time_series(request={}) - ).pages: + async for page_ in (await client.list_time_series(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_notification_channel_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_notification_channel_service.py index d6413e5188b9..de3220b534d1 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_notification_channel_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_notification_channel_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -1929,9 +1923,7 @@ async def test_list_notification_channel_descriptors_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch + async for page_ in ( await client.list_notification_channel_descriptors(request={}) ).pages: pages.append(page_) @@ -2849,11 +2841,7 @@ async def test_list_notification_channels_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_notification_channels(request={}) - ).pages: + async for page_ in (await client.list_notification_channels(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_query_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_query_service.py index ff989c933c9d..4e7419b4d9cf 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_query_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_query_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -1724,11 +1718,7 @@ async def test_query_time_series_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.query_time_series(request={}) - ).pages: + async for page_ in (await client.query_time_series(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_service_monitoring_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_service_monitoring_service.py index a6c53c5380fa..e791ff8f64fc 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_service_monitoring_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_service_monitoring_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2520,11 +2514,7 @@ async def test_list_services_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_services(request={}) - ).pages: + async for page_ in (await client.list_services(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -4417,9 +4407,7 @@ async def test_list_service_level_objectives_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch + async for page_ in ( await client.list_service_level_objectives(request={}) ).pages: pages.append(page_) diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_snooze_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_snooze_service.py index 05a0fb0f7099..f7be2482fadb 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_snooze_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_snooze_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -2141,11 +2135,7 @@ async def test_list_snoozes_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_snoozes(request={}) - ).pages: + async for page_ in (await client.list_snoozes(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token diff --git a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_uptime_check_service.py b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_uptime_check_service.py index 4f4f7abd6bbc..10a4e27408ab 100644 --- a/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_uptime_check_service.py +++ b/packages/google-cloud-monitoring/tests/unit/gapic/monitoring_v3/test_uptime_check_service.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2025 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,18 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os - -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - import json import math +import os from collections.abc import Mapping, Sequence +from unittest import mock +from unittest.mock import AsyncMock import grpc import pytest @@ -1873,11 +1867,7 @@ async def test_list_uptime_check_configs_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_uptime_check_configs(request={}) - ).pages: + async for page_ in (await client.list_uptime_check_configs(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -3690,11 +3680,7 @@ async def test_list_uptime_check_ips_async_pages(): RuntimeError, ) pages = [] - # Workaround issue in python 3.9 related to code coverage by adding `# pragma: no branch` - # See https://github.com/googleapis/gapic-generator-python/pull/1174#issuecomment-1025132372 - async for page_ in ( # pragma: no branch - await client.list_uptime_check_ips(request={}) - ).pages: + async for page_ in (await client.list_uptime_check_ips(request={})).pages: pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token From e51e23e53d878b06c7a13d92ae1655753036f2be Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Mon, 18 May 2026 07:50:02 -0400 Subject: [PATCH 2/3] feat: add pandas extra to prerelease and core source sessions for monitoring Add pandas and numpy to constraints-3.10.txt and install pandas extra in prerelease_deps and core_deps_from_source nox sessions. --- .../integrate-isolated-handwritten-code.yaml | 18 ++++++++++++++++++ packages/google-cloud-monitoring/noxfile.py | 4 ++-- .../testing/constraints-3.10.txt | 2 ++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml b/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml index 2c80fa759c8d..c8eac6172ed1 100644 --- a/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml +++ b/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml @@ -414,3 +414,21 @@ replacements: before: '\n "--check-untyped-defs",' after: '\n # TODO(https://github.com/googleapis/google-cloud-python/issues/16083)\n # "--check-untyped-defs",' count: 1 + - paths: [ + "packages/google-cloud-monitoring/noxfile.py", + ] + before: '\n # Install all dependencies\n session.install\("-e", "\."\)' + after: '\n # Install all dependencies\n session.install("-e", ".[pandas]")' + count: 2 + - paths: [ + "packages/google-cloud-monitoring/testing/constraints-3.10.txt", + ] + before: | + google-api-core==2.17.1 + google-auth==2.14.1 + after: | + google-api-core==2.17.1 + pandas==1.1.3 + numpy==1.21.0 + google-auth==2.14.1 + count: 1 diff --git a/packages/google-cloud-monitoring/noxfile.py b/packages/google-cloud-monitoring/noxfile.py index 871d0cfb7349..3b9abd201b10 100644 --- a/packages/google-cloud-monitoring/noxfile.py +++ b/packages/google-cloud-monitoring/noxfile.py @@ -463,7 +463,7 @@ def prerelease_deps(session, protobuf_implementation): """ # Install all dependencies - session.install("-e", ".") + session.install("-e", ".[pandas]") # Install dependencies for the unit test environment unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES @@ -556,7 +556,7 @@ def core_deps_from_source(session, protobuf_implementation): """ # Install all dependencies - session.install("-e", ".") + session.install("-e", ".[pandas]") # Install dependencies for the unit test environment unit_deps_all = UNIT_TEST_STANDARD_DEPENDENCIES + UNIT_TEST_EXTERNAL_DEPENDENCIES diff --git a/packages/google-cloud-monitoring/testing/constraints-3.10.txt b/packages/google-cloud-monitoring/testing/constraints-3.10.txt index bac7ba85b4ee..53d7a6673086 100644 --- a/packages/google-cloud-monitoring/testing/constraints-3.10.txt +++ b/packages/google-cloud-monitoring/testing/constraints-3.10.txt @@ -5,6 +5,8 @@ # For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", # then this file should have google-cloud-foo==1.14.0 google-api-core==2.17.1 +pandas==1.1.3 +numpy==1.21.0 google-auth==2.14.1 grpcio==1.44.0 proto-plus==1.22.3 From 17dcd9571636204089cd835547f02013f5c45613 Mon Sep 17 00:00:00 2001 From: chalmer lowe Date: Mon, 18 May 2026 08:00:21 -0400 Subject: [PATCH 3/3] feat: raise pandas lower bound to 1.3.4 for monitoring Update pandas dependency lower bound to 1.3.4 and constraints to use pandas 1.3.4 and numpy 1.21.3 to avoid pip build errors on Python 3.10 in CI/CD. --- .../integrate-isolated-handwritten-code.yaml | 6 +++--- packages/google-cloud-monitoring/setup.py | 2 +- .../google-cloud-monitoring/testing/constraints-3.10.txt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml b/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml index c8eac6172ed1..72ceaf1a6ce8 100644 --- a/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml +++ b/.librarian/generator-input/client-post-processing/integrate-isolated-handwritten-code.yaml @@ -161,7 +161,7 @@ replacements: ] before: extras = \{\} after: | - extras = {"pandas": "pandas >= 1.1.3"} + extras = {"pandas": "pandas >= 1.3.4"} count: 1 - paths: [ packages/google-cloud-monitoring/noxfile.py, @@ -428,7 +428,7 @@ replacements: google-auth==2.14.1 after: | google-api-core==2.17.1 - pandas==1.1.3 - numpy==1.21.0 + pandas==1.3.4 + numpy==1.21.3 google-auth==2.14.1 count: 1 diff --git a/packages/google-cloud-monitoring/setup.py b/packages/google-cloud-monitoring/setup.py index afa617e08029..2036451eb43a 100644 --- a/packages/google-cloud-monitoring/setup.py +++ b/packages/google-cloud-monitoring/setup.py @@ -49,7 +49,7 @@ "proto-plus >= 1.25.0, <2.0.0; python_version >= '3.13'", "protobuf >= 4.25.8, < 8.0.0", ] -extras = {"pandas": "pandas >= 1.1.3"} +extras = {"pandas": "pandas >= 1.3.4"} url = "https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-monitoring" diff --git a/packages/google-cloud-monitoring/testing/constraints-3.10.txt b/packages/google-cloud-monitoring/testing/constraints-3.10.txt index 53d7a6673086..99b40dadf3bd 100644 --- a/packages/google-cloud-monitoring/testing/constraints-3.10.txt +++ b/packages/google-cloud-monitoring/testing/constraints-3.10.txt @@ -5,8 +5,8 @@ # For example, if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0", # then this file should have google-cloud-foo==1.14.0 google-api-core==2.17.1 -pandas==1.1.3 -numpy==1.21.0 +pandas==1.3.4 +numpy==1.21.3 google-auth==2.14.1 grpcio==1.44.0 proto-plus==1.22.3