在protobuf中查找枚举类型

时间:2014-11-10 17:59:28

标签: enums protocol-buffers ironpython

晚上好,

在IronPython中编写一个应用程序,它将作为一个消息欺骗者,用于尚未开发得足以测试我们系统的系统。应用程序的一部分是一组显示消息和命令值的表。在命令的情况下,我们的命令的某些字段具有枚举值。命令表中有一个下拉框,其中包含那些枚举选项。

我的方法是为每条消息创建一个DataSet。 DataSet有一个DataTable,其中包含消息字段和消息值。它还为消息中的每个枚举类型提供了一个表。因此,下面的代码是我用来确定该字段是普通字段还是枚举字段。

 msg = mpas.M120()
 msg_fields = msg.DESCRIPTOR.fields
 for field in msg_fields:
        fieldEnumType = msg.DESCRIPTOR.fields_by_name[field.name].enum_type
        print("{} --> EnumType: {}".format(field.name, fieldEnumType.name if fieldEnumType != None else 'None'))

我也发现这对我也有用:

 msg = mpas.M120()
 msg_fields = msg.DESCRIPTOR.fields
 for k,v in msg.DESCRIPTOR.fields_by_name.items():
        print ("{} --> {}".format(k, ((v.enum_type).name if v.enum_type != None else 'None')))

我将从中获得的是每个枚举字段的枚举名称。我现在希望能够获得找到的每个枚举字段的所有值的列表。这是诀窍,某个消息使用的枚举,并且只在消息级别定义该消息(即mpas.M120()..其他消息使用的枚举在顶层定义(即mpas ..

那么,我将如何找到这些枚举的值,以便我可以填充我的下拉框?我现在一直在为这一天的大部分工作而努力,我无法理解。

提前致谢...

1 个答案:

答案 0 :(得分:0)

您已找到v.enum_type,这是与该字段的枚举类型对应的EnumDescriptor。您从这里获得name,但此对象还包含值列表。请参阅此处的文档:

https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.descriptor.EnumDescriptor-class