right-tree/backend/right_tree/api/views.py

88 lines
2.7 KiB
Python
Raw Normal View History

import json
from django.contrib.gis.geos import Point
from django.contrib.gis.db import models
from django.http import HttpResponseBadRequest
from rest_framework import viewsets
from rest_framework.response import Response
from right_tree.api.models import Habitat, Plant, EcologicalDistrictLayer, SoilOrder
from right_tree.api.serializers import HabitatSerializer, PlantSerializer, SoilOrderSerializer, EcologicalDistrictLayerSerializer, AddressSerializer
from .filters import *
from .utils import get_address_from_coordinates
class PlantViewSet(viewsets.ModelViewSet):
"""
2021-10-20 12:36:48 +13:00
Filtered viewset for plants.
"""
queryset = Plant.objects.all()
serializer_class = PlantSerializer
def get_queryset(self):
""" Filtering plant query set by query parameters in the URL.
(May want to eventually use django filters to break up the logic...)
"""
queryset = Plant.objects.all()
queryset = coordinate_filter(self.request, queryset)
2021-10-20 12:36:48 +13:00
queryset = soil_variant_filter(self.request, queryset)
return queryset
class SoilOrderViewSet(viewsets.ModelViewSet):
"""
Filtered viewset for soil details.
"""
serializer_class = SoilOrderSerializer
def get_queryset(self):
""" Filtering soil order query set by coordinate parameters in the URL.
"""
coordinates = self.request.query_params.get('coordinates')
if coordinates is not None:
return soil_order_coordinate_filter(coordinates)
return SoilOrder.objects.all()
class EcologicalDistrictViewSet(viewsets.ModelViewSet):
"""
Filtered viewset for ecological district/region details.
"""
serializer_class = EcologicalDistrictLayerSerializer
def get_queryset(self):
""" Filtering ecological district/region query set by coordinate parameters in the URL.
"""
coordinates = self.request.query_params.get('coordinates')
if coordinates is not None:
return ecological_district_coordinate_filter(coordinates)
return EcologicalDistrictLayer.objects.all()
class LINZPropertyViewSet(viewsets.ViewSet):
"""
Filtered viewset for ecological district/region details.
"""
def list(self, request):
coordinates = self.request.query_params.get('coordinates')
if coordinates is not None:
address_data = get_address_from_coordinates(coordinates)
serializer = AddressSerializer(address_data)
return Response(serializer.data)
else:
return HttpResponseBadRequest("No coordinate given.")
class HabitatViewSet(viewsets.ModelViewSet):
"""
Viewset for all habitats.
"""
serializer_class = HabitatSerializer
queryset = Habitat.objects.all()