danielgtaylor / danielgtaylor/python-betterproto

Return actual enum's from to_dict

Offen
#316 3 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

Perhaps I don't understand the intended use of the `to_dict` method but, at least for my use case, I would prefer it to return the actual enum instead of it's name as a string.

For example:

```
class EnumResultGeneric(betterproto.Enum):
RESULT_UNKNOWN = 0
RESULT_SUCCESS = 1

@dataclass
class ResponseGeneric(betterproto.Message):
result: "EnumResultGeneric" = betterproto.enum_field(1)

status = ResponseGeneric.FromString(bytes(bytearray([0x08, 0x01]))).to_dict()['result']
print(f"{status}: {type(status)}")
```

gives `RESULT_SUCCESS: ` instead of the actual `EnumResultGeneric`.

It is a simple change to get this desired behavior in the `to_dict` method:

```
elif meta.proto_type == TYPE_ENUM:
enum_values = list(
self._betterproto.cls_by_field[field.name]
) # type: ignore
if isinstance(v, list):
output[cased_name] = [enum_values[e] for e in v]
else:
output[cased_name] = enum_values[v]
```

Is this desirable for other people? Maybe allow this as a parameter to `to_dict`?

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Lokalisieren Sie die `to_dict`-Implementierung von message und untersuchen Sie deren Behandlung von `TYPE_ENUM`. Reproduzieren Sie anschließend das Problem anhand des Beispiels `ResponseGeneric`. Ermitteln Sie, ob enum-Instanzen immer zurückgegeben werden sollten oder ob dies hinter einem Parameter liegen sollte; als erledigt gilt die Aufgabe, wenn das gewählte Verhalten spezifiziert und für einzelne und wiederholte enum-Felder verifiziert ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api, backend
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 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.