diff --git a/SAS/TMSS/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/src/tmss/tmssapp/models/specification.py index 36de6dcf04d2dd87ef4d1eb89270e51ec58ecfb0..3dc05281234430e3e3d20546c271de7abcf6a9eb 100644 --- a/SAS/TMSS/src/tmss/tmssapp/models/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/models/specification.py @@ -276,6 +276,7 @@ class Template(NamedCommon): # this template's schema has a schema of its own (usually the draft-06 meta schema). Validate it. validate_json_against_its_schema(self.schema) + @property def is_used(self) -> bool: '''Is this template used by any of its related objects?''' for rel_obj in self._meta.related_objects: @@ -291,7 +292,7 @@ class Template(NamedCommon): self.version = self.__class__.objects.filter(name=self.name).count() + 1 else: # this is a known template. Check if it is being used. - if self.is_used(): + if self.is_used: # yes, this template is used by others, so "editing"/updating is forbidden, # so create new instance (by setting pk=None) and assign new unique version number self.pk = None diff --git a/SAS/TMSS/test/t_tmssapp_scheduling_REST_API.py b/SAS/TMSS/test/t_tmssapp_scheduling_REST_API.py index 03b0c48e5214770da21e13156fbebffaad2fdd02..f05754d0dd0d858904f7701e73fd2e5c30d47c86 100755 --- a/SAS/TMSS/test/t_tmssapp_scheduling_REST_API.py +++ b/SAS/TMSS/test/t_tmssapp_scheduling_REST_API.py @@ -100,7 +100,6 @@ class SubtaskTemplateTestCase(unittest.TestCase): test_patch = {"name": "new_name", "description": "better description", "type": BASE_URL + '/subtask_type/inspection', - "version": 'v6.28318530718', "schema": minimal_json_schema(properties={"mykey": {"type":"string", "default":"my better value"}}) } @@ -196,7 +195,6 @@ class DataproductSpecificationsTemplateTestCase(unittest.TestCase): test_patch = {"name": "new_name", "description": "better description", - "version": 'v6.28318530718', "schema": minimal_json_schema(properties={"mykey": {"type":"string", "default":"my better value"}}) } diff --git a/SAS/TMSS/test/t_tmssapp_specification_REST_API.py b/SAS/TMSS/test/t_tmssapp_specification_REST_API.py index 7fe03a0eb7f0dcea2f15b976983b1e8f25e7ed4a..d6ca8bf9a3706116ea2c997bcd12ab23e65ef2a9 100755 --- a/SAS/TMSS/test/t_tmssapp_specification_REST_API.py +++ b/SAS/TMSS/test/t_tmssapp_specification_REST_API.py @@ -105,7 +105,6 @@ class GeneratorTemplateTestCase(unittest.TestCase): test_patch = {"name": "new_name", "description": "better description", - "version": 'v6.28318530718', "schema": minimal_json_schema(properties={"mykey": {"type":"string", "default":"my better value"}})} # PATCH item and verify @@ -176,7 +175,6 @@ class SchedulingUnitTemplateTestCase(unittest.TestCase): test_patch = {"name": "new_name", "description": "better description", - "version": 'v6.28318530718', "schema": minimal_json_schema(properties={"mykey": {"type":"string", "default":"my better value"}})} # PATCH item and verify @@ -245,7 +243,6 @@ class TaskTemplateTestCase(unittest.TestCase): test_patch = {"name": "new_name", "description": "better description", - "version": 'v6.28318530718', "schema": minimal_json_schema(properties={"mykey": {"type":"string", "default":"my better value"}})} # PATCH item and verify @@ -345,7 +342,6 @@ class TaskRelationSelectionTemplateTestCase(unittest.TestCase): test_patch = {"name": "new_name", "description": "better description", - "version": 'v6.28318530718', "schema": minimal_json_schema(properties={"mykey": {"type":"string", "default":"my better value"}})} # PATCH item and verify diff --git a/SAS/TMSS/test/t_tmssapp_specification_django_API.py b/SAS/TMSS/test/t_tmssapp_specification_django_API.py index c052cd53e66463b4fbf0d3e6167d13d160228952..7b7db2f1cbf6fc142a0486431db926152ed649f3 100755 --- a/SAS/TMSS/test/t_tmssapp_specification_django_API.py +++ b/SAS/TMSS/test/t_tmssapp_specification_django_API.py @@ -132,19 +132,22 @@ class TaskTemplateTest(unittest.TestCase): self.assertGreater(after, entry.updated_at) def test_TaskTemplate_name_version_unique(self): - test_data = TaskTemplate_test_data(name="my_name", version="1") + test_data = TaskTemplate_test_data(name=str(uuid.uuid4())) + # save data twice entry1 = models.TaskTemplate.objects.create(**test_data) + entry2 = models.TaskTemplate.objects.create(**test_data) - with self.assertRaises(IntegrityError): - entry2 = models.TaskTemplate.objects.create(**test_data) - - test_data2 = dict(**test_data) - test_data2['version'] = "2" - entry2 = models.TaskTemplate.objects.create(**test_data2) + self.assertEqual(1, entry1.version) + self.assertEqual(2, entry2.version) #version is autoincremented + # try to modify version... should be allowed, cause the template is not used, but should raise IntegrityError (unique constraint) with self.assertRaises(IntegrityError): - entry2.version = '1' + entry2.version = 1 entry2.save() + entry2.refresh_from_db() + + self.assertEqual(1, entry1.version) + self.assertEqual(2, entry2.version) class TaskRelationSelectionTemplateTest(unittest.TestCase): diff --git a/SAS/TMSS/test/tmss_test_data_django_models.py b/SAS/TMSS/test/tmss_test_data_django_models.py index c9b2556759ac555b8591ee65fcd7a60050328757..bf2c1edfa4531f319a6aa426acc5f2734b43d88e 100644 --- a/SAS/TMSS/test/tmss_test_data_django_models.py +++ b/SAS/TMSS/test/tmss_test_data_django_models.py @@ -36,13 +36,9 @@ import uuid import json -def GeneratorTemplate_test_data(name="my_GeneratorTemplate", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - +def GeneratorTemplate_test_data(name="my_GeneratorTemplate") -> dict: return {"name": name, "description": 'My one observation', - "version": version, "schema": minimal_json_schema(), "create_function": 'Funky', "tags": ["TMSS", "TESTING"]} @@ -52,25 +48,18 @@ def DefaultGeneratorTemplate_test_data(name=None, template=None) -> dict: 'template': template, 'tags':[]} -def SchedulingUnitTemplate_test_data(name="my_SchedulingUnitTemplate", version:str=None, schema:dict=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - +def SchedulingUnitTemplate_test_data(name="my_SchedulingUnitTemplate", schema:dict=None) -> dict: if schema is None: schema = minimal_json_schema(properties={ "foo" : { "type": "string", "default": "bar" } }, required=["foo"]) return {"name": name, "description": 'My SchedulingUnitTemplate description', - "version": version, "schema": schema, "tags": ["TMSS", "TESTING"]} -def SchedulingUnitObservingStrategyTemplate_test_data(name="my_SchedulingUnitObservingStrategyTemplate", version:str=None, +def SchedulingUnitObservingStrategyTemplate_test_data(name="my_SchedulingUnitObservingStrategyTemplate", scheduling_unit_template:models.SchedulingUnitTemplate=None, template:dict=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - if scheduling_unit_template is None: scheduling_unit_template = models.SchedulingUnitTemplate.objects.create(**SchedulingUnitTemplate_test_data()) @@ -79,30 +68,21 @@ def SchedulingUnitObservingStrategyTemplate_test_data(name="my_SchedulingUnitObs return {"name": name, "description": 'My SchedulingUnitTemplate description', - "version": version, "template": template, "scheduling_unit_template": scheduling_unit_template, "tags": ["TMSS", "TESTING"]} -def TaskTemplate_test_data(name="my TaskTemplate", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - +def TaskTemplate_test_data(name="my TaskTemplate") -> dict: return {"type": models.TaskType.objects.get(value='observation'), "validation_code_js":"", "name": name, "description": 'My TaskTemplate description', - "version": version, "schema": minimal_json_schema(properties={"mykey": {}}), "tags": ["TMSS", "TESTING"]} -def TaskRelationSelectionTemplate_test_data(name="my_TaskRelationSelectionTemplate", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - +def TaskRelationSelectionTemplate_test_data(name="my_TaskRelationSelectionTemplate") -> dict: return {"name": name, "description": 'My TaskRelationSelectionTemplate description', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"]} @@ -270,17 +250,13 @@ def TaskRelationBlueprint_test_data(producer: models.TaskBlueprint = None, consu "consumer": consumer} -def SubtaskTemplate_test_data(schema: object=None, version:str=None) -> dict: +def SubtaskTemplate_test_data(schema: object=None) -> dict: if schema is None: schema = minimal_json_schema() - if version is None: - version = str(uuid.uuid4()) - return {"type": models.SubtaskType.objects.get(value='copy'), "name": "observation", "description": 'My one observation', - "version": version, "schema": schema, "realtime": True, "queue": False, @@ -311,23 +287,15 @@ def TaskSchedulingRelationBlueprint_test_data(first: models.TaskBlueprint = None "placement": models.SchedulingRelationPlacement.objects.get(value='after'), "time_offset":60} -def DataproductSpecificationsTemplate_test_data(version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - +def DataproductSpecificationsTemplate_test_data() -> dict: return {"name": "data", "description": 'My one date', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"]} -def DataproductFeedbackTemplate_test_data(version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - +def DataproductFeedbackTemplate_test_data() -> dict: return {"name": "data", "description": 'My one date', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"]} diff --git a/SAS/TMSS/test/tmss_test_data_rest.py b/SAS/TMSS/test/tmss_test_data_rest.py index d3e091124418e7cd138bc46095df73b8eb499eec..318544301150f11b89bc208fe31334ed66bc66ad 100644 --- a/SAS/TMSS/test/tmss_test_data_rest.py +++ b/SAS/TMSS/test/tmss_test_data_rest.py @@ -94,36 +94,25 @@ class TMSSRESTTestDataCreator(): ####################################################### - def GeneratorTemplate(self, name="generatortemplate", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def GeneratorTemplate(self, name="generatortemplate") -> dict: return {"name": name, "description": 'My one observation', - "version": version, "schema": minimal_json_schema(properties={"foo": {"type": "string", "default": "bar"}}), "create_function": 'Funky', "tags": ["TMSS", "TESTING"]} - def SchedulingUnitTemplate(self, name="schedulingunittemplate1", version:str=None, schema:dict=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def SchedulingUnitTemplate(self, name="schedulingunittemplate1", schema:dict=None) -> dict: if schema is None: schema = minimal_json_schema(properties={"foo": {"type": "string", "default": "bar"}}) return { "name": name, "description": 'My description', - "version": version, "schema": schema, "tags": ["TMSS", "TESTING"]} - def SchedulingUnitObservingStrategyTemplate(self, name="my_SchedulingUnitObservingStrategyTemplate", version:str=None, + def SchedulingUnitObservingStrategyTemplate(self, name="my_SchedulingUnitObservingStrategyTemplate", scheduling_unit_template_url=None, template:dict=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - if scheduling_unit_template_url is None: scheduling_unit_template_url = self.post_data_and_get_url(self.SchedulingUnitTemplate(), '/scheduling_unit_template/') @@ -132,33 +121,24 @@ class TMSSRESTTestDataCreator(): return {"name": name, "description": 'My SchedulingUnitTemplate description', - "version": version, "template": template, "scheduling_unit_template": scheduling_unit_template_url, "tags": ["TMSS", "TESTING"]} - def TaskTemplate(self, name="tasktemplate1", task_type_url: str = None, version: str = None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def TaskTemplate(self, name="tasktemplate1", task_type_url: str = None) -> dict: if task_type_url is None: task_type_url = self.django_api_url + '/task_type/observation' return {"name": name, "description": 'My one observation', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"], "type": task_type_url, "validation_code_js": "???"} - def TaskRelationSelectionTemplate(self, name="taskrelationselectiontemplate1", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def TaskRelationSelectionTemplate(self, name="taskrelationselectiontemplate1") -> dict: return {"name": name, "description": 'My one observation', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"]} @@ -408,10 +388,7 @@ class TMSSRESTTestDataCreator(): "producer": producer_url, "consumer": consumer_url} - def SubtaskTemplate(self, name="subtask_template_1", schema=None, subtask_type_url: str=None, version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def SubtaskTemplate(self, name="subtask_template_1", schema=None, subtask_type_url: str=None) -> dict: if schema is None: schema = minimal_json_schema() @@ -421,7 +398,6 @@ class TMSSRESTTestDataCreator(): return {"type": subtask_type_url, "name": name, "description": 'My one observation', - "version": version, "schema": schema, "realtime": True, "queue": False, @@ -453,23 +429,15 @@ class TMSSRESTTestDataCreator(): "placement": self.django_api_url + '/scheduling_relation_placement/%s'%placement, "time_offset":60} - def DataproductSpecificationsTemplate(self, name="my_DataproductSpecificationsTemplate", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def DataproductSpecificationsTemplate(self, name="my_DataproductSpecificationsTemplate") -> dict: return {"name": name, "description": 'My one date', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"]} - def DataproductFeedbackTemplate(self, name="my_DataproductFeedbackTemplate", version:str=None) -> dict: - if version is None: - version = str(uuid.uuid4()) - + def DataproductFeedbackTemplate(self, name="my_DataproductFeedbackTemplate") -> dict: return {"name": name, "description": 'My one date', - "version": version, "schema": minimal_json_schema(), "tags": ["TMSS", "TESTING"]}