danielgtaylor / danielgtaylor/python-betterproto

ProtoContentBase.proto_file is always the first file of a package

Offen
#209 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
1.8k
Forks
234
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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`:
```python
@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`
```python
@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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Trace how generate_code passes context into read_protobuf_type and read_protobuf_service, then inspect ProtoContentBase.proto_file and OutputTempate. Confirm how a multi-file package selects the source descriptor for each message and field. Done means generated comments come from the file defining each item rather than always from the first input file.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.