Browse Source

Merge pull request #569 from Avaiga/feature/add-config-id-to-submission-entity

Feature/add config id to submission entity
Toan Quach 1 year ago
parent
commit
6ef6e2aa17

+ 5 - 2
taipy/core/_orchestrator/_orchestrator.py

@@ -24,6 +24,7 @@ from ..data._data_manager_factory import _DataManagerFactory
 from ..job._job_manager_factory import _JobManagerFactory
 from ..job.job import Job
 from ..job.job_id import JobId
+from ..scenario.scenario import Scenario
 from ..submission._submission_manager_factory import _SubmissionManagerFactory
 from ..task.task import Task
 from ._abstract_orchestrator import _AbstractOrchestrator
@@ -67,7 +68,9 @@ class _Orchestrator(_AbstractOrchestrator):
             The created Jobs.
         """
         submission = _SubmissionManagerFactory._build_manager()._create(
-            submittable.id, submittable._ID_PREFIX  # type: ignore
+            submittable.id,  # type: ignore
+            submittable._ID_PREFIX,  # type: ignore
+            getattr(submittable, "config_id", None),
         )
 
         jobs = []
@@ -120,7 +123,7 @@ class _Orchestrator(_AbstractOrchestrator):
         Returns:
             The created `Job^`.
         """
