danielgtaylor / danielgtaylor/python-betterproto
Message with oneof called method .to_pydict/.from_pydict fails
- Lingua principale
- Python
- Stelle
- 1.8k
- Fork
- 234
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
### Summary
Serializing a message with oneof fails by `to_pydict` or `from_pydict`.
### Reproduction Steps
Define a message and compile:
```protobuf
message Foo {
oneof group1 {
int32 bar = 1;
int32 baz = 2;
}
}
```
then called `Foo(bar=1).to_pydict` or `Foo().from_pydict({"bar": 1})`
### Expected Results
The method called success like `to_dict` and `from_dict`
### Actual Results
There will raise AttributeError: `'group1' is set to 'xxxx', not 'baz' ` / `'group1' is set to None, not 'bar'`:
```
Traceback (most recent call last):
File "D:\Projects\adapter-kritor\exam.py", line 22, in
res = foo1.to_pydict()
File "D:\Projects\adapter-kritor\.venv\lib\site-packages\betterproto\__init__.py", line 1717, in to_pydict
value = getattr(self, field_name)
File "D:\Projects\adapter-kritor\.venv\lib\site-packages\betterproto\__init__.py", line 836, in __getattribute__
raise AttributeError(
AttributeError: 'group1' is set to 'bar', not 'baz'
```
### System Information
libprotoc 27.2
Python 3.9.13
2.0.0b7
### Checklist
- [X] I have searched the issues for duplicates.
- [X] I have shown the entire traceback, if possible.
- [X] I have verified this issue occurs on the latest prelease of betterproto which can be installed using `pip install -U --pre betterproto`, if possible.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia dalle posizioni del traceback in betterproto/__init__.py, in particolare dal percorso di to_pydict intorno alla riga 1717 e dalla gestione degli attributi oneof intorno alla riga 836. Riproduci il problema usando il messaggio Foo e il relativo oneof group1 sia con to_pydict sia con from_pydict. Il lavoro è completo quando entrambi i metodi hanno esito positivo in modo coerente con il comportamento esistente di to_dict e from_dict.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- backend-api-design
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100