From 6d48730fc1cbbcdc9c85e14d3792e8c61419d65b Mon Sep 17 00:00:00 2001 From: thomasloux Date: Mon, 26 Jan 2026 13:24:51 +0000 Subject: [PATCH 1/4] add support for _call_ = False (so bare function) --- src/fiddledyn/serializer.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/fiddledyn/serializer.py b/src/fiddledyn/serializer.py index d9337e8..78d73d9 100644 --- a/src/fiddledyn/serializer.py +++ b/src/fiddledyn/serializer.py @@ -80,6 +80,15 @@ 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): + # 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 From 9362af579ff68887b1e1ff5b90b934037bb495c9 Mon Sep 17 00:00:00 2001 From: thomasloux Date: Mon, 26 Jan 2026 14:32:10 +0000 Subject: [PATCH 2/4] add partial support + ruff --- src/fiddledyn/serializer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/fiddledyn/serializer.py b/src/fiddledyn/serializer.py index 78d73d9..526c751 100644 --- a/src/fiddledyn/serializer.py +++ b/src/fiddledyn/serializer.py @@ -82,13 +82,10 @@ def _serialize_recursive(cfg: Any, ctx: SerializationContext) -> Any: return {k: _serialize_recursive(v, ctx) for k, v in cfg.items()} if inspect.isfunction(cfg) or inspect.isbuiltin(cfg) or inspect.ismethod(cfg): # For builtin functions and methods with module/name, store as a resolvable reference - if hasattr(cfg, '__module__') and hasattr(cfg, '__name__'): + 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 - } + return {"_target_": f"{cfg.__module__}.{cfg.__name__}", "_call_": False} if not isinstance(cfg, (run.Config, run.Partial, fdl.Config, fdl.Partial)): return cfg @@ -115,6 +112,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. From c5e535cd64e155ddc0304a70db98005c928f24fc Mon Sep 17 00:00:00 2001 From: thomasloux Date: Mon, 26 Jan 2026 14:52:12 +0000 Subject: [PATCH 3/4] support _call_=False for classes --- src/fiddledyn/serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fiddledyn/serializer.py b/src/fiddledyn/serializer.py index 526c751..3d34095 100644 --- a/src/fiddledyn/serializer.py +++ b/src/fiddledyn/serializer.py @@ -80,7 +80,7 @@ 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): + 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 From 9f10d5f630d475ebadf2b288de86cab627e14368 Mon Sep 17 00:00:00 2001 From: thomasloux Date: Mon, 26 Jan 2026 14:52:30 +0000 Subject: [PATCH 4/4] ruff --- src/fiddledyn/serializer.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/fiddledyn/serializer.py b/src/fiddledyn/serializer.py index 3d34095..8ab53db 100644 --- a/src/fiddledyn/serializer.py +++ b/src/fiddledyn/serializer.py @@ -80,7 +80,12 @@ 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): + 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