From 37525111ef70ce11c644ffce075510d19fac66c5 Mon Sep 17 00:00:00 2001 From: Adrien Perrin Date: Fri, 13 Sep 2024 09:18:12 +0000 Subject: [PATCH] support new task generating profile comparisons --- geospaas_rest_api/models.py | 11 +++---- geospaas_rest_api/processing_api/models.py | 29 +++++++++++++++++++ .../processing_api/serializers.py | 4 ++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/geospaas_rest_api/models.py b/geospaas_rest_api/models.py index f980e33..b2d5f38 100644 --- a/geospaas_rest_api/models.py +++ b/geospaas_rest_api/models.py @@ -5,8 +5,9 @@ geospaas_processing = None if geospaas_processing: - from .processing_api.models import (Job, - DownloadJob, - ConvertJob, - SyntoolCleanupJob, - HarvestJob) + from geospaas_rest_api.processing_api.models import (Job, + DownloadJob, + ConvertJob, + SyntoolCleanupJob, + SyntoolCompareJob, + HarvestJob) diff --git a/geospaas_rest_api/processing_api/models.py b/geospaas_rest_api/processing_api/models.py index b770bd3..de9fa46 100644 --- a/geospaas_rest_api/processing_api/models.py +++ b/geospaas_rest_api/processing_api/models.py @@ -220,6 +220,35 @@ def make_task_parameters(parameters): return ((parameters['criteria'],), {}) +class SyntoolCompareJob(Job): + """Job which generates comparison between Argo profiles and a 3D + product + """ + class Meta: + proxy = True + + @classmethod + def get_signature(cls, parameters): + return celery.chain( + tasks_syntool.compare_profiles.signature(), + tasks_syntool.db_insert.signature(), + tasks_core.remove_downloaded.signature() + ) + + @staticmethod + def check_parameters(parameters): + accepted_keys = ('dataset_id', 'profiles_lookups') + if not set(parameters).issubset(set(accepted_keys)): + raise ValidationError( + f"The convert action accepts only these parameters: {', '.join(accepted_keys)}") + return parameters + + @staticmethod + def make_task_parameters(parameters): + return (((parameters['dataset_id'],),), + {'profiles_lookups': parameters['profiles_lookups']}) + + class HarvestJob(Job): """Job which harvests metadata into the database""" class Meta: diff --git a/geospaas_rest_api/processing_api/serializers.py b/geospaas_rest_api/processing_api/serializers.py index 7fab8f8..d81168f 100644 --- a/geospaas_rest_api/processing_api/serializers.py +++ b/geospaas_rest_api/processing_api/serializers.py @@ -14,6 +14,7 @@ class JobSerializer(rest_framework.serializers.Serializer): 'convert': models.ConvertJob, 'harvest': models.HarvestJob, 'syntool_cleanup': models.SyntoolCleanupJob, + 'compare_profiles': models.SyntoolCompareJob, } # Actual Job fields @@ -27,7 +28,8 @@ class JobSerializer(rest_framework.serializers.Serializer): 'download', 'convert', 'harvest', - 'syntool_cleanup' + 'syntool_cleanup', + 'compare_profiles', ], required=True, write_only=True, help_text="Action to perform")