-        submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX)
+        submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX, task.config_id)
         submit_id = submission.id
         with cls.lock:
             job = cls._lock_dn_output_and_create_job(

+ 2 - 0
taipy/core/submission/_submission_converter.py

@@ -25,6 +25,7 @@ class _SubmissionConverter(_AbstractConverter):
             id=submission.id,
             entity_id=submission._entity_id,
             entity_type=submission.entity_type,
+            entity_config_id=submission._entity_config_id,
             job_ids=[job.id if isinstance(job, Job) else JobId(str(job)) for job in list(submission._jobs)],
             creation_date=submission._creation_date.isoformat(),
             submission_status=submission._submission_status,
@@ -36,6 +37,7 @@ class _SubmissionConverter(_AbstractConverter):
         submission = Submission(
             entity_id=model.entity_id,
             entity_type=model.entity_type,
+            entity_config_id=model.entity_config_id,
             id=SubmissionId(model.id),
             jobs=model.job_ids,
             creation_date=datetime.fromisoformat(model.creation_date),

+ 2 - 2
taipy/core/submission/_submission_manager.py

@@ -35,8 +35,8 @@ class _SubmissionManager(_Manager[Submission], _VersionMixin):
         return cls._repository._load_all(filters)
 
     @classmethod
-    def _create(cls, entity_id: str, entity_type: str) -> Submission:
-        submission = Submission(entity_id=entity_id, entity_type=entity_type)
+    def _create(cls, entity_id: str, entity_type: str, entity_config: Optional[str]) -> Submission:
+        submission = Submission(entity_id=entity_id, entity_type=entity_type, entity_config_id=entity_config)
         cls._set(submission)
 
         Notifier.publish(_make_event(submission, EventOperation.CREATION))

+ 5 - 1
taipy/core/submission/_submission_model.py

@@ -10,7 +10,7 @@
 # specific language governing permissions and limitations under the License.
 
 from dataclasses import dataclass
-from typing import Any, Dict, List, Union
+from typing import Any, Dict, List, Optional, Union
 
 from sqlalchemy import JSON, Column, Enum, String, Table
 
@@ -29,6 +29,7 @@ class _SubmissionModel(_BaseModel):
         Column("id", String, primary_key=True),
         Column("entity_id", String),
         Column("entity_type", String),
+        Column("entity_config_id", String),
         Column("job_ids", JSON),
         Column("creation_date", String),
         Column("submission_status", Enum(SubmissionStatus)),
@@ -37,6 +38,7 @@ class _SubmissionModel(_BaseModel):
     id: str
     entity_id: str
     entity_type: str
+    entity_config_id: Optional[str]
     job_ids: Union[List[JobId], List]
     creation_date: str
     submission_status: SubmissionStatus
@@ -48,6 +50,7 @@ class _SubmissionModel(_BaseModel):
             id=data["id"],
             entity_id=data["entity_id"],
             entity_type=data["entity_type"],
+            entity_config_id=data.get("entity_config_id"),
             job_ids=_BaseModel._deserialize_attribute(data["job_ids"]),
             creation_date=data["creation_date"],
             submission_status=SubmissionStatus._from_repr(data["submission_status"]),
@@ -59,6 +62,7 @@ class _SubmissionModel(_BaseModel):
             self.id,
             self.entity_id,
             self.entity_type,
+            self.entity_config_id,
             _BaseModel._serialize_attribute(self.job_ids),
             self.creation_date,
             repr(self.submission_status),

+ 6 - 0
taipy/core/submission/submission.py

@@ -48,6 +48,7 @@ class Submission(_Entity, _Labeled):
         self,
         entity_id: str,
         entity_type: str,
+        entity_config_id: Optional[str] = None,
         id: Optional[str] = None,
         jobs: Optional[Union[List[Job], List[JobId]]] = None,
         creation_date: Optional[datetime] = None,
@@ -56,6 +57,7 @@ class Submission(_Entity, _Labeled):
     ):
         self._entity_id = entity_id
         self._entity_type = entity_type
+        self._entity_config_id = entity_config_id
         self.id = id or self.__new_id()
         self._jobs: Union[List[Job], List[JobId], List] = jobs or []
         self._creation_date = creation_date or datetime.now()
@@ -83,6 +85,10 @@ class Submission(_Entity, _Labeled):
     def entity_type(self) -> str:
         return self._entity_type
 
+    @property
+    def entity_config_id(self) -> Optional[str]:
+        return self._entity_config_id
+
     @property
     def creation_date(self):
         return self._creation_date

+ 3 - 3
tests/core/_orchestrator/_dispatcher/test_job_dispatcher.py

@@ -111,7 +111,7 @@ def test_can_execute_synchronous():
 
     task_id = TaskId("task_id1")
     task = Task(config_id="name", properties={}, input=[], function=print, output=[], id=task_id)
-    submission = _SubmissionManagerFactory._build_manager()._create(task_id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task_id, task._ID_PREFIX, task.config_id)
     job_id = JobId("id1")
     job = Job(job_id, task, submission.id, task.id)
 
@@ -129,7 +129,7 @@ def test_exception_in_user_function():
     task_id = TaskId("task_id1")
     job_id = JobId("id1")
     task = Task(config_id="name", properties={}, input=[], function=_error, output=[], id=task_id)
-    submission = _SubmissionManagerFactory._build_manager()._create(task_id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task_id, task._ID_PREFIX, task.config_id)
     job = Job(job_id, task, submission.id, task.id)
 
     dispatcher = _OrchestratorFactory._dispatcher
@@ -150,7 +150,7 @@ def test_exception_in_writing_data():
     output._is_in_cache = False
     output.write.side_effect = ValueError()
     task = Task(config_id="name", properties={}, input=[], function=print, output=[output], id=task_id)
-    submission = _SubmissionManagerFactory._build_manager()._create(task_id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task_id, task._ID_PREFIX, task.config_id)
     job = Job(job_id, task, submission.id, task.id)
 
     dispatcher = _OrchestratorFactory._dispatcher

+ 6 - 7
tests/core/job/test_job.py

@@ -29,7 +29,6 @@ from taipy.core.job.job import Job
 from taipy.core.job.status import Status
 from taipy.core.scenario.scenario import Scenario
 from taipy.core.submission._submission_manager_factory import _SubmissionManagerFactory
-from taipy.core.submission.submission import Submission
 from taipy.core.task._task_manager import _TaskManager
 from taipy.core.task.task import Task
 
@@ -118,7 +117,7 @@ def test_comparison(task):
 
 
 def test_status_job(task):
-    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX, task.config_id)
     job = Job("job_id", task, submission.id, "SCENARIO_scenario_config")
     submission.jobs = [job]
 
@@ -149,7 +148,7 @@ def test_status_job(task):
 
 def test_notification_job(task):
     subscribe = MagicMock()
-    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX, task.config_id)
     job = Job("job_id", task, submission.id, "SCENARIO_scenario_config")
     submission.jobs = [job]
 
@@ -169,7 +168,7 @@ def test_notification_job(task):
 
 def test_handle_exception_in_user_function(task_id, job_id):
     task = Task(config_id="name", properties={}, input=[], function=_error, output=[], id=task_id)
-    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX, task.config_id)
     job = Job(job_id, task, submission.id, "scenario_entity_id")
     submission.jobs = [job]
 
