Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/fiddledyn/serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,17 @@ def _serialize_recursive(cfg: Any, ctx: SerializationContext) -> Any:
return [_serialize_recursive(x, ctx) for x in cfg]
if isinstance(cfg, dict):
return {k: _serialize_recursive(v, ctx) for k, v in cfg.items()}
if (
inspect.isfunction(cfg)
or inspect.isbuiltin(cfg)
or inspect.ismethod(cfg)
or inspect.isclass(cfg)
):
# For builtin functions and methods with module/name, store as a resolvable reference
if hasattr(cfg, "__module__") and hasattr(cfg, "__name__"):
# Store module path and function name so it can be resolved later
# return fdl.Config(f'{value.__module__}.{value.__name__}')
return {"_target_": f"{cfg.__module__}.{cfg.__name__}", "_call_": False}
if not isinstance(cfg, (run.Config, run.Partial, fdl.Config, fdl.Partial)):
return cfg

Expand All @@ -106,6 +117,9 @@ def _serialize_recursive(cfg: Any, ctx: SerializationContext) -> Any:
if current_id is not None:
output["_id_"] = current_id

if isinstance(cfg, (run.Partial, fdl.Partial)):
output["_partial_"] = True

# Handle _call_: False if this was a raw object reference that we serialized?
# NOTE: Currently Fiddle configs don't store "_call_" state.
# If the object is a Config, it implies _call_=True.
Expand Down
Loading