web-dev-qa-db-fra.com

Comment obtenir le nom de la valeur d'énumération de protobuf de niveau supérieur par numéro en python?

Par exemple, j'ai un fichier proto File.proto:

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

Je génère un fichier File_pb2.py avec protocole de File.proto. Je veux dans un code python obtenir la chaîne "ONE" (qui correspond au nom de File_pb2.ONE) par la valeur 1 (qui correspond à la valeur de File_pb2.ONE) à partir du fichier généré File_pb2.py sans définir mes propres dictionnaires. Comment puis je faire ça?

39
abyss.7

En supposant que le python se trouve dans le code File_pb2.py), essayez ceci:

file_pb2._TEST.values_by_number[1].name

Dans votre cas, cela devrait donner 'ONE'

L'inverse est:

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

va donner 1.

EDIT: Comme indiqué correctement par @dyoo dans les commentaires, une nouvelle méthode a ensuite été introduite dans la bibliothèque protobuf:

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

EDIT: Cela a encore changé dans proto3. Désormais, les méthodes Name () et Value () appartiennent à la classe EnumTypeWrapper afin qu'elles soient accessibles comme:

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