@@ -183,7 +182,7 @@ def test_handle_exception_in_user_function(task_id, job_id):
 def test_handle_exception_in_input_data_node(task_id, job_id):
     data_node = InMemoryDataNode("data_node", scope=Scope.SCENARIO)
     task = Task(config_id="name", properties={}, input=[data_node], function=print, output=[], id=task_id)
-    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX, task.config_id)
     job = Job(job_id, task, submission.id, "scenario_entity_id")
     submission.jobs = [job]
 
@@ -197,7 +196,7 @@ def test_handle_exception_in_input_data_node(task_id, job_id):
 def test_handle_exception_in_ouptut_data_node(replace_in_memory_write_fct, task_id, job_id):
     data_node = InMemoryDataNode("data_node", scope=Scope.SCENARIO)
     task = Task(config_id="name", properties={}, input=[], function=_foo, output=[data_node], id=task_id)
-    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task.id, task._ID_PREFIX, task.config_id)
     job = Job(job_id, task, submission.id, "scenario_entity_id")
     submission.jobs = [job]
 
@@ -212,7 +211,7 @@ def test_handle_exception_in_ouptut_data_node(replace_in_memory_write_fct, task_
 def test_auto_set_and_reload(current_datetime, job_id):
     task_1 = Task(config_id="name_1", properties={}, function=_foo, id=TaskId("task_1"))
     task_2 = Task(config_id="name_2", properties={}, function=_foo, id=TaskId("task_2"))
-    submission = _SubmissionManagerFactory._build_manager()._create(task_1.id, task_1._ID_PREFIX)
+    submission = _SubmissionManagerFactory._build_manager()._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
     job_1 = Job(job_id, task_1, submission.id, "scenario_entity_id")
     submission.jobs = [job_1]
 

+ 2 - 2
tests/core/job/test_job_manager.py

@@ -349,8 +349,8 @@ def test_cancel_subsequent_jobs():
     task_3 = Task("task_config_3", {}, print, [dn_4], id="task_3")
 
     # Can't get tasks under 1 scenario due to partial not serializable
-    submission_1 = submission_manager._create("scenario_id", Scenario._ID_PREFIX)
-    submission_2 = submission_manager._create("scenario_id", Scenario._ID_PREFIX)
+    submission_1 = submission_manager._create("scenario_id", Scenario._ID_PREFIX, "scenario_config_id")
+    submission_2 = submission_manager._create("scenario_id", Scenario._ID_PREFIX, "scenario_config_id")
 
     _DataManager._set(dn_1)
     _DataManager._set(dn_2)

+ 10 - 9
tests/core/submission/test_submission.py

@@ -10,10 +10,6 @@
 # specific language governing permissions and limitations under the License.
 
 from datetime import datetime
-from functools import partial
-from typing import Union
-from unittest import mock
-from unittest.mock import patch
 
 import pytest
 from taipy.core import TaskId
@@ -28,10 +24,12 @@ from taipy.core.task.task import Task
 
 
 def test_create_submission(scenario, job, current_datetime):
-    submission_1 = Submission(scenario.id, scenario._ID_PREFIX)
+    submission_1 = Submission(scenario.id, scenario._ID_PREFIX, scenario.config_id)
 
     assert submission_1.id is not None
     assert submission_1.entity_id == scenario.id
+    assert submission_1.entity_type == scenario._ID_PREFIX
+    assert submission_1.entity_config_id == scenario.config_id
     assert submission_1.jobs == []
     assert isinstance(submission_1.creation_date, datetime)
     assert submission_1._submission_status == SubmissionStatus.SUBMITTED
@@ -40,6 +38,7 @@ def test_create_submission(scenario, job, current_datetime):
     submission_2 = Submission(
         scenario.id,
         scenario._ID_PREFIX,
+        scenario.config_id,
         "submission_id",
         [job],
         current_datetime,
@@ -49,6 +48,8 @@ def test_create_submission(scenario, job, current_datetime):
 
     assert submission_2.id == "submission_id"
     assert submission_2.entity_id == scenario.id
+    assert submission_2.entity_type == scenario._ID_PREFIX
+    assert submission_2.entity_config_id == scenario.config_id
     assert submission_2._jobs == [job]
     assert submission_2.creation_date == current_datetime
     assert submission_2._submission_status == SubmissionStatus.COMPLETED
@@ -101,7 +102,7 @@ def __test_update_submission_status(job_ids, expected_submission_status):
         "job8_abandoned": MockJob("job8_abandoned", Status.ABANDONED),
     }
 
-    submission = Submission("submission_id", "ENTITY_TYPE")
+    submission = Submission("submission_id", "ENTITY_TYPE", "entity_config_id")
     submission.jobs = [jobs[job_id] for job_id in job_ids]
     for job_id in job_ids:
         job = jobs[job_id]
@@ -261,7 +262,7 @@ def test_update_submission_status_with_wrong_case_abandoned_without_cancel_or_fa
 
 def test_auto_set_and_reload():
     task = Task(config_id="name_1", properties={}, function=print, id=TaskId("task_1"))
-    submission_1 = Submission(task.id, task._ID_PREFIX)
+    submission_1 = Submission(task.id, task._ID_PREFIX, task.config_id)
     job_1 = Job("job_1", task, submission_1.id, submission_1.entity_id)
     job_2 = Job("job_2", task, submission_1.id, submission_1.entity_id)
 
@@ -348,7 +349,7 @@ def test_auto_set_and_reload():
 )
 def test_update_submission_status_with_single_job_completed(job_statuses, expected_submission_statuses):
     job = MockJob("job_id", Status.SUBMITTED)
