【问题标题】:How to convert a Python proto-plus Message class into protobuf proto file?如何将 Python proto-plus Message 类转换为 protobuf proto 文件?
【发布时间】:2021-12-30 10:45:35
【问题描述】:

我看到很多 Google Python SDK 代码使用 proto-plus library 将 protobuf 消息模式编写为 Python 类。我想知道是否有办法将此类转换为 proto 文件。

即。

import proto

class Composer(proto.Message):
    given_name = proto.Field(proto.STRING, number=1)
    family_name = proto.Field(proto.STRING, number=2)

class Song(proto.Message):
    composer = proto.Field(Composer, number=1)
    title = proto.Field(proto.STRING, number=2)
    lyrics = proto.Field(proto.STRING, number=3)
    year = proto.Field(proto.INT32, number=4)

并生成一个 proto 文件

【问题讨论】:

    标签: python protocol-buffers proto google-cloud-sdk


    【解决方案1】:

    Proto Plus 不包含此功能。

    应该可以这样做,因为 Proto Plus、Protobuf 生成的源和 proto 文件之间存在 1:1 映射。

    但是,我怀疑这是一种反模式。这与破解二进制文件并想要重新生成源没有什么不同。

    protobuf 生成代码的真实来源它的 proto 文件。

    Google 提供 Proto Plus 以使 protoc 生成的 Python 源代码更符合习惯。

    据推测,Google 的构建管道现在包括一个直接来自 proto 文件的 Proto Plus 源的生成器(这可能是 SDK 的一部分,或者是 protoc 的一些附属物)。

    虽然 Proto Plus 文档描述了 declaring messages,但我认为这本身就是一种反模式,不应鼓励,因为它会导致 protobuf 代码没有明确的(跨语言)来源(-of-truth)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多