kiota icon indicating copy to clipboard operation
kiota copied to clipboard

python: primitive oneOf (after deserialization work-around) does not round-trip/reserialize

Open thelazydogsback opened this issue 4 months ago • 0 comments

What are you generating using Kiota, clients or plugins?

API Client/SDK

In what context or format are you using Kiota?

Nuget tool

Client library/SDK language

Python

Describe the bug

After making the fix to read a primitive oneOf (#6868 ) the scalar value is lost (set to {}) when re-serialized.

Expected behavior

scalar value should be re-seralized

How to reproduce

  obj = <...call my kiota API with scalar oneOf value...>
  writer = JsonSerializationWriter()
  writer.write_object_value(None, obj)
  # We've lost scalar_value prop at this point (other props ok)
  bytes = writer.get_serialized_content()
  json = bytes.decode('utf-8')

So we get to this part:

 def serialize(self,writer: SerializationWriter) -> None:
        ....
        writer.write_object_value("scalarValue", self.scalar_value)

This gets executed correctly:

 def serialize(self,writer: SerializationWriter) -> None:
        ...
        elif self.double:
            writer.write_float_value(None, self.double) # <== Correct

but then we get here:

  def write_object_value(
        self, key: Optional[str], value: Optional[U], *additional_values_to_merge: Optional[U]
    ) -> None:
          ...            
        if value or additional_values_to_merge:
            temp_writer = self._create_new_writer()
          ...       
          if value:
                self._serialize_value(temp_writer, value)
          ...
          if key:
                # key = 'scalarValue', 
                # temp_writer.value = 42.0
                # However, temp_write.writer is {}, so the value we set is lost
                self.writer[key] = temp_writer.writer 
          else:
                self.value = temp_writer.writer

So when we finally exit serialize(), all the other fields have been set on the object, but the scalar value is not 42.0 but {}.

Open API description file

No response

Kiota Version

1.9.6

Latest Kiota version known to work for scenario above?(Not required)

No response

Known Workarounds

No response

Configuration

Win x64

Debug output

Click to expand log ```
</details>


### Other information

_No response_

thelazydogsback avatar Aug 25 '25 22:08 thelazydogsback