Nextgen Proto Pythonic API: “Add-on” proto for serialize/parse
- 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
|
@ -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