From 26a19fe3ce0fb547bc257569f3eb60dbed3360d3 Mon Sep 17 00:00:00 2001 From: ohmayr Date: Mon, 20 Jul 2026 08:20:10 +0000 Subject: [PATCH 1/6] chore(api-core): restore fail_under=100 in .coveragerc --- packages/google-api-core/.coveragerc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/google-api-core/.coveragerc b/packages/google-api-core/.coveragerc index c7791265984c..5bce491723c8 100644 --- a/packages/google-api-core/.coveragerc +++ b/packages/google-api-core/.coveragerc @@ -2,8 +2,11 @@ branch = True [report] -fail_under = 99 +fail_under = 100 show_missing = True +omit = + tests/* + */tests/* exclude_lines = # Re-enable the standard pragma pragma: NO COVER From 3c7735e7c6e27ce84e9642aa0b741dede89fde5f Mon Sep 17 00:00:00 2001 From: ohmayr Date: Mon, 20 Jul 2026 08:52:30 +0000 Subject: [PATCH 2/6] test(api-core): add coverage unit tests for operations_v1 fallback and protobuf version branches --- .../operations_v1/test_operations_client.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py index 555dfd0ab1e0..2b2d59045613 100644 --- a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py +++ b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py @@ -100,3 +100,38 @@ def test_cancel_operation(): def test_operations_client_config(): assert operations_client_config.config["interfaces"] + + +def test_operations_v1_transport_base_to_dict_protobuf_versions(monkeypatch): + from google.longrunning import operations_pb2 + + from google.api_core.operations_v1.transports import base + + message = operations_pb2.Operation(name="test_op") + + monkeypatch.setattr(base, "PROTOBUF_VERSION", "3.20.0") + res3 = base.OperationsTransport._to_dict(message) + assert res3.get("name") == "test_op" + + monkeypatch.setattr(base, "PROTOBUF_VERSION", "5.26.0") + res5 = base.OperationsTransport._to_dict(message) + assert res5.get("name") == "test_op" + + +def test_operations_v1_init_import_error_fallback(monkeypatch): + import importlib + + import google.api_core.operations_v1 as op_v1 + + orig_import = __import__ + + def mock_import(name, globals=None, locals=None, fromlist=(), level=0): + if "operations_rest_client_async" in name or ( + fromlist and "AsyncOperationsRestClient" in fromlist + ): + raise ImportError("Simulated async rest import error") + return orig_import(name, globals, locals, fromlist, level) + + monkeypatch.setattr("builtins.__import__", mock_import) + monkeypatch.setattr(op_v1, "_has_async_rest", True) + importlib.reload(op_v1) From 5c7e6e24a3683a910da1b0743e822019ad0b2b6d Mon Sep 17 00:00:00 2001 From: ohmayr Date: Mon, 20 Jul 2026 09:02:01 +0000 Subject: [PATCH 3/6] fix(api-core): call _convert_protobuf_message_to_dict on OperationsTransport instance and add --fail-under=100 to cover session in noxfile --- packages/google-api-core/noxfile.py | 2 +- .../tests/unit/operations_v1/test_operations_client.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/google-api-core/noxfile.py b/packages/google-api-core/noxfile.py index 4ab3143b1894..1b384655194b 100644 --- a/packages/google-api-core/noxfile.py +++ b/packages/google-api-core/noxfile.py @@ -389,7 +389,7 @@ def cover(session): test runs (not system test runs), and then erases coverage data. """ session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing") + session.run("coverage", "report", "--show-missing", "--fail-under=100") session.run("coverage", "erase") diff --git a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py index 2b2d59045613..6d891294ceea 100644 --- a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py +++ b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py @@ -108,13 +108,14 @@ def test_operations_v1_transport_base_to_dict_protobuf_versions(monkeypatch): from google.api_core.operations_v1.transports import base message = operations_pb2.Operation(name="test_op") + transport = base.OperationsTransport() monkeypatch.setattr(base, "PROTOBUF_VERSION", "3.20.0") - res3 = base.OperationsTransport._to_dict(message) + res3 = transport._convert_protobuf_message_to_dict(message) assert res3.get("name") == "test_op" monkeypatch.setattr(base, "PROTOBUF_VERSION", "5.26.0") - res5 = base.OperationsTransport._to_dict(message) + res5 = transport._convert_protobuf_message_to_dict(message) assert res5.get("name") == "test_op" From b3218b70f84ddf20bd594e64efc1581d9284a92f Mon Sep 17 00:00:00 2001 From: ohmayr Date: Mon, 20 Jul 2026 09:08:48 +0000 Subject: [PATCH 4/6] fix(api-core): pass AnonymousCredentials to OperationsTransport in test_operations_client.py --- .../google-api-core/google/api_core/gapic_v1/requests.py | 2 +- packages/google-api-core/tests/unit/gapic/test_requests.py | 1 - .../tests/unit/operations_v1/test_operations_client.py | 5 ++++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/google-api-core/google/api_core/gapic_v1/requests.py b/packages/google-api-core/google/api_core/gapic_v1/requests.py index f440ac69126c..8ce97c9cffa7 100644 --- a/packages/google-api-core/google/api_core/gapic_v1/requests.py +++ b/packages/google-api-core/google/api_core/gapic_v1/requests.py @@ -21,8 +21,8 @@ if they are not already set. """ -from typing import Union import uuid +from typing import Union import google.protobuf.message diff --git a/packages/google-api-core/tests/unit/gapic/test_requests.py b/packages/google-api-core/tests/unit/gapic/test_requests.py index 1e921955d043..e046f31b828b 100644 --- a/packages/google-api-core/tests/unit/gapic/test_requests.py +++ b/packages/google-api-core/tests/unit/gapic/test_requests.py @@ -19,7 +19,6 @@ from google.api_core.gapic_v1.requests import setup_request_id - # --- Mock Request Helper Classes --- diff --git a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py index 6d891294ceea..30872b2f4b39 100644 --- a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py +++ b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py @@ -103,12 +103,15 @@ def test_operations_client_config(): def test_operations_v1_transport_base_to_dict_protobuf_versions(monkeypatch): + from google.auth import credentials as ga_credentials from google.longrunning import operations_pb2 from google.api_core.operations_v1.transports import base message = operations_pb2.Operation(name="test_op") - transport = base.OperationsTransport() + transport = base.OperationsTransport( + credentials=ga_credentials.AnonymousCredentials() + ) monkeypatch.setattr(base, "PROTOBUF_VERSION", "3.20.0") res3 = transport._convert_protobuf_message_to_dict(message) From 79411bb2bedc2164d628f7a9eb33c514dd70ffca Mon Sep 17 00:00:00 2001 From: ohmayr Date: Mon, 20 Jul 2026 09:13:49 +0000 Subject: [PATCH 5/6] fix(api-core): mock json_format.MessageToDict in test_operations_client.py for protobuf version branches --- .../tests/unit/operations_v1/test_operations_client.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py index 30872b2f4b39..f75c87bfdf89 100644 --- a/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py +++ b/packages/google-api-core/tests/unit/operations_v1/test_operations_client.py @@ -113,13 +113,23 @@ def test_operations_v1_transport_base_to_dict_protobuf_versions(monkeypatch): credentials=ga_credentials.AnonymousCredentials() ) + calls = [] + + def mock_message_to_dict(*args, **kwargs): + calls.append(kwargs) + return {"name": "test_op"} + + monkeypatch.setattr(base.json_format, "MessageToDict", mock_message_to_dict) + monkeypatch.setattr(base, "PROTOBUF_VERSION", "3.20.0") res3 = transport._convert_protobuf_message_to_dict(message) assert res3.get("name") == "test_op" + assert "including_default_value_fields" in calls[-1] monkeypatch.setattr(base, "PROTOBUF_VERSION", "5.26.0") res5 = transport._convert_protobuf_message_to_dict(message) assert res5.get("name") == "test_op" + assert "always_print_fields_with_no_presence" in calls[-1] def test_operations_v1_init_import_error_fallback(monkeypatch): From 10e6c69514e62ddbb211813baf300626126f0351 Mon Sep 17 00:00:00 2001 From: ohmayr Date: Mon, 20 Jul 2026 09:28:06 +0000 Subject: [PATCH 6/6] chore(api-core): remove redundant --fail-under=100 from cover session in noxfile --- packages/google-api-core/noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google-api-core/noxfile.py b/packages/google-api-core/noxfile.py index 1b384655194b..4ab3143b1894 100644 --- a/packages/google-api-core/noxfile.py +++ b/packages/google-api-core/noxfile.py @@ -389,7 +389,7 @@ def cover(session): test runs (not system test runs), and then erases coverage data. """ session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") + session.run("coverage", "report", "--show-missing") session.run("coverage", "erase")