How to get top-level protobuf enum value name by number in python?

PythonProtocol Buffers

Python Problem Overview


For example, I have proto-file File.proto:

enum Test {
  ONE = 1;
  TWO = 2;
}

I generate file File_pb2.py with protoc from File.proto. I want in a python-code get string "ONE" (that corresponds to the name of File_pb2.ONE) by value 1 (that corresponds to the value of File_pb2.ONE) from generated file File_pb2.py without defining my own dictionaries. How can I do that?

Python Solutions


Solution 1 - Python

Assuming the generated python is located in File_pb2.py code Try this:

file_pb2._TEST.values_by_number[1].name

In your case, this should give 'ONE'

The reverse is :

file_pb2._TEST.values_by_name['ONE'].number

will give 1.

EDIT: As correctly pointed by @dyoo in the comments, a new method was later introduced in protobuf library:

file_pb2.Test.Name(1)
file_pb2.Test.Value('One')

EDIT: This has changed again in proto3. Now the Name() and Value() methods belong to the EnumTypeWrapper class so they can be accessed like:

file_pb2.Name(1)
file_pb2.Value('One')

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionabyss.7View Question on Stackoverflow
Solution 1 - PythonTishoView Answer on Stackoverflow