|
@@ -10,6 +10,7 @@
|
|
# specific language governing permissions and limitations under the License.
|
|
# specific language governing permissions and limitations under the License.
|
|
|
|
|
|
import json
|
|
import json
|
|
|
|
+from datetime import datetime
|
|
from pathlib import Path
|
|
from pathlib import Path
|
|
from typing import Callable, Iterable, Optional
|
|
from typing import Callable, Iterable, Optional
|
|
from unittest import mock
|
|
from unittest import mock
|
|
@@ -34,6 +35,7 @@ from taipy.core.exceptions.exceptions import (
|
|
SequenceBelongsToNonExistingScenario,
|
|
SequenceBelongsToNonExistingScenario,
|
|
)
|
|
)
|
|
from taipy.core.job._job_manager import _JobManager
|
|
from taipy.core.job._job_manager import _JobManager
|
|
|
|
+from taipy.core.notification._submittable_status_cache import SubmittableStatusCache
|
|
from taipy.core.scenario._scenario_manager import _ScenarioManager
|
|
from taipy.core.scenario._scenario_manager import _ScenarioManager
|
|
from taipy.core.scenario.scenario import Scenario
|
|
from taipy.core.scenario.scenario import Scenario
|
|
from taipy.core.sequence._sequence_manager import _SequenceManager
|
|
from taipy.core.sequence._sequence_manager import _SequenceManager
|
|
@@ -192,26 +194,113 @@ def test_get_all_on_multiple_versions_environment():
|
|
def test_is_submittable():
|
|
def test_is_submittable():
|
|
task_id = "TASK_task_id"
|
|
task_id = "TASK_task_id"
|
|
scenario_id = "SCENARIO_scenario_id"
|
|
scenario_id = "SCENARIO_scenario_id"
|
|
- dn = PickleDataNode("dn", Scope.SCENARIO, parent_ids={task_id, scenario_id}, properties={"default_data": 10})
|
|
|
|
- task = Task("task", {}, print, [dn], id=task_id, parent_ids={scenario_id})
|
|
|
|
|
|
+ dn_1 = PickleDataNode("dn_1", Scope.SCENARIO, parent_ids={task_id, scenario_id}, properties={"default_data": 10})
|
|
|
|
+ dn_2 = PickleDataNode("dn_2", Scope.SCENARIO, parent_ids={task_id, scenario_id}, properties={"default_data": 10})
|
|
|
|
+ task = Task("task", {}, print, [dn_1, dn_2], id=task_id, parent_ids={scenario_id})
|
|
scenario = Scenario("scenario", {task}, {}, set(), scenario_id=scenario_id)
|
|
scenario = Scenario("scenario", {task}, {}, set(), scenario_id=scenario_id)
|
|
- _DataManager._set(dn)
|
|
|
|
|
|
+ _DataManager._set(dn_1)
|
|
|
|
+ _DataManager._set(dn_2)
|
|
_TaskManager._set(task)
|
|
_TaskManager._set(task)
|
|
_ScenarioManager._set(scenario)
|
|
_ScenarioManager._set(scenario)
|
|
|
|
|
|
|
|
+ dn_1 = scenario.dn_1
|
|
|
|
+ dn_2 = scenario.dn_2
|
|
|
|
+
|
|
scenario.add_sequences({"sequence": [task]})
|
|
scenario.add_sequences({"sequence": [task]})
|
|
sequence = scenario.sequences["sequence"]
|
|
sequence = scenario.sequences["sequence"]
|
|
assert len(_SequenceManager._get_all()) == 1
|
|
assert len(_SequenceManager._get_all()) == 1
|
|
|
|
+ assert sequence.id not in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert scenario.id not in SubmittableStatusCache.submittable_id_datanodes
|
|
assert _SequenceManager._is_submittable(sequence)
|
|
assert _SequenceManager._is_submittable(sequence)
|
|
assert _SequenceManager._is_submittable(sequence.id)
|
|
assert _SequenceManager._is_submittable(sequence.id)
|
|
|
|
+ assert _ScenarioManager._is_submittable(scenario)
|
|
assert not _SequenceManager._is_submittable("Sequence_temp")
|
|
assert not _SequenceManager._is_submittable("Sequence_temp")
|
|
assert not _SequenceManager._is_submittable("SEQUENCE_temp_SCENARIO_scenario")
|
|
assert not _SequenceManager._is_submittable("SEQUENCE_temp_SCENARIO_scenario")
|
|
|
|
|
|
- scenario.dn.edit_in_progress = True
|
|
|
|
|
|
+ dn_1.edit_in_progress = True
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert dn_1.id in SubmittableStatusCache.submittable_id_datanodes[scenario.id]
|
|
|
|
+ assert dn_1.id in SubmittableStatusCache.submittable_id_datanodes[sequence.id]
|
|
|
|
+ assert dn_1.id in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.datanode_id_submittables[dn_1.id]
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.datanode_id_submittables[dn_1.id]
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[scenario.id][dn_1.id] == f"DataNode {dn_1.id} is being edited."
|
|
|
|
+ )
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[sequence.id][dn_1.id] == f"DataNode {dn_1.id} is being edited."
|
|
|
|
+ )
|
|
|
|
+ assert not _ScenarioManager._is_submittable(scenario)
|
|
|
|
+ assert not _SequenceManager._is_submittable(sequence)
|
|
|
|
+ assert not _SequenceManager._is_submittable(sequence.id)
|
|
|
|
+
|
|
|
|
+ dn_1.edit_in_progress = False
|
|
|
|
+ assert scenario.id not in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert sequence.id not in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert dn_1.id not in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert _SequenceManager._is_submittable(sequence)
|
|
|
|
+ assert _SequenceManager._is_submittable(sequence.id)
|
|
|
|
+ assert _ScenarioManager._is_submittable(scenario)
|
|
|
|
+
|
|
|
|
+ dn_1.last_edit_date = None
|
|
|
|
+ dn_2.edit_in_progress = True
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert dn_1.id in SubmittableStatusCache.submittable_id_datanodes[scenario.id]
|
|
|
|
+ assert dn_1.id in SubmittableStatusCache.submittable_id_datanodes[sequence.id]
|
|
|
|
+ assert dn_2.id in SubmittableStatusCache.submittable_id_datanodes[scenario.id]
|
|
|
|
+ assert dn_2.id in SubmittableStatusCache.submittable_id_datanodes[sequence.id]
|
|
|
|
+ assert dn_1.id in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.datanode_id_submittables[dn_1.id]
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.datanode_id_submittables[dn_1.id]
|
|
|
|
+ assert dn_2.id in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.datanode_id_submittables[dn_2.id]
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.datanode_id_submittables[dn_2.id]
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[scenario.id][dn_1.id] == f"DataNode {dn_1.id} is not written."
|
|
|
|
+ )
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[sequence.id][dn_1.id] == f"DataNode {dn_1.id} is not written."
|
|
|
|
+ )
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[scenario.id][dn_2.id] == f"DataNode {dn_2.id} is being edited."
|
|
|
|
+ )
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[sequence.id][dn_2.id] == f"DataNode {dn_2.id} is being edited."
|
|
|
|
+ )
|
|
|
|
+ assert not _ScenarioManager._is_submittable(scenario)
|
|
|
|
+ assert not _SequenceManager._is_submittable(sequence)
|
|
|
|
+ assert not _SequenceManager._is_submittable(sequence.id)
|
|
|
|
+
|
|
|
|
+ dn_1.last_edit_date = datetime.now()
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert dn_1.id not in SubmittableStatusCache.submittable_id_datanodes[scenario.id]
|
|
|
|
+ assert dn_1.id not in SubmittableStatusCache.submittable_id_datanodes[sequence.id]
|
|
|
|
+ assert dn_2.id in SubmittableStatusCache.submittable_id_datanodes[scenario.id]
|
|
|
|
+ assert dn_2.id in SubmittableStatusCache.submittable_id_datanodes[sequence.id]
|
|
|
|
+ assert dn_1.id not in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert dn_2.id in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert scenario.id in SubmittableStatusCache.datanode_id_submittables[dn_2.id]
|
|
|
|
+ assert sequence.id in SubmittableStatusCache.datanode_id_submittables[dn_2.id]
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[scenario.id][dn_2.id] == f"DataNode {dn_2.id} is being edited."
|
|
|
|
+ )
|
|
|
|
+ assert (
|
|
|
|
+ SubmittableStatusCache.submittable_id_datanodes[sequence.id][dn_2.id] == f"DataNode {dn_2.id} is being edited."
|
|
|
|
+ )
|
|
|
|
+ assert not _ScenarioManager._is_submittable(scenario)
|
|
assert not _SequenceManager._is_submittable(sequence)
|
|
assert not _SequenceManager._is_submittable(sequence)
|
|
assert not _SequenceManager._is_submittable(sequence.id)
|
|
assert not _SequenceManager._is_submittable(sequence.id)
|
|
|
|
|
|
- scenario.dn.edit_in_progress = False
|
|
|
|
|
|
+ dn_2.edit_in_progress = False
|
|
|
|
+ assert scenario.id not in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert sequence.id not in SubmittableStatusCache.submittable_id_datanodes
|
|
|
|
+ assert dn_2.id not in SubmittableStatusCache.submittable_id_datanodes[scenario.id]
|
|
|
|
+ assert dn_2.id not in SubmittableStatusCache.submittable_id_datanodes[sequence.id]
|
|
|
|
+ assert dn_2.id not in SubmittableStatusCache.datanode_id_submittables
|
|
|
|
+ assert _ScenarioManager._is_submittable(scenario)
|
|
assert _SequenceManager._is_submittable(sequence)
|
|
assert _SequenceManager._is_submittable(sequence)
|
|
assert _SequenceManager._is_submittable(sequence.id)
|
|
assert _SequenceManager._is_submittable(sequence.id)
|
|
|
|
|