[英]How to generate python class files from protobuf
我正在嘗試將大量結構化數據從 Java 傳輸到 Python。 這包括許多以某種形式相互關聯的對象。 當我在 Python 代碼中收到它們時,使用 protobuf 提供的類型非常難看。 當我嘗試對類型使用自動完成功能時,我的 VIM IDE 崩潰了,PyCharm 沒有完成任何事情,而且通常他們沒有為不同類型提供一些干凈的class
定義似乎很荒謬。
在 python 中使用 protobuf 消息時,有沒有辦法獲得 IDE 支持? 我正在研究 20 多種處理復雜消息的方法,如果沒有 IDE 支持,我不妨用記事本編寫代碼。
我知道 protobuf 正在使用元類(雖然我不知道他們為什么這樣做)。 也許有一種方法可以從該數據生成 python 類文件,或者可能有類似於typescript 類型文件的東西。
我可能誤用了protobuf嗎? 我相信我會以一種可以跨語言使用的方式來描述我的領域模型。 在 Java 中,我對生成的類感到滿意,並且可以輕松使用它們。 我應該改用 swagger.io 之類的東西嗎?
如果您使用的是最近的 Python (3.7+),那么https://github.com/danielgtaylor/python-betterproto (免責聲明:我是作者)將生成非常干凈的 Python 數據類作為輸出,這將為您提供正確的輸入和 IDE完成支持。
例如,這個輸入:
syntax = "proto3";
package hello;
// Greeting represents a message you can tell a user.
message Greeting {
string message = 1;
}
將生成以下輸出:
# Generated by the protocol buffer compiler. DO NOT EDIT!
# sources: hello.proto
# plugin: python-betterproto
from dataclasses import dataclass
import betterproto
@dataclass
class Hello(betterproto.Message):
"""Greeting represents a message you can tell a user."""
message: str = betterproto.string_field(1)
通常,此插件的輸出模仿 *.proto 輸入,如果您碰巧跳轉到消息或字段的定義,則非常容易閱讀。 對我個人而言,與官方的 Google 編譯器插件相比,這是一個巨大的改進,並且還支持開箱即用的async
gRPC。
到目前為止,沒有類似的東西可用。 您可能希望關注此問題: https : //github.com/google/protobuf/issues/2638以保持最新狀態。
mypy-protobuf生成類型提示文件。 但正如這里所討論的,這僅適用於 protobuf 3.0 和 python 2.7 以上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.