Skip to content

Commit a00c261

Browse files
fix: Updated protobuf JSON formatting to support nested protobufs (#797)
* fix: Updated protobuf JSON formatting to support nested protobufs * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * Cleaner way to differentiate between proto objects and dict objects in to_api_repr * Fixed unused import. * Fixed failing unit test. --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 7ae3d59 commit a00c261

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

google/cloud/logging_v2/entries.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
import json
1919
import re
2020

21-
from google.protobuf.any_pb2 import Any
2221
from google.protobuf.json_format import MessageToDict
2322
from google.protobuf.json_format import Parse
23+
from google.protobuf.message import Message
2424

2525
from google.cloud.logging_v2.resource import Resource
2626
from google.cloud._helpers import _name_from_project_path
@@ -325,7 +325,7 @@ def _extract_payload(cls, resource):
325325

326326
@property
327327
def payload_pb(self):
328-
if isinstance(self.payload, Any):
328+
if isinstance(self.payload, Message):
329329
return self.payload
330330

331331
@property
@@ -337,10 +337,10 @@ def to_api_repr(self):
337337
"""API repr (JSON format) for entry."""
338338
info = super(ProtobufEntry, self).to_api_repr()
339339
proto_payload = None
340-
if self.payload_json:
341-
proto_payload = dict(self.payload_json)
342-
elif self.payload_pb:
343-
proto_payload = MessageToDict(self.payload_pb)
340+
if self.payload_pb:
341+
proto_payload = MessageToDict(self.payload)
342+
elif self.payload_json:
343+
proto_payload = dict(self.payload)
344344
info["protoPayload"] = proto_payload
345345
return info
346346

tests/system/test_system.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ def test_list_entry_with_auditlog(self):
192192
"methodName": "test",
193193
"resourceName": "test",
194194
"serviceName": "test",
195+
"requestMetadata": {"callerIp": "127.0.0.1"},
195196
}
196197
audit_struct = self._dict_to_struct(audit_dict)
197198

@@ -223,6 +224,12 @@ def test_list_entry_with_auditlog(self):
223224
protobuf_entry.to_api_repr()["protoPayload"]["methodName"],
224225
audit_dict["methodName"],
225226
)
227+
self.assertEqual(
228+
protobuf_entry.to_api_repr()["protoPayload"]["requestMetadata"][
229+
"callerIp"
230+
],
231+
audit_dict["requestMetadata"]["callerIp"],
232+
)
226233

227234
def test_list_entry_with_requestlog(self):
228235
"""

tests/unit/test_entries.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,45 @@ def test_to_api_repr_proto_defaults(self):
739739
}
740740
self.assertEqual(entry.to_api_repr(), expected)
741741

742+
def test_to_api_repr_proto_inner_struct_field(self):
743+
from google.protobuf.json_format import MessageToDict
744+
from google.cloud.logging_v2.logger import _GLOBAL_RESOURCE
745+
from google.protobuf.struct_pb2 import Struct
746+
from google.protobuf.struct_pb2 import Value
747+
748+
LOG_NAME = "test.log"
749+
inner_struct = Struct(fields={"foo": Value(string_value="bar")})
750+
message = Struct(fields={"inner": Value(struct_value=inner_struct)})
751+
752+
entry = self._make_one(log_name=LOG_NAME, payload=message)
753+
expected = {
754+
"logName": LOG_NAME,
755+
"protoPayload": MessageToDict(message),
756+
"resource": _GLOBAL_RESOURCE._to_dict(),
757+
}
758+
self.assertEqual(entry.to_api_repr(), expected)
759+
760+
def test_to_api_repr_proto_inner_list_field(self):
761+
from google.protobuf.json_format import MessageToDict
762+
from google.cloud.logging_v2.logger import _GLOBAL_RESOURCE
763+
from google.protobuf.struct_pb2 import ListValue
764+
from google.protobuf.struct_pb2 import Struct
765+
from google.protobuf.struct_pb2 import Value
766+
767+
LOG_NAME = "test.log"
768+
lines = ListValue(
769+
values=[Value(string_value="line1"), Value(string_value="line2")]
770+
)
771+
message = Struct(fields={"lines": Value(list_value=lines)})
772+
773+
entry = self._make_one(log_name=LOG_NAME, payload=message)
774+
expected = {
775+
"logName": LOG_NAME,
776+
"protoPayload": MessageToDict(message),
777+
"resource": _GLOBAL_RESOURCE._to_dict(),
778+
}
779+
self.assertEqual(entry.to_api_repr(), expected)
780+
742781
def test_to_api_repr_proto_explicit(self):
743782
import datetime
744783
from google.protobuf.json_format import MessageToDict

0 commit comments

Comments
 (0)