-    submission = Submission("submission_id", "ENTITY_TYPE")
+    submission = Submission("submission_id", "ENTITY_TYPE", "entity_config_id")
 
     assert submission.submission_status == SubmissionStatus.SUBMITTED
 
@@ -360,7 +361,7 @@ def test_update_submission_status_with_single_job_completed(job_statuses, expect
 
 def __test_update_submission_status_with_two_jobs(job_ids, job_statuses, expected_submission_statuses):
     jobs = {job_id: MockJob(job_id, Status.SUBMITTED) for job_id in job_ids}
-    submission = Submission("submission_id", "ENTITY_TYPE")
+    submission = Submission("submission_id", "ENTITY_TYPE", "entity_config_id")
 
     assert submission.submission_status == SubmissionStatus.SUBMITTED
 

+ 14 - 10
tests/core/submission/test_submission_manager.py

@@ -20,7 +20,9 @@ from taipy.core.task.task import Task
 
 
 def test_create_submission(scenario):
-    submission_1 = _SubmissionManagerFactory._build_manager()._create(scenario.id, scenario._ID_PREFIX)
+    submission_1 = _SubmissionManagerFactory._build_manager()._create(
+        scenario.id, scenario._ID_PREFIX, scenario.config_id
+    )
 
     assert submission_1.id is not None
     assert submission_1.entity_id == scenario.id
@@ -34,7 +36,7 @@ def test_get_submission():
 
     assert submission_manager._get("random_submission_id") is None
 
-    submission_1 = submission_manager._create("entity_id", "ENTITY_TYPE")
+    submission_1 = submission_manager._create("entity_id", "ENTITY_TYPE", "entity_config_id")
     submission_2 = submission_manager._get(submission_1.id)
 
     assert submission_1.id == submission_2.id
@@ -48,11 +50,13 @@ def test_get_all_submission():
     submission_manager = _SubmissionManagerFactory._build_manager()
     version_manager = _VersionManagerFactory._build_manager()
 
-    submission_manager._set(Submission("entity_id", "submission_id", version=version_manager._get_latest_version()))
+    submission_manager._set(
+        Submission("entity_id", "submission_id", "entity_config_id", version=version_manager._get_latest_version())
+    )
     for version_name in ["abc", "xyz"]:
         for i in range(10):
             submission_manager._set(
-                Submission("entity_id", f"submission_{version_name}_{i}", version=f"{version_name}")
+                Submission("entity_id", f"submission_{version_name}_{i}", "entity_config_id", version=f"{version_name}")
             )
 
     assert len(submission_manager._get_all()) == 1
@@ -69,22 +73,22 @@ def test_get_latest_submission():
     task_2 = Task("task_config_2", {}, print, id="task_id_2")
 
     submission_manager = _SubmissionManagerFactory._build_manager()
-    submission_1 = submission_manager._create(task_1.id, task_1._ID_PREFIX)
+    submission_1 = submission_manager._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
     assert submission_manager._get_latest(task_1) == submission_1
     assert submission_manager._get_latest(task_2) is None
 
     sleep(0.01)  # Comparison is based on time, precision on Windows is not enough important
-    submission_2 = submission_manager._create(task_2.id, task_2._ID_PREFIX)
+    submission_2 = submission_manager._create(task_2.id, task_2._ID_PREFIX, task_2.config_id)
     assert submission_manager._get_latest(task_1) == submission_1
     assert submission_manager._get_latest(task_2) == submission_2
 
     sleep(0.01)  # Comparison is based on time, precision on Windows is not enough important
-    submission_3 = submission_manager._create(task_1.id, task_1._ID_PREFIX)
+    submission_3 = submission_manager._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
     assert submission_manager._get_latest(task_1) == submission_3
     assert submission_manager._get_latest(task_2) == submission_2
 
     sleep(0.01)  # Comparison is based on time, precision on Windows is not enough important
-    submission_4 = submission_manager._create(task_2.id, task_2._ID_PREFIX)
+    submission_4 = submission_manager._create(task_2.id, task_2._ID_PREFIX, task_2.config_id)
     assert submission_manager._get_latest(task_1) == submission_3
     assert submission_manager._get_latest(task_2) == submission_4
 
@@ -92,11 +96,11 @@ def test_get_latest_submission():
 def test_delete_submission():
     submission_manager = _SubmissionManagerFactory._build_manager()
 
-    submission = Submission("entity_id", "submission_id")
+    submission = Submission("entity_id", "submission_id", "entity_config_id")
     submission_manager._set(submission)
 
     for i in range(10):
-        submission_manager._set(Submission("entity_id", f"submission_{i}"))
+        submission_manager._set(Submission("entity_id", f"submission_{i}", "entity_config_id"))
 
     assert len(submission_manager._get_all()) == 11
     assert isinstance(submission_manager._get(submission.id), Submission)

+ 14 - 10
tests/core/submission/test_submission_manager_with_sql_repo.py

@@ -28,7 +28,9 @@ def init_managers():
 def test_create_submission(scenario, init_sql_repo):
     init_managers()
 
-    submission_1 = _SubmissionManagerFactory._build_manager()._create(scenario.id, scenario._ID_PREFIX)
+    submission_1 = _SubmissionManagerFactory._build_manager()._create(
+        scenario.id, scenario._ID_PREFIX, scenario.config_id
+    )
 
     assert submission_1.id is not None
     assert submission_1.entity_id == scenario.id
@@ -42,7 +44,7 @@ def test_get_submission(init_sql_repo):
 
     submission_manager = _SubmissionManagerFactory._build_manager()
 
-    submission_1 = submission_manager._create("entity_id", "ENTITY_TYPE")
+    submission_1 = submission_manager._create("entity_id", "ENTITY_TYPE", "entity_config_id")
     submission_2 = submission_manager._get(submission_1.id)
 
     assert submission_1.id == submission_2.id
@@ -58,11 +60,13 @@ def test_get_all_submission(init_sql_repo):
     submission_manager = _SubmissionManagerFactory._build_manager()
     version_manager = _VersionManagerFactory._build_manager()
 
-    submission_manager._set(Submission("entity_id", "submission_id", version=version_manager._get_latest_version()))
+    submission_manager._set(
+        Submission("entity_id", "submission_id", "entity_config_id", version=version_manager._get_latest_version())
+    )
     for version_name in ["abc", "xyz"]:
         for i in range(10):
             submission_manager._set(
-                Submission("entity_id", f"submission_{version_name}_{i}", version=f"{version_name}")
+                Submission("entity_id", f"submission_{version_name}_{i}", "entity_config_id", version=f"{version_name}")
             )
     assert len(submission_manager._get_all()) == 1
 
@@ -80,22 +84,22 @@ def test_get_latest_submission(init_sql_repo):
     task_2 = Task("task_config_2", {}, print, id="task_id_2")
 
     submission_manager = _SubmissionManagerFactory._build_manager()
-    submission_1 = submission_manager._create(task_1.id, task_1._ID_PREFIX)
+    submission_1 = submission_manager._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
     assert submission_manager._get_latest(task_1) == submission_1
     assert submission_manager._get_latest(task_2) is None
 
     sleep(0.01)  # Comparison is based on time, precision on Windows is not enough important
-    submission_2 = submission_manager._create(task_2.id, task_2._ID_PREFIX)
+    submission_2 = submission_manager._create(task_2.id, task_2._ID_PREFIX, task_2.config_id)
     assert submission_manager._get_latest(task_1) == submission_1
     assert submission_manager._get_latest(task_2) == submission_2
 
     sleep(0.01)  # Comparison is based on time, precision on Windows is not enough important
-    submission_3 = submission_manager._create(task_1.id, task_1._ID_PREFIX)
+    submission_3 = submission_manager._create(task_1.id, task_1._ID_PREFIX, task_1.config_id)
     assert submission_manager._get_latest(task_1) == submission_3
     assert submission_manager._get_latest(task_2) == submission_2
 
     sleep(0.01)  # Comparison is based on time, precision on Windows is not enough important
-    submission_4 = submission_manager._create(task_2.id, task_2._ID_PREFIX)
+    submission_4 = submission_manager._create(task_2.id, task_2._ID_PREFIX, task_2.config_id)
     assert submission_manager._get_latest(task_1) == submission_3
     assert submission_manager._get_latest(task_2) == submission_4
 
@@ -105,11 +109,11 @@ def test_delete_submission(init_sql_repo):
 
     submission_manager = _SubmissionManagerFactory._build_manager()
 
-    submission = Submission("entity_id", "submission_id")
+    submission = Submission("entity_id", "submission_id", "entity_config_id")
     submission_manager._set(submission)
 
     for i in range(10):
-        submission_manager._set(Submission("entity_id", f"submission_{i}"))
+        submission_manager._set(Submission("entity_id", f"submission_{i}", "entity_config_id"))
 
     assert len(submission_manager._get_all()) == 11
     assert isinstance(submission_manager._get(submission.id), Submission)

+ 9 - 9
tests/core/submission/test_submission_repositories.py

@@ -43,7 +43,7 @@ class TestSubmissionRepository:
         job._task = task
         _JobManagerFactory._build_manager()._repository._save(job)
 
-        submission = Submission(task.id, task._ID_PREFIX)
+        submission = Submission(task.id, task._ID_PREFIX, task.config_id)
         submission_repository = _SubmissionManagerFactory._build_manager()._repository
         submission_repository._save(submission)
         submission.jobs = [job]
@@ -55,7 +55,7 @@ class TestSubmissionRepository:
     def test_exists(self, configure_repo):
         configure_repo()
 
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
         submission_repository = _SubmissionManagerFactory._build_manager()._repository
         submission_repository._save(submission)
 
@@ -67,7 +67,7 @@ class TestSubmissionRepository:
         configure_repo()
 
         repository = _SubmissionManagerFactory._build_manager()._repository
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
         for i in range(10):
             submission.id = f"submission-{i}"
             repository._save(submission)
@@ -81,7 +81,7 @@ class TestSubmissionRepository:
 
         repository = _SubmissionManagerFactory._build_manager()._repository
 
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
         repository._save(submission)
 
         repository._delete(submission.id)
@@ -94,7 +94,7 @@ class TestSubmissionRepository:
         configure_repo()
 
         submission_repository = _SubmissionManagerFactory._build_manager()._repository
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
 
         for i in range(10):
             submission.id = f"submission-{i}"
@@ -110,7 +110,7 @@ class TestSubmissionRepository:
     def test_delete_many(self, configure_repo):
         configure_repo()
 
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
         submission_repository = _SubmissionManagerFactory._build_manager()._repository
 
         for i in range(10):
@@ -130,7 +130,7 @@ class TestSubmissionRepository:
 
         # Create 5 entities with version 1.0 and 5 entities with version 2.0
         submission_repository = _SubmissionManagerFactory._build_manager()._repository
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
 
         for i in range(10):
             submission.id = f"submission-{i}"
@@ -148,7 +148,7 @@ class TestSubmissionRepository:
         configure_repo()
 
         submission_repository = _SubmissionManagerFactory._build_manager()._repository
-        submission = Submission("entity_id", "ENTITY_TYPE", version="random_version_number")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id", version="random_version_number")
         for i in range(10):
             submission.id = f"submission-{i}"
             submission_repository._save(submission)
@@ -170,7 +170,7 @@ class TestSubmissionRepository:
         configure_repo()
 
         repository = _SubmissionManagerFactory._build_manager()._repository
-        submission = Submission("entity_id", "ENTITY_TYPE")
+        submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
         repository._save(submission)
 
         repository._export(submission.id, tmpdir.strpath)