It seems to me, it doesn't work at all.
I got this:
>(Pdb) import ooo
>(Pdb) vals_by_nums = req.DESCRIPTOR.fields_by_name['error'].enum_type.values_by_number[req.error]
>(Pdb) options = vals_by_nums.GetOptions()
>(Pdb) options.Extensions[ooo.verbose_enum_value_option]
*** KeyError: 'Extension "verbose_enum_value_option" extends message
type "google.protobuf.EnumValueOptions", but this message is of type
"google.protobuf.EnumValueOptions".'
I've checked the source code, and it looks like raised from here
(google.protobuf.reflection, line 224):
if extension_handle.containing_type is not message.DESCRIPTOR:
raise KeyError('Extension "%s" extends message type "%s", but this
'
'message is of type "%s".' %
(extension_handle.full_name,
extension_handle.containing_type.full_name,
message.DESCRIPTOR.full_name))
Any ideas ? may be it is already solved in trunk version?
Thanks
On Nov 10, 1:50 am, Kenton Varda <
ken...@google.com> wrote:
> You need to use the descriptor for the enum type. Unfortunately this
> interface isn't very well fleshed-out in Python. I think you'd have to
> write something like:
>
> Request.DESCRIPTOR.fields_by_name['error'].enum_type.values_by_number[message.error].options.Extensions[verbose_enum_value_option]
>
> I haven't checked that that's exactly correct, but it gives you an idea. We
> should probably improve this.
>
> On Tue, Nov 9, 2010 at 4:12 AM, Vsevolod Zadubrovsky
> <
zadubrov...@gmail.com>wrote:
>
> > Hi, I'm stuck with getting the enum value option in Python. The proto
> > file is:
>
> > import "descriptor.proto";
>
> > extend google.protobuf.EnumValueOptions {
> > optional string verbose_enum_value_option = 50005;
> > }
>
> > enum ErrorType {
> > OK = 1 [(verbose_enum_value_option) = "OK"];
> > SOME_ERROR = 2 [(verbose_enum_value_option) = "Some Error verbose
> > message"];
> > }
>
> > message Request {
> > required bool success = 1;
> > optional ErrorType error = 2;
> > }
>
> > When I receive the Request message, I can access the 'error' field,
> > and its type is int, that's actually ok. But how can I get the
> > verbose_enum_value_option of 'error' field value ?
>
> > Thanks
>
> > p.s. The goal is to keep error types and their verbose error messages
> > in one place, available for every service in our project, so the error
> > messages would've been identical.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Protocol Buffers" group.
> > To post to this group, send email to
prot...@googlegroups.com.
> > To unsubscribe from this group, send email to
> >
protobuf+u...@googlegroups.com<
protobuf%2Bunsu...@googlegroups.com>
> > .