Skip to content

Field names that are reserved python keywords result in invalid generated syntax

Hi, I'm trying to parse this proto file: https://gitlab.com/veilid/veilid/-/blob/2d2983e16ee874694832599aaeca5be01f6eb2d4/veilid-core/proto/veilid.capnp (which, afaik, is valid)

Running it through capnp-stub-generator results in a black.parsing.InvalidInput: Cannot parse: 472:9: class: DialInfoDetail.DialInfoClass exception.

Full backtrace:

$ capnp-stub-generator -p proto/veilid.capnp 
INFO:root:Working from root directory: /home/david/programming/veilid/client0
Traceback (most recent call last):
  File "/home/david/.local/bin/capnp-stub-generator", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/david/.local/lib/python3.11/site-packages/capnp_stub_generator/cli.py", line 92, in main
    run(args, root_directory)
  File "/home/david/.local/lib/python3.11/site-packages/capnp_stub_generator/run.py", line 107, in run
    generate_stubs(module, module_registry, os.path.join(output_directory, output_file_name))
  File "/home/david/.local/lib/python3.11/site-packages/capnp_stub_generator/run.py", line 54, in generate_stubs
    formatted_output = format_outputs(outputs, is_pyi)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/.local/lib/python3.11/site-packages/capnp_stub_generator/run.py", line 39, in format_outputs
    return black.format_str(sorted_imports, mode=black.Mode(is_pyi=is_pyi, line_length=line_length))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/.local/lib/python3.11/site-packages/black/__init__.py", line 1073, in format_str
    dst_contents = _format_str_once(src_contents, mode=mode)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/.local/lib/python3.11/site-packages/black/__init__.py", line 1083, in _format_str_once
    src_node = lib2to3_parse(src_contents.lstrip(), mode.target_versions)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/david/.local/lib/python3.11/site-packages/black/parsing.py", line 127, in lib2to3_parse
    raise exc from None
black.parsing.InvalidInput: Cannot parse: 472:9:     class: DialInfoDetail.DialInfoClass

It looks like the generated python source's syntax is invalid, I will have a poke around and see if I can identify the cause. Is there any easy way to view the generated source before it gets passed into Black?