From 2285761c6f09593121ad80f087127fcae0405934 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Tue, 2 Nov 2021 13:11:26 +0100 Subject: [PATCH] TMSS-1124: process lta archive information in transaction --- .../src/tmss/tmssapp/viewsets/scheduling.py | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py index 7af1c78862e..531c63c3fc5 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py @@ -40,6 +40,7 @@ from rest_framework.views import APIView from rest_framework.decorators import api_view, renderer_classes from django.core.exceptions import ObjectDoesNotExist import django_property_filter as property_filters +from django.db import transaction class TextPlainAutoSchema(SwaggerAutoSchema): def get_produces(self): @@ -481,27 +482,28 @@ class DataproductViewSet(LOFARViewSet): json_doc = json.loads(request.body.decode('utf-8')) - dataproduct.size = int(json_doc['file_size']) - dataproduct.directory, dataproduct.filename = json_doc['srm_url'].rsplit('/', maxsplit=1) + with transaction.atomic(): + dataproduct.size = int(json_doc['file_size']) + dataproduct.directory, dataproduct.filename = json_doc['srm_url'].rsplit('/', maxsplit=1) - if 'storage_ticket' in json_doc: - models.DataproductArchiveInfo.objects.create(dataproduct=dataproduct, storage_ticket=json_doc['storage_ticket']) + if 'storage_ticket' in json_doc: + models.DataproductArchiveInfo.objects.create(dataproduct=dataproduct, storage_ticket=json_doc['storage_ticket']) - if 'md5_checksum' in json_doc: - models.DataproductHash.objects.create(dataproduct=dataproduct, - hash_algorithm=models.HashAlgorithm.objects.get(value=models.HashAlgorithm.Choices.MD5.value), - hash=json_doc['md5_checksum']) + if 'md5_checksum' in json_doc: + models.DataproductHash.objects.create(dataproduct=dataproduct, + hash_algorithm=models.HashAlgorithm.objects.get(value=models.HashAlgorithm.Choices.MD5.value), + hash=json_doc['md5_checksum']) - if 'adler32_checksum' in json_doc: - models.DataproductHash.objects.create(dataproduct=dataproduct, - hash_algorithm=models.HashAlgorithm.objects.get(value=models.HashAlgorithm.Choices.ADLER32.value), - hash=json_doc['adler32_checksum']) + if 'adler32_checksum' in json_doc: + models.DataproductHash.objects.create(dataproduct=dataproduct, + hash_algorithm=models.HashAlgorithm.objects.get(value=models.HashAlgorithm.Choices.ADLER32.value), + hash=json_doc['adler32_checksum']) - # create empty feedback. Apart from the archive info above, ingest does not create feedback like observations/pipelines do. - dataproduct.feedback_template = models.DataproductFeedbackTemplate.objects.get(name="empty") - dataproduct.feedback_doc = get_default_json_object_for_schema(dataproduct.feedback_template.schema) + # create empty feedback. Apart from the archive info above, ingest does not create feedback like observations/pipelines do. + dataproduct.feedback_template = models.DataproductFeedbackTemplate.objects.get(name="empty") + dataproduct.feedback_doc = dataproduct.feedback_template.get_default_json_document_for_schema() + dataproduct.save() - dataproduct.save() serializer = self.get_serializer(dataproduct) return RestResponse(serializer.data) -- GitLab