Skip to content

Commit

Permalink
[Fixes #12368] fix serializers for overwrite workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
mattiagiupponi committed Oct 15, 2024
1 parent 918b437 commit e553227
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 9 deletions.
15 changes: 13 additions & 2 deletions geonode/upload/api/serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ class Meta:
"xml_file",
"sld_file",
"store_spatial_files",
"overwrite_existing_layer",
"skip_existing_layers",
"source",
)
Expand All @@ -42,11 +41,23 @@ class Meta:
xml_file = serializers.FileField(required=False)
sld_file = serializers.FileField(required=False)
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")


class OverwriteImporterSerializer(ImporterSerializer):
class Meta:
ref_name = "OverwriteImporterSerializer"
model = ResourceBase
view_name = "importer_upload"
fields = ImporterSerializer.Meta.fields + (
"overwrite_existing_layer",
"resource_pk",
)
overwrite_existing_layer = serializers.BooleanField(required=True)
resource_pk = serializers.IntegerField(required=True)


class UploadSizeLimitSerializer(BaseDynamicModelSerializer):
class Meta:
model = UploadSizeLimit
Expand Down
3 changes: 2 additions & 1 deletion geonode/upload/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################
import ast
import logging
from urllib.parse import urljoin
from django.conf import settings
Expand Down Expand Up @@ -43,7 +44,7 @@
from geonode.upload.models import UploadParallelismLimit, UploadSizeLimit
from geonode.upload.utils import UploadLimitValidator
from geonode.upload.api.exceptions import HandlerException, ImportException
from geonode.upload.api.serializer import ImporterSerializer
from geonode.upload.api.serializer import ImporterSerializer, OverwriteImporterSerializer
from geonode.upload.celery_tasks import import_orchestrator
from geonode.upload.orchestrator import orchestrator
from oauth2_provider.contrib.rest_framework import OAuth2Authentication
Expand Down
1 change: 1 addition & 0 deletions geonode/upload/handlers/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,7 @@ def overwrite_resourcehandlerinfo(

def rollback(self, exec_id, rollback_from_step, action_to_rollback, *args, **kwargs):
steps = self.ACTIONS.get(action_to_rollback)

if rollback_from_step not in steps:
logger.info(f"Step not found {rollback_from_step}, skipping")
return
Expand Down
6 changes: 4 additions & 2 deletions geonode/upload/handlers/common/vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ def overwrite_geonode_resource(
):
_exec = self._get_execution_request_object(execution_id)

dataset = resource_type.objects.filter(alternate__icontains=alternate, owner=_exec.user)
dataset = resource_type.objects.filter(pk=_exec.input_params.get("resource_pk"), owner=_exec.user)

_overwrite = _exec.input_params.get("overwrite_existing_layer", False)
# if the layer exists, we just update the information of the dataset by
Expand All @@ -623,7 +623,9 @@ def overwrite_geonode_resource(
dataset = dataset.first()

delete_dataset_cache(dataset.alternate)
set_geowebcache_invalidate_cache(dataset.typename)
# recalculate featuretype info
DataPublisher(str(self)).cat.recalculate_featuretype(dataset)
set_geowebcache_invalidate_cache(dataset_alternate=dataset.alternate)

dataset = resource_manager.update(dataset.uuid, instance=dataset, files=asset.location)

Expand Down
6 changes: 4 additions & 2 deletions geonode/upload/handlers/shapefile/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################
import ast
import json
import logging
import codecs
Expand All @@ -27,7 +28,7 @@
from pathlib import Path

from geonode.upload.handlers.shapefile.exceptions import InvalidShapeFileException
from geonode.upload.handlers.shapefile.serializer import ShapeFileSerializer
from geonode.upload.handlers.shapefile.serializer import OverwriteShapeFileSerializer, ShapeFileSerializer
from geonode.upload.utils import ImporterRequestAction as ira

logger = logging.getLogger("importer")
Expand Down Expand Up @@ -88,7 +89,8 @@ def has_serializer(data) -> bool:
if not _base:
return False
if _base.endswith("shp") if isinstance(_base, str) else _base.name.endswith("shp"):
return ShapeFileSerializer
is_overwrite_flow = ast.literal_eval(data.get("overwrite_existing_layer", "False"))
return OverwriteShapeFileSerializer if is_overwrite_flow else ShapeFileSerializer
return False

@staticmethod
Expand Down
13 changes: 13 additions & 0 deletions geonode/upload/handlers/shapefile/serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,16 @@ class Meta:
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")


class OverwriteShapeFileSerializer(ShapeFileSerializer):
class Meta:
ref_name = "ShapeFileSerializer"
model = ResourceBase
view_name = "importer_upload"
fields = ShapeFileSerializer.Meta.fields + (
"overwrite_existing_layer",
"resource_pk",
)
overwrite_existing_layer = serializers.BooleanField(required=True)
resource_pk = serializers.IntegerField(required=True)
6 changes: 4 additions & 2 deletions geonode/upload/orchestrator.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#########################################################################
import ast
import logging
from typing import Optional
from uuid import UUID
Expand All @@ -30,7 +31,7 @@
from rest_framework import serializers

from geonode.upload.api.exceptions import ImportException
from geonode.upload.api.serializer import ImporterSerializer
from geonode.upload.api.serializer import ImporterSerializer, OverwriteImporterSerializer
from geonode.upload.celery_app import importer_app
from geonode.upload.handlers.base import BaseHandler
from geonode.upload.utils import error_handler
Expand Down Expand Up @@ -64,7 +65,8 @@ def get_serializer(self, _data) -> serializers.Serializer:
if _serializer:
return _serializer
logger.info("specific serializer not found, fallback on the default one")
return ImporterSerializer
is_overwrite_flow = ast.literal_eval(_data.get("overwrite_existing_layer", "False"))
return (OverwriteImporterSerializer if is_overwrite_flow else ImporterSerializer)

def load_handler(self, module_path):
try:
Expand Down
3 changes: 3 additions & 0 deletions geonode/upload/publisher.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ def publish_resources(self, resources: List[str]):
self.sanity_checks(resources)
return result

def recalculate_geoserver_featuretype(self, dataset):
self.cat.recalculate_featuretype(dataset)

def overwrite_resources(self, resources: List[str]):
"""
We dont need to do anything for now. The data is replaced via ogr2ogr
Expand Down

0 comments on commit e553227

Please sign in to comment.