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

Message with oneof called method .to_pydict/.from_pydict fails

Open RF-Tar-Railt opened this issue 1 year ago • 0 comments

Summary

Serializing a message with oneof fails by to_pydict or from_pydict.

Reproduction Steps

Define a message and compile:

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 <module>
    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.

RF-Tar-Railt avatar Sep 06 '24 19:09 RF-Tar-Railt