From 49d0e7ebe648b09819fe7fcf57a67ed6e155e0bf Mon Sep 17 00:00:00 2001 From: Sam Waseda Date: Thu, 1 Jan 2026 00:22:56 +0100 Subject: [PATCH 1/2] Forgot to commit asdict --- flowrep/workflow.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flowrep/workflow.py b/flowrep/workflow.py index a089d08..1d0ecde 100644 --- a/flowrep/workflow.py +++ b/flowrep/workflow.py @@ -6,6 +6,7 @@ import textwrap from collections import deque from collections.abc import Callable, Iterable +from dataclasses import asdict, is_dataclass from functools import cached_property, update_wrapper from typing import Any, Generic, TypeVar, cast @@ -1119,7 +1120,10 @@ def get_hashed_node_dict(workflow_dict: dict[str, dict]) -> dict[str, Any]: hash_dict_tmp["inputs"][inp_name] = data["hash"] hash_dict_tmp["node"]["connected_inputs"].append(inp_name) elif "value" in data: - hash_dict_tmp["inputs"][inp_name] = data["value"] + if is_dataclass(data["value"]): + hash_dict_tmp["inputs"][inp_name] = asdict(data["value"]) + else: + hash_dict_tmp["inputs"][inp_name] = data["value"] else: break_flag = True if break_flag: From 1a73d7c74f796bdd00361a79c6fe7dd9b6eb34c6 Mon Sep 17 00:00:00 2001 From: Sam Waseda Date: Thu, 1 Jan 2026 00:29:20 +0100 Subject: [PATCH 2/2] Add tests --- tests/unit/test_workflow.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/unit/test_workflow.py b/tests/unit/test_workflow.py index 2760cf2..561ca1c 100644 --- a/tests/unit/test_workflow.py +++ b/tests/unit/test_workflow.py @@ -1,4 +1,5 @@ import unittest +from dataclasses import dataclass import networkx as nx @@ -195,6 +196,16 @@ def workflow_with_if_else(a=10, b=20): return x +@dataclass +class TestClass: + a: int = 10 + b: int = 20 + + +def some_function(test: TestClass): + return test + + class TestWorkflow(unittest.TestCase): @classmethod def setUpClass(cls): @@ -635,6 +646,19 @@ def workflow_with_data(a=10, b=20): for node in hashed_dict.values(): self.assertNotIn("hash", node) + @fwf.workflow + def workflow_with_class(test: TestClass): + test = some_function(test) + return test + + test_instance = TestClass() + workflow_dict = workflow_with_class.run(test=test_instance) + hashed_dict = fwf.get_hashed_node_dict(workflow_dict) + for node in hashed_dict.values(): + self.assertIn("hash", node) + self.assertIsInstance(node["hash"], str) + self.assertEqual(len(node["hash"]), 64) + def test_get_and_set_entry(self): def yet_another_workflow(a=10, b=20):