appnexus / pyrobuf

A Cython alternative to Google's Python Protobuf library
Other
554 stars 76 forks source link

Unable to parse oneof fields: Disabled token 'ONEOF' #152

Open maciejlach opened 4 years ago

maciejlach commented 4 years ago

When I try to compile following proto file:

syntax = "proto3";

message SampleMessage {
  oneof test_oneof {
     string name = 4;
     int64 value = 7;
  }
}

pyrobuf fails with following stack trace:

Traceback (most recent call last):
  File "C:\dev\.venv\Scripts\pyrobuf-script.py", line 11, in <module>
    load_entry_point('pyrobuf==0.9.3', 'console_scripts', 'pyrobuf')()
  File "c:\dev\.venv\lib\site-packages\pyrobuf\__main__.py", line 6, in main
    compiler.compile()
  File "c:\dev\.venv\lib\site-packages\pyrobuf\compile.py", line 88, in compile
    self._compile_spec()
  File "c:\dev\.venv\lib\site-packages\pyrobuf\compile.py", line 119, in _compile_spec
    self._generate(spec)
  File "c:\dev\.venv\lib\site-packages\pyrobuf\compile.py", line 133, in _generate
    msg_def = self.parser.parse_from_filename(filename, self.includes)
  File "c:\dev\.venv\lib\site-packages\pyrobuf\parse_proto.py", line 264, in parse_from_filename
    raise e
  File "c:\dev\.venv\lib\site-packages\pyrobuf\parse_proto.py", line 261, in parse_from_filename
    return cls(s).parse(fname=fname, includes=includes, disabled_tokens=disabled_tokens)
  File "c:\dev\.venv\lib\site-packages\pyrobuf\parse_proto.py", line 225, in parse
    imported['enums']
  File "c:\dev\.venv\lib\site-packages\pyrobuf\parse_proto.py", line 326, in _parse_message
    for token in tokens:
  File "c:\dev\.venv\lib\site-packages\pyrobuf\parse_proto.py", line 157, in tokenize
    token_type, line + 1, self.lines[line])
AssertionError: Disabled token 'ONEOF' found on line 4:   oneof test_oneof {

It looks like oneofs should supported as of 0.9.2 (#147).

ahobsonsayers commented 4 years ago

Make sure you are using the --proto3 flag. It should then work

maciejlach commented 4 years ago

@ahobsonsayers Thank you, this works from the CLI.

Is it possible to include this as a parameter in setup.py?

vmicode commented 2 years ago

Make sure you are using the --proto3 flag. It should then work

@ahobsonsayers How ? Could you show me an example ? I have try --proto3=1 or --proto3=true, and return errors.

haakonvt commented 1 year ago

Just using --proto3 solved it for me