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 Plant, EcologicalDistrictLayer, SoilOrder from right_tree.api.serializers import PlantSerializer, SoilOrderSerializer, EcologicalDistrictLayerSerializer, AddressSerializer from .filters import * from .utils import get_address_from_coordinates class PlantViewSet(viewsets.ModelViewSet): """ 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) 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.")