Skip to content
Snippets Groups Projects
Commit 959abd58 authored by Jorrit Schaap's avatar Jorrit Schaap
Browse files

TMSS-272: check for None

parent cf0cedd1
No related branches found
No related tags found
1 merge request!213Resolve TMSS-272
......@@ -198,7 +198,7 @@ class Subtask(BasicCommon):
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
creating = self._state.adding # True on create, False on update
if self.specifications_doc and self.specifications_template_id and self.specifications_template.schema:
if self.specifications_doc is not None and self.specifications_template_id and self.specifications_template.schema:
validate_json_against_schema(self.specifications_doc, self.specifications_template.schema)
if self.state.value == SubtaskState.Choices.SCHEDULED.value and self.__original_state.value == SubtaskState.Choices.SCHEDULING.value:
......@@ -257,7 +257,7 @@ class SubtaskInput(BasicCommon):
selection_template = ForeignKey('TaskRelationSelectionTemplate', on_delete=PROTECT, help_text='Schema used for selection_doc.')
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.selection_doc and self.selection_template_id and self.selection_template.schema:
if self.selection_doc is not None and self.selection_template_id and self.selection_template.schema is not None :
validate_json_against_schema(self.selection_doc, self.selection_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -289,10 +289,10 @@ class Dataproduct(BasicCommon):
feedback_template = ForeignKey('DataproductFeedbackTemplate', on_delete=PROTECT, help_text='Schema used for feedback_doc.')
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.specifications_doc and self.specifications_template_id and self.specifications_template.schema:
if self.specifications_doc is not None and self.specifications_template_id and self.specifications_template.schema is not None:
validate_json_against_schema(self.specifications_doc, self.specifications_template.schema)
if self.feedback_doc and self.feedback_template_id and self.feedback_template.schema:
if self.feedback_doc is not None and self.feedback_template_id and self.feedback_template.schema is not None:
validate_json_against_schema(self.feedback_doc, self.feedback_template.schema)
super().save(force_insert, force_update, using, update_fields)
......
......@@ -220,55 +220,6 @@ class Template(NamedCommon):
# TODO: remove all <class>_unique_name_version UniqueConstraint's from the subclasses and replace by this line below when we start using django 3.0
# constraints = [UniqueConstraint(fields=['name', 'version'], name='%(class)s_unique_name_version')]
@staticmethod
def update_tmss_common_json_schema_refs(schema, base_url: str=None):
'''return the given schema with all $ref fields updated so they point to the given base_url'''
if base_url is None:
# assume tmms is running locally
base_url = 'http://localhost:8000'
if isinstance(schema, dict):
updated_schema = {}
for key, value in schema.items():
if key == "$ref":
if value.startswith('#'):
# reference to local document, no need for http injection
updated_schema[key] = value
else:
try:
# deduct referred schema name and version from ref-value
head, hash, tail = value.partition('#')
head_parts = head.rstrip('/').split('/')
schema_name = head_parts[-2]
schema_version = head_parts[-1]
tail = hash+tail
# construct the common json schema path for this ref
schema_path = reverse_path('common_json_schema', kwargs={'name': schema_name, 'version': schema_version})
# and construct the proper ref url
updated_schema[key] = base_url + schema_path + tail
except:
# aparently the reference is not conform the expected lofar common json schema path...
# so, just accept the original value and assume that the user uploaded a proper schema
updated_schema[key] = value
elif isinstance(value, dict):
updated_schema[key] = Template.update_tmss_common_json_schema_refs(value, base_url)
elif isinstance(value, list):
updated_schema[key] = [Template.update_tmss_common_json_schema_refs(item, base_url) for item in value]
else:
updated_schema[key] = value
return updated_schema
if isinstance(schema, list):
return [Template.update_tmss_common_json_schema_refs(item, base_url) for item in schema]
return schema
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
self.schema = Template.update_tmss_common_json_schema_refs(self.schema)
super().save(force_insert, force_update, using, update_fields)
# concrete models
......@@ -408,7 +359,7 @@ class SchedulingSet(NamedCommon):
project = ForeignKey('Project', related_name="scheduling_sets", on_delete=PROTECT, help_text='Project to which this scheduling set belongs.') # protected to avoid accidents
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.generator_doc and self.generator_template_id and self.generator_template.schema:
if self.generator_doc is not None and self.generator_template_id and self.generator_template.schema is not None:
validate_json_against_schema(self.generator_doc, self.generator_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -423,7 +374,7 @@ class SchedulingUnitDraft(NamedCommon):
requirements_template = ForeignKey('SchedulingUnitTemplate', on_delete=CASCADE, help_text='Schema used for requirements_doc.') # todo: 'schema'?
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.requirements_doc and self.requirements_template_id and self.requirements_template.schema:
if self.requirements_doc is not None and self.requirements_template_id and self.requirements_template.schema is not None:
validate_json_against_schema(self.requirements_doc, self.requirements_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -462,7 +413,7 @@ class SchedulingUnitBlueprint(NamedCommon):
draft = ForeignKey('SchedulingUnitDraft', related_name='scheduling_unit_blueprints', on_delete=CASCADE, help_text='Scheduling Unit Draft which this run instantiates.')
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.requirements_doc and self.requirements_template_id and self.requirements_template.schema:
if self.requirements_doc is not None and self.requirements_template_id and self.requirements_template.schema is not None:
validate_json_against_schema(self.requirements_doc, self.requirements_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -525,7 +476,7 @@ class TaskDraft(NamedCommon):
specifications_template = ForeignKey('TaskTemplate', on_delete=CASCADE, help_text='Schema used for requirements_doc.') # todo: 'schema'?
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.specifications_doc and self.specifications_template_id and self.specifications_template.schema:
if self.specifications_doc is not None and self.specifications_template_id and self.specifications_template.schema is not None:
validate_json_against_schema(self.specifications_doc, self.specifications_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -641,7 +592,7 @@ class TaskBlueprint(NamedCommon):
scheduling_unit_blueprint = ForeignKey('SchedulingUnitBlueprint', related_name='task_blueprints', on_delete=CASCADE, help_text='Scheduling Unit Blueprint to which this task belongs.')
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.specifications_doc and self.specifications_template_id and self.specifications_template.schema:
if self.specifications_doc is not None and self.specifications_template_id and self.specifications_template.schema is not None:
validate_json_against_schema(self.specifications_doc, self.specifications_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -743,7 +694,7 @@ class TaskRelationDraft(BasicCommon):
output_role = ForeignKey('TaskConnectorType', related_name='taskrelationdraft_output_roles', on_delete=CASCADE, help_text='Output connector type (what kind of data can be created as output).')
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.selection_doc and self.selection_template_id and self.selection_template.schema:
if self.selection_doc is not None and self.selection_template_id and self.selection_template.schema is not None:
validate_json_against_schema(self.selection_doc, self.selection_template.schema)
super().save(force_insert, force_update, using, update_fields)
......@@ -764,7 +715,7 @@ class TaskRelationBlueprint(BasicCommon):
selection_template = ForeignKey('TaskRelationSelectionTemplate', on_delete=CASCADE, help_text='Schema used for selection_doc.') # todo: 'schema'?
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if self.selection_doc and self.selection_template_id and self.selection_template.schema:
if self.selection_doc is not None and self.selection_template_id and self.selection_template.schema is not None:
validate_json_against_schema(self.selection_doc, self.selection_template.schema)
super().save(force_insert, force_update, using, update_fields)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment