diff --git a/src/_pytask/_hashlib.py b/src/_pytask/_hashlib.py index d40a2d59..a3c4edcf 100644 --- a/src/_pytask/_hashlib.py +++ b/src/_pytask/_hashlib.py @@ -225,13 +225,6 @@ def hash_value(value: Any) -> int | str: """ if value is None: return 0xFCA86420 - if hasattr(value, "_asdict"): - value = value._asdict() - if isinstance(value, dict): - value = "".join( - "".join((str(hash_value(k)), str(hash_value(value[k])))) - for k in sorted(value) - ) if isinstance(value, (tuple, list)): value = "".join(str(hash_value(i)) for i in value) if isinstance(value, Path): diff --git a/src/_pytask/nodes.py b/src/_pytask/nodes.py index 98509443..a296fd47 100644 --- a/src/_pytask/nodes.py +++ b/src/_pytask/nodes.py @@ -237,12 +237,14 @@ class PythonNode(PNode): @property def signature(self) -> str: """The unique signature of the node.""" - if self.node_info: - dict_ = self.node_info._asdict() - dict_.pop("value", None) - raw_key = str(hash_value(dict_)) - else: - raw_key = str(hash_value(self.node_info)) + raw_key = ( + "".join( + str(hash_value(getattr(self.node_info, name))) + for name in ("arg_name", "path", "task_name", "task_path") + ) + if self.node_info + else str(hash_value(self.node_info)) + ) return hashlib.sha256(raw_key.encode()).hexdigest() def load(self, is_product: bool = False) -> Any: diff --git a/tests/test_nodes.py b/tests/test_nodes.py index f6e2dbe2..b396e326 100644 --- a/tests/test_nodes.py +++ b/tests/test_nodes.py @@ -54,7 +54,7 @@ def test_hash_of_python_node(value, hash_, expected): task_name="task_example", ), ), - "17b24b0e3141135172b02c8d898d0337ea79bea0f56b6272d18b6bb8e75f985f", + "7284475a87b8f1aa49c40126c5064269f0ba926265b8fe9158a39a882c6a1512", ), ( Task(base_name="task", path=Path("task.py"), function=None),