Просмотр исходного кода

fix: export() did not export submission entities when the submit_id is the scenario

trgiangdo 1 год назад
Родитель
Сommit
0b8e9412c5

+ 1 - 1
taipy/core/scenario/_scenario_manager.py

@@ -416,7 +416,7 @@ class _ScenarioManager(_Manager[Scenario], _VersionMixin):
         submissions = _SubmissionManagerFactory._build_manager()._get_all()
         submitted_entity_ids = list(entity_ids.scenario_ids.union(entity_ids.sequence_ids, entity_ids.task_ids))
         for submission in submissions:
-            if submission.entity_id in submitted_entity_ids:
+            if submission.entity_id in submitted_entity_ids or submission.entity_id == scenario.id:
                 entity_ids.submission_ids.add(submission.id)
 
         return entity_ids

+ 9 - 2
taipy/core/taipy.py

@@ -15,7 +15,7 @@ import shutil
 from datetime import datetime
 from typing import Any, Callable, Dict, List, Optional, Set, Union, overload
 
-from taipy.config.common.scope import Scope
+from taipy.config import Config, Scope
 from taipy.logger._taipy_logger import _TaipyLogger
 
 from ._core import Core
@@ -42,6 +42,7 @@ from .data.data_node_id import DataNodeId
 from .exceptions.exceptions import (
     DataNodeConfigIsNotGlobal,
     ExportFolderAlreadyExists,
+    InvalidExportPath,
     ModelNotFound,
     NonExistingVersion,
     VersionIsNotProductionVersion,
@@ -972,9 +973,12 @@ def export_scenario(
     if scenario.cycle:
         entity_ids.cycle_ids = {scenario.cycle.id}
 
+    if folder_path == Config.core.taipy_storage_folder:
+        raise InvalidExportPath("The export folder must not be the storage folder.")
+
     if os.path.exists(folder_path):
         if override:
-            __logger.warn(f"Override the existing folder '{folder_path}'")
+            __logger.warning(f"Override the existing folder '{folder_path}'")
             shutil.rmtree(folder_path, ignore_errors=True)
         else:
             raise ExportFolderAlreadyExists(str(folder_path), scenario_id)
@@ -991,6 +995,9 @@ def export_scenario(
         _ScenarioManagerFactory._build_manager()._export(scenario_id, folder_path)
     for job_id in entity_ids.job_ids:
         _JobManagerFactory._build_manager()._export(job_id, folder_path)
+    for submission_id in entity_ids.submission_ids:
+        _SubmissionManagerFactory._build_manager()._export(submission_id, folder_path)
+    _VersionManagerFactory._build_manager()._export(scenario.version, folder_path)
 
 
 def get_parents(

+ 8 - 2
tests/core/test_taipy/test_export.py

@@ -69,7 +69,8 @@ def test_export_scenario_with_cycle():
     scenario_cfg = configure_test_scenario(1, frequency=Frequency.DAILY)
 
     scenario = tp.create_scenario(scenario_cfg)
-    jobs = tp.submit(scenario).jobs
+    submission = tp.submit(scenario)
+    jobs = submission.jobs
 
     # Export the submitted scenario
     tp.export_scenario(scenario.id, "./tmp/exp_scenario")
@@ -95,6 +96,7 @@ def test_export_scenario_with_cycle():
     assert sorted(os.listdir("./tmp/exp_scenario/jobs")) == sorted(
         [f"{jobs[0].id}.json", f"{jobs[1].id}.json", f"{jobs[2].id}.json", f"{jobs[3].id}.json"]
     )
+    assert os.listdir("./tmp/exp_scenario/submission") == [f"{submission.id}.json"]
     assert sorted(os.listdir("./tmp/exp_scenario/cycles")) == sorted([f"{scenario.cycle.id}.json"])
 
 
@@ -111,6 +113,7 @@ def test_export_scenario_without_cycle():
     assert os.path.exists("./tmp/exp_scenario/tasks")
     assert os.path.exists("./tmp/exp_scenario/scenarios")
     assert os.path.exists("./tmp/exp_scenario/jobs")
+    assert os.path.exists("./tmp/exp_scenario/submission")
     assert not os.path.exists("./tmp/exp_scenario/cycles")  # No cycle
 
 
@@ -127,6 +130,7 @@ def test_export_scenario_override_existing_files():
     assert os.path.exists("./tmp/exp_scenario/tasks")
     assert os.path.exists("./tmp/exp_scenario/scenarios")
     assert os.path.exists("./tmp/exp_scenario/jobs")
+    assert os.path.exists("./tmp/exp_scenario/submission")
     assert os.path.exists("./tmp/exp_scenario/cycles")
 
     scenario_2 = tp.create_scenario(scenario_2_cfg)
@@ -142,6 +146,7 @@ def test_export_scenario_override_existing_files():
     assert os.path.exists("./tmp/exp_scenario/tasks")
     assert os.path.exists("./tmp/exp_scenario/scenarios")
     assert os.path.exists("./tmp/exp_scenario/jobs")
+    assert os.path.exists("./tmp/exp_scenario/submission")
     # The cycles folder should be removed when overriding
     assert not os.path.exists("./tmp/exp_scenario/cycles")
 
@@ -158,7 +163,8 @@ def test_export_scenario_filesystem_with_data():
     # Export scenario with data
     tp.export_scenario(scenario.id, "./tmp/exp_scenario", include_data=True, override=True)
     assert os.path.exists("./tmp/exp_scenario/user_data")
-    assert sorted(os.listdir("./tmp/exp_scenario/user_data")) == sorted(
+    data_files = [f for _, _, files in os.walk("./tmp/exp_scenario/user_data") for f in files]
+    assert sorted(data_files) == sorted(
         [
             f"{scenario.i_1.id}.p",
             f"{scenario.o_1_csv.id}.csv",