pyrobuf icon indicating copy to clipboard operation
pyrobuf copied to clipboard

Unable to parse oneof fields: Disabled token 'ONEOF'

Open maciejlach opened this issue 4 years ago • 4 comments

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).

maciejlach avatar Apr 17 '20 13:04 maciejlach

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

ahobsonsayers avatar May 06 '20 15:05 ahobsonsayers

@ahobsonsayers Thank you, this works from the CLI.

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

maciejlach avatar May 12 '20 08:05 maciejlach

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.

vmicode avatar Apr 24 '22 13:04 vmicode

Just using --proto3 solved it for me

haakonvt avatar Oct 12 '22 01:10 haakonvt