我正在尝试将大量结构化数据从Java传输到Python。这包括许多以某种形式相互关联的对象。当我在我的Python代码中接收到它们时,使用protobuf提供的类型是非常糟糕的。我的VIM IDE在尝试对类型使用自动完成时崩溃了,PyCharm没有完成任何事情,通常情况下,它们没有为不同类型提供一些干净的class
定义,这似乎是荒谬的。
在python中处理protobuf消息时,是否有一种获得IDE支持的方法?我正在查看处理复杂消息的20+方法,如果没有IDE支持,我也可以使用记事本编写代码。
我知道protobuf正在使用元类(虽然我不知道他们为什么这么做)。也许有一种方法可以从这些数据生成python类文件,或者可能有类似于打字记录文件的东西。
我是不是误用了原型机?我相信我会用一种可以跨语言使用的方式来描述我的领域模型。在Java中,我对生成的类很满意,我可以很容易地使用它们。我是否应该用像swagger.io这样的东西来代替呢?
发布于 2019-10-31 04:38:22
如果您使用的是最近的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输入,如果您碰巧跳到消息或字段上的定义,则很容易阅读。这对我个人来说是一个巨大的进步,与官方的谷歌编译器插件相比,它也支持async
gRPC。
发布于 2018-04-10 17:54:46
到目前为止,没有任何这样的东西可用。您可能需要跟踪这个问题:https://github.com/google/protobuf/issues/2638是最新的。
https://stackoverflow.com/questions/49755565
复制相似问题