diff --git a/importer/api/serializer.py b/importer/api/serializer.py index f201d79a..74874ed7 100644 --- a/importer/api/serializer.py +++ b/importer/api/serializer.py @@ -15,6 +15,7 @@ class Meta: "store_spatial_files", "overwrite_existing_layer", "skip_existing_layers", + "source" ) base_file = serializers.FileField() @@ -23,3 +24,4 @@ class Meta: store_spatial_files = serializers.BooleanField(required=False, default=True) overwrite_existing_layer = serializers.BooleanField(required=False, default=False) skip_existing_layers = serializers.BooleanField(required=False, default=False) + source = serializers.CharField(required=False, default='upload') diff --git a/importer/api/views.py b/importer/api/views.py index c5683d23..5ee72919 100644 --- a/importer/api/views.py +++ b/importer/api/views.py @@ -148,7 +148,7 @@ def create(self, request, *args, **kwargs): legacy_upload_name=_file.name, action=action, name=_file.name, - source="upload", + source=extracted_params.get('source'), ) sig = import_orchestrator.s( diff --git a/importer/handlers/common/metadata.py b/importer/handlers/common/metadata.py index 75258379..3666cf9c 100644 --- a/importer/handlers/common/metadata.py +++ b/importer/handlers/common/metadata.py @@ -1,6 +1,7 @@ import logging from geonode.resource.enumerator import ExecutionRequestAction as exa from importer.handlers.base import BaseHandler +from importer.models import ResourceHandlerInfo from importer.handlers.xml.serializer import MetadataFileSerializer from importer.utils import ImporterRequestAction as ira from importer.orchestrator import orchestrator @@ -49,22 +50,44 @@ def extract_params_from_data(_data, action=None): "skip_existing_layers": _data.pop("skip_existing_layers", "False"), "overwrite_existing_layer": _data.pop("overwrite_existing_layer", "False"), "store_spatial_file": _data.pop("store_spatial_files", "True"), + "source": _data.pop("source", "True"), }, _data @staticmethod def perform_last_step(execution_id): - pass + _exec = orchestrator.get_execution_object(execution_id) + + _exec.output_params.update( + **{ + "detail_url": [ + x.resource.detail_url + for x in ResourceHandlerInfo.objects.filter(execution_request=_exec) + ] + } + ) + _exec.save() def import_resource(self, files: dict, execution_id: str, **kwargs): _exec = orchestrator.get_execution_object(execution_id) # getting the dataset alternate = _exec.input_params.get("dataset_title") - dataset = get_object_or_404(Dataset, alternate=alternate) + resource_id = _exec.input_params.get("resource_id") + if resource_id: + dataset = get_object_or_404(Dataset, pk=resource_id) + elif alternate: + dataset = get_object_or_404(Dataset, alternate=alternate) # retrieving the handler used for the dataset original_handler = orchestrator.load_handler( dataset.resourcehandlerinfo_set.first().handler_module_path )() + + ResourceHandlerInfo.objects.create( + handler_module_path=dataset.resourcehandlerinfo_set.first().handler_module_path, + resource=dataset, + execution_request=_exec, + kwargs=kwargs.get("kwargs", {}) or kwargs, + ) self.handle_metadata_resource(_exec, dataset, original_handler) diff --git a/importer/handlers/common/raster.py b/importer/handlers/common/raster.py index 50a473b7..7f2377f5 100644 --- a/importer/handlers/common/raster.py +++ b/importer/handlers/common/raster.py @@ -102,6 +102,7 @@ def extract_params_from_data(_data, action=None): "skip_existing_layers": _data.pop("skip_existing_layers", "False"), "overwrite_existing_layer": _data.pop("overwrite_existing_layer", "False"), "store_spatial_file": _data.pop("store_spatial_files", "True"), + "source": _data.pop("source", "upload"), }, _data @staticmethod diff --git a/importer/handlers/common/vector.py b/importer/handlers/common/vector.py index 2ab05010..fb198491 100644 --- a/importer/handlers/common/vector.py +++ b/importer/handlers/common/vector.py @@ -112,6 +112,7 @@ def extract_params_from_data(_data, action=None): "skip_existing_layers": _data.pop("skip_existing_layers", "False"), "overwrite_existing_layer": _data.pop("overwrite_existing_layer", "False"), "store_spatial_file": _data.pop("store_spatial_files", "True"), + "source": _data.pop("source", "upload"), }, _data @staticmethod diff --git a/importer/handlers/shapefile/handler.py b/importer/handlers/shapefile/handler.py index 9ace3133..2ace0bf0 100644 --- a/importer/handlers/shapefile/handler.py +++ b/importer/handlers/shapefile/handler.py @@ -91,6 +91,7 @@ def extract_params_from_data(_data, action=None): "skip_existing_layers": _data.pop("skip_existing_layers", "False"), "overwrite_existing_layer": _data.pop("overwrite_existing_layer", "False"), "store_spatial_file": _data.pop("store_spatial_files", "True"), + "source": _data.pop("source", "upload"), } return additional_params, _data diff --git a/importer/handlers/shapefile/serializer.py b/importer/handlers/shapefile/serializer.py index cbb9920a..bdda714a 100644 --- a/importer/handlers/shapefile/serializer.py +++ b/importer/handlers/shapefile/serializer.py @@ -18,6 +18,7 @@ class Meta: "store_spatial_files", "overwrite_existing_layer", "skip_existing_layers", + "source" ) base_file = serializers.FileField() @@ -29,3 +30,4 @@ class Meta: store_spatial_files = serializers.BooleanField(required=False, default=True) overwrite_existing_layer = serializers.BooleanField(required=False, default=False) skip_existing_layers = serializers.BooleanField(required=False, default=False) + source = serializers.CharField(required=False, default='upload') diff --git a/importer/handlers/xml/serializer.py b/importer/handlers/xml/serializer.py index d1a8466c..adb890de 100644 --- a/importer/handlers/xml/serializer.py +++ b/importer/handlers/xml/serializer.py @@ -8,7 +8,8 @@ class Meta: ref_name = "MetadataFileSerializer" model = Upload view_name = "importer_upload" - fields = ("dataset_title", "base_file") + fields = ("dataset_title", "base_file", "source") base_file = serializers.FileField() dataset_title = serializers.CharField(required=True) + source = serializers.CharField(required=False, default='resource_file_upload')