diff --git a/packages/uipath/src/uipath/functions/type_conversion.py b/packages/uipath/src/uipath/functions/type_conversion.py index 7ad3627a1..33417561a 100644 --- a/packages/uipath/src/uipath/functions/type_conversion.py +++ b/packages/uipath/src/uipath/functions/type_conversion.py @@ -92,7 +92,7 @@ def convert_from_class(obj: Any) -> dict[str, Any]: # Pydantic models if isinstance(obj, BaseModel): - return obj.model_dump() + return obj.model_dump(by_alias=True) # Dataclasses if is_dataclass(obj) and not isinstance(obj, type): diff --git a/packages/uipath/tests/functions/test_output_serialization.py b/packages/uipath/tests/functions/test_output_serialization.py new file mode 100644 index 000000000..7ad28fa98 --- /dev/null +++ b/packages/uipath/tests/functions/test_output_serialization.py @@ -0,0 +1,37 @@ +"""A function's output is serialized under the keys its output schema declares.""" + +import uuid + +from pydantic import BaseModel + +from uipath.functions.type_conversion import convert_from_class +from uipath.platform.attachments import Attachment + + +class Output(BaseModel): + file: Attachment + + +def test_aliased_fields_are_serialized_by_alias(): + attachment_id = uuid.uuid4() + output = Output( + file=Attachment( + id=attachment_id, full_name="report.md", mime_type="text/markdown" + ) + ) + + assert convert_from_class(output) == { + "file": { + "ID": attachment_id, + "FullName": "report.md", + "MimeType": "text/markdown", + "Metadata": None, + } + } + + +def test_models_without_aliases_are_unchanged(): + class Plain(BaseModel): + summary: str + + assert convert_from_class(Plain(summary="ok")) == {"summary": "ok"}