acoustic-carpenter-78188
10/13/2025, 8:46 AMFlyteFile or FlyteDirectory fields using model_validate(), the deserialized objects were
missing private attributes (_remote_source, _downloader, etc.). This caused an AttributeError when attempting to re-serialize these
objects with model_dump(), breaking the serialize → deserialize → serialize cycle.
This is a critical bug that prevents users from using FlyteFile/FlyteDirectory within Pydantic BaseModel classes in a normal way.
## What changes were proposed in this pull request?
Added Pydantic model validators to both FlyteFile and FlyteDirectory classes that ensure private attributes are properly initialized during
deserialization:
1. FlyteFile (flytekit/types/file/file.py):
• Enhanced deserialize_flyte_file validator to check if private attributes exist
• If missing, reconstructs the FlyteFile using dict_to_flyte_file() transformer
• If attributes already exist (e.g., when passing already-constructed FlyteFile), returns as-is
2. FlyteDirectory (flytekit/types/directory/types.py):
• Applied same fix to deserialize_flyte_dir validator
• Uses dict_to_flyte_directory() to properly reconstruct the object
## How was this patch tested?
Added two new unit tests in `test_pydantic_basemodel_transformer.py`:
1. test_flytefile_pydantic_model_dump_validate_cycle - Verifies FlyteFile can be serialized, deserialized, and re-serialized without errors
2. test_flytedirectory_pydantic_model_dump_validate_cycle - Same for FlyteDirectory
## Check all the applicable boxes
• I updated the documentation accordingly.
• All new and existing tests passed.
• All commits are signed-off.
https://bito.ai#summarystart|
### Summary by Bito
This pull request fixes a critical bug in deserializing Pydantic models with FlyteFile and FlyteDirectory fields by adding model validators for private attributes. It ensures proper initialization during deserialization and includes new unit tests to validate the functionality of these enhancements.
flyteorg/flytekit