- add google.protobuf.proto module - wrap generated SerializeToString and ParseFromString to the new module: def serialize(message: Message, deterministic: bool=None) -> bytes: """Return the serialized proto.""" def parse(message_class: typing.Type[Message], payload: bytes) -> Message: """Given a serialized proto, deserialize it into a Message.""" PiperOrigin-RevId: 632223409pull/16792/head
parent
82e83ddc95
commit
495ba7bcdb
2 changed files with 73 additions and 0 deletions
@ -0,0 +1,34 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# Protocol Buffers - Google's data interchange format |
||||||
|
# Copyright 2008 Google Inc. All rights reserved. |
||||||
|
# |
||||||
|
# Use of this source code is governed by a BSD-style |
||||||
|
# license that can be found in the LICENSE file or at |
||||||
|
# https://developers.google.com/open-source/licenses/bsd |
||||||
|
|
||||||
|
"""Tests Nextgen Pythonic protobuf APIs.""" |
||||||
|
|
||||||
|
import unittest |
||||||
|
|
||||||
|
from google.protobuf import proto |
||||||
|
|
||||||
|
from google.protobuf.internal import test_util |
||||||
|
from google.protobuf.internal import testing_refleaks |
||||||
|
from google.protobuf.internal import _parameterized |
||||||
|
from google.protobuf import unittest_pb2 |
||||||
|
from google.protobuf import unittest_proto3_arena_pb2 |
||||||
|
|
||||||
|
@_parameterized.named_parameters(('_proto2', unittest_pb2), |
||||||
|
('_proto3', unittest_proto3_arena_pb2)) |
||||||
|
@testing_refleaks.TestCase |
||||||
|
class ProtoTest(unittest.TestCase): |
||||||
|
|
||||||
|
def testSerializeParse(self, message_module): |
||||||
|
msg = message_module.TestAllTypes() |
||||||
|
test_util.SetAllFields(msg) |
||||||
|
serialized_data = proto.serialize(msg) |
||||||
|
parsed_msg = proto.parse(message_module.TestAllTypes, serialized_data) |
||||||
|
self.assertEqual(msg, parsed_msg) |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
unittest.main() |
@ -0,0 +1,39 @@ |
|||||||
|
# Protocol Buffers - Google's data interchange format |
||||||
|
# Copyright 2008 Google Inc. All rights reserved. |
||||||
|
# |
||||||
|
# Use of this source code is governed by a BSD-style |
||||||
|
# license that can be found in the LICENSE file or at |
||||||
|
# https://developers.google.com/open-source/licenses/bsd |
||||||
|
|
||||||
|
"""Contains the Nextgen Pythonic protobuf APIs.""" |
||||||
|
|
||||||
|
import typing |
||||||
|
|
||||||
|
from google.protobuf.message import Message |
||||||
|
|
||||||
|
def serialize(message: Message, deterministic: bool=None) -> bytes: |
||||||
|
"""Return the serialized proto. |
||||||
|
|
||||||
|
Args: |
||||||
|
message: The proto message to be serialized. |
||||||
|
deterministic: If true, requests deterministic serialization |
||||||
|
of the protobuf, with predictable ordering of map keys. |
||||||
|
|
||||||
|
Returns: |
||||||
|
A binary bytes representation of the message. |
||||||
|
""" |
||||||
|
return message.SerializeToString(deterministic=deterministic) |
||||||
|
|
||||||
|
def parse(message_class: typing.Type[Message], payload: bytes) -> Message: |
||||||
|
"""Given a serialized data in binary form, deserialize it into a Message. |
||||||
|
|
||||||
|
Args: |
||||||
|
message_class: The message meta class. |
||||||
|
payload: A serialized bytes in binary form. |
||||||
|
|
||||||
|
Returns: |
||||||
|
A new message deserialized from payload. |
||||||
|
""" |
||||||
|
new_message = message_class() |
||||||
|
new_message.ParseFromString(payload) |
||||||
|
return new_message |
Loading…
Reference in new issue