Selaa lähdekoodia

Merge pull request #1224 from yaten2302/fix/#1198-DataNode.is_up_to_date-raises-error-when-never-written-before

<DataNode>.is_up_to_date raises error when never written before
Đỗ Trường Giang 1 vuosi sitten
vanhempi
säilyke
ab49ac5fd5
2 muutettua tiedostoa jossa 30 lisäystä ja 14 poistoa
  1. 15 14
      taipy/core/data/data_node.py
  2. 15 0
      tests/core/data/test_data_node.py

+ 15 - 14
taipy/core/data/data_node.py

@@ -519,20 +519,21 @@ class DataNode(_Entity, _Labeled):
             or the selected data is invalid.<br/>
             True otherwise.
         """
-
-        from ..scenario.scenario import Scenario
-        from ..taipy import get_parents
-
-        parent_scenarios: Set[Scenario] = get_parents(self)["scenario"]  # type: ignore
-        for parent_scenario in parent_scenarios:
-            for ancestor_node in nx.ancestors(parent_scenario._build_dag(), self):
-                if (
-                    isinstance(ancestor_node, DataNode)
-                    and ancestor_node.last_edit_date
-                    and ancestor_node.last_edit_date > self.last_edit_date
-                ):
-                    return False
-        return self.is_valid
+        if self.is_valid:
+            from ..scenario.scenario import Scenario
+            from ..taipy import get_parents
+
+            parent_scenarios: Set[Scenario] = get_parents(self)["scenario"]  # type: ignore
+            for parent_scenario in parent_scenarios:
+                for ancestor_node in nx.ancestors(parent_scenario._build_dag(), self):
+                    if (
+                        isinstance(ancestor_node, DataNode)
+                        and ancestor_node.last_edit_date
+                        and ancestor_node.last_edit_date > self.last_edit_date
+                    ):
+                        return False
+            return True
+        return False
 
     @staticmethod
     def _class_map():

+ 15 - 0
tests/core/data/test_data_node.py

@@ -75,6 +75,21 @@ class TestDataNode:
         assert not dn.is_ready_for_reading
         assert len(dn.properties) == 0
 
+    def test_is_up_to_date_when_not_written(self):
+        dn_confg_1 = Config.configure_in_memory_data_node("dn_1", default_data="a")
+        dn_confg_2 = Config.configure_in_memory_data_node("dn_2")
+        task_config_1 = Config.configure_task("t1", funct_a_b, [dn_confg_1], [dn_confg_2])
+        scenario_config = Config.configure_scenario("sc", [task_config_1])
+
+        scenario = tp.create_scenario(scenario_config)
+
+        assert scenario.dn_1.is_up_to_date is True
+        assert scenario.dn_2.is_up_to_date is False
+
+        tp.submit(scenario)
+        assert scenario.dn_1.is_up_to_date is True
+        assert scenario.dn_2.is_up_to_date is True
+
     def test_create(self):
         a_date = datetime.now()
         dn = DataNode(