From 38eb7a3657e07cac78bf2d768ae8b5f17ae3bb1b Mon Sep 17 00:00:00 2001 From: Heba Alazzeh Date: Mon, 20 Jul 2026 23:00:51 +0000 Subject: [PATCH] fix(api-core): prevent overwriting explicit empty strings for optional request_id --- packages/google-api-core/google/api_core/gapic_v1/requests.py | 2 +- packages/google-api-core/tests/unit/gapic/test_requests.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 8ce97c9cffa7..76f5e916716d 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 @@ -65,7 +65,7 @@ def setup_request_id( setattr(request, field_name, str(uuid.uuid4())) except (AttributeError, ValueError): # Proto-plus messages or other objects - if not getattr(request, field_name, None): + if getattr(request, field_name, None) is None: setattr(request, field_name, str(uuid.uuid4())) else: if not getattr(request, field_name, None): 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 e046f31b828b..1dc4b02dd31a 100644 --- a/packages/google-api-core/tests/unit/gapic/test_requests.py +++ b/packages/google-api-core/tests/unit/gapic/test_requests.py @@ -59,6 +59,7 @@ def __contains__(self, key): # MockRequest cases (MockRequest(), True, "uuid"), (MockRequest(request_id="already_set"), True, "already_set"), + (MockRequest(request_id=""), True, ""), (MockRequest(request_id=""), False, "uuid"), (MockRequest(request_id="already_set"), False, "already_set"), # MockProtoRequest cases @@ -70,6 +71,7 @@ def __contains__(self, key): ({}, True, "uuid"), ({"request_id": None}, True, "uuid"), ({"request_id": "already_set"}, True, "already_set"), + ({"request_id": ""}, True, ""), ({"request_id": ""}, False, "uuid"), ({"request_id": None}, False, "uuid"), ({"request_id": "already_set"}, False, "already_set"), @@ -79,6 +81,7 @@ def __contains__(self, key): ids=[ "proto3_optional_not_in_request", "proto3_optional_already_in_request", + "proto3_optional_explicit_empty", "non_proto3_optional_empty", "non_proto3_optional_already_set", "proto3_optional_not_in_request_proto", @@ -87,6 +90,7 @@ def __contains__(self, key): "dict_proto3_optional_not_in_request", "dict_proto3_optional_value_none", "dict_proto3_optional_already_in_request", + "dict_proto3_optional_explicit_empty", "dict_non_proto3_optional_empty", "dict_non_proto3_optional_value_none", "dict_non_proto3_optional_already_set",