From d8a85ce717de4ccf3ce1ab31633d0bb9f188095f Mon Sep 17 00:00:00 2001 From: Irwan Fathurrahman Date: Mon, 6 Jan 2025 15:21:40 +0700 Subject: [PATCH] Add API to fetch attributes of a layer --- django_project/cloud_native_gis/api/layer.py | 15 ++++++++++++++- .../cloud_native_gis/serializer/layer.py | 10 +++++++++- django_project/cloud_native_gis/urls.py | 15 +++++++++------ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/django_project/cloud_native_gis/api/layer.py b/django_project/cloud_native_gis/api/layer.py index 98c372e..dfcac27 100644 --- a/django_project/cloud_native_gis/api/layer.py +++ b/django_project/cloud_native_gis/api/layer.py @@ -15,7 +15,9 @@ from cloud_native_gis.models.layer import Layer from cloud_native_gis.models.layer_upload import LayerUpload from cloud_native_gis.models.style import Style -from cloud_native_gis.serializer.layer import LayerSerializer +from cloud_native_gis.serializer.layer import ( + LayerSerializer, LayerAttributeSerializer +) from cloud_native_gis.serializer.layer_upload import LayerUploadSerializer from cloud_native_gis.serializer.style import LayerStyleSerializer from cloud_native_gis.utils.layer import layer_style_url, maputnik_url @@ -169,3 +171,14 @@ def post(self, request, layer_id): ).save(file.name, file) instance.save() return Response('Uploaded') + + +class LayerAttributesViewSet(LayerObjectViewSet): + """API layer attributes.""" + + serializer_class = LayerAttributeSerializer + + def get_queryset(self): + """Return queryset of API.""" + layer = self._get_layer() + return layer.layerattributes_set.all() diff --git a/django_project/cloud_native_gis/serializer/layer.py b/django_project/cloud_native_gis/serializer/layer.py index 86a7824..9b83f2a 100644 --- a/django_project/cloud_native_gis/serializer/layer.py +++ b/django_project/cloud_native_gis/serializer/layer.py @@ -3,7 +3,7 @@ from rest_framework import serializers -from cloud_native_gis.models.layer import Layer +from cloud_native_gis.models.layer import Layer, LayerAttributes from cloud_native_gis.models.style import Style from cloud_native_gis.serializer.general import LicenseSerializer from cloud_native_gis.utils.layer import layer_style_url @@ -60,3 +60,11 @@ def get_license(self, obj: Layer): class Meta: # noqa: D106 model = Layer exclude = ['unique_id'] + + +class LayerAttributeSerializer(serializers.ModelSerializer): + """Serializer for layer attribute.""" + + class Meta: # noqa: D106 + model = LayerAttributes + exclude = ['layer'] diff --git a/django_project/cloud_native_gis/urls.py b/django_project/cloud_native_gis/urls.py index b9932b0..5efe6e4 100644 --- a/django_project/cloud_native_gis/urls.py +++ b/django_project/cloud_native_gis/urls.py @@ -3,15 +3,15 @@ from django.urls import include, path from django.views.generic import TemplateView +from drf_yasg import openapi +from drf_yasg.views import get_schema_view +from rest_framework import permissions from rest_framework.routers import DefaultRouter from rest_framework_nested.routers import NestedSimpleRouter -from rest_framework import permissions -from drf_yasg.views import get_schema_view -from drf_yasg import openapi - from cloud_native_gis.api.layer import ( - LayerViewSet, LayerStyleViewSet, LayerUploadViewSet + LayerViewSet, LayerStyleViewSet, LayerUploadViewSet, + LayerAttributesViewSet ) from cloud_native_gis.api.vector_tile import VectorTileLayer @@ -28,7 +28,6 @@ permission_classes=(permissions.AllowAny,), ) - router = DefaultRouter() router.register( r'layer', LayerViewSet, basename='cloud-native-gis-layer' @@ -44,6 +43,10 @@ 'layer-upload', LayerUploadViewSet, basename='cloud-native-gis-layer-upload' ) +layer_router.register( + 'attributes', LayerAttributesViewSet, + basename='cloud-native-layer-attributes' +) urlpatterns = [ path(