python-betterproto icon indicating copy to clipboard operation
python-betterproto copied to clipboard

ProtoContentBase.proto_file is always the first file of a package

Open badge opened this issue 4 years ago • 0 comments

I have a large protobuf package whose messages, etc. are defined over multiple files. However, ProtoContentBase.proto_file always refers to the first file of the package passed to protoc. As a result, when I run protoc the comments attached to each class and field are from the first file.

I hacked a solution to this by adding proto_input_file to ProtoContentBase and passing this as an argument all the way from generate_code through read_protobuf_type/read_protobuf_service, then adding:

  • To OutputTempate:
    @property
    def input_files_dict(self) -> Dict[str, FileDescriptorProto]:
        """Dictionary mapping filenames to their FileDescriptorProto objects

        Returns
        -------
        Dict[str, FileDescriptorProto]
            Dictionary mapping filenames to their FileDescriptorProto objects
        """
        return {f.name: f for f in self.input_files}
  • to ProtoContentBase
    @property
    def proto_file(self) -> FieldDescriptorProto:
        template = self.output_file
        return template.input_files_dict[self.proto_input_file]

I'd be delighted to contribute a proper fix and open a PR for it, but it'd be good to hear if there's a better approach to solving the problem.

badge avatar Feb 12 '21 15:02 badge