Skip to content

Commit cac0629

Browse files
authored
Add province and area-councils views (#23)
1 parent e238c4d commit cac0629

File tree

5 files changed

+84
-0
lines changed

5 files changed

+84
-0
lines changed

vbos/datasets/serializers.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
from rest_framework_gis.serializers import GeoFeatureModelSerializer
33

44
from .models import (
5+
AreaCouncil,
56
Cluster,
7+
Province,
68
RasterDataset,
79
TabularDataset,
810
TabularItem,
@@ -17,6 +19,22 @@ class Meta:
1719
fields = ["id", "name"]
1820

1921

22+
class ProvinceSerializer(GeoFeatureModelSerializer):
23+
24+
class Meta:
25+
model = Province
26+
geo_field = "geometry"
27+
fields = "__all__"
28+
29+
30+
class AreaCouncilSerializer(GeoFeatureModelSerializer):
31+
32+
class Meta:
33+
model = AreaCouncil
34+
geo_field = "geometry"
35+
fields = "__all__"
36+
37+
2038
class RasterDatasetSerializer(serializers.ModelSerializer):
2139
file = serializers.ReadOnlyField(source="file.file.url")
2240
cluster = serializers.ReadOnlyField(source="cluster.name")
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from django.urls.base import reverse
2+
from rest_framework import status
3+
from rest_framework.test import APITestCase
4+
5+
6+
class TestAreaCouncilListView(APITestCase):
7+
def test_cluster_list_view(self):
8+
url = reverse("datasets:area-council-list", args=["TORBA"])
9+
req = self.client.get(url)
10+
assert req.status_code == status.HTTP_200_OK
11+
assert req.data.get("count") == 9
12+
assert req.data.get("features")[0]["properties"]["name"] == "East Gaua"
13+
assert req.data.get("features")[0]["geometry"]["type"] == "MultiPolygon"
14+
15+
# get penama councils
16+
url = reverse("datasets:area-council-list", args=["penama"])
17+
req = self.client.get(url)
18+
assert req.status_code == status.HTTP_200_OK
19+
assert req.data.get("count") == 12
20+
assert (
21+
req.data.get("features")[0]["properties"]["name"] == "Central Pentecost 1"
22+
)
23+
assert req.data.get("features")[0]["geometry"]["type"] == "MultiPolygon"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django.urls.base import reverse
2+
from rest_framework import status
3+
from rest_framework.test import APITestCase
4+
5+
from vbos.datasets.models import Cluster
6+
7+
8+
class TestProvinceListView(APITestCase):
9+
def test_cluster_list_view(self):
10+
self.url = reverse("datasets:province-list")
11+
req = self.client.get(self.url)
12+
assert req.status_code == status.HTTP_200_OK
13+
assert req.data.get("count") == 6
14+
assert req.data.get("features")[0]["properties"]["name"] == "MALAMPA"
15+
assert req.data.get("features")[0]["geometry"]["type"] == "MultiPolygon"

vbos/datasets/urls.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
urlpatterns = [
88
# raster
99
path("cluster/", views.ClusterListView.as_view(), name="cluster-list"),
10+
path("province/", views.ProvinceListView.as_view(), name="province-list"),
11+
path(
12+
"area-council/<str:province>/",
13+
views.AreaCouncilListView.as_view(),
14+
name="area-council-list",
15+
),
1016
path("raster/", views.RasterDatasetListView.as_view(), name="raster-list"),
1117
path(
1218
"raster/<int:pk>/",

vbos/datasets/views.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
)
1515

1616
from .models import (
17+
AreaCouncil,
1718
Cluster,
19+
Province,
1820
RasterDataset,
1921
TabularDataset,
2022
TabularItem,
@@ -23,7 +25,9 @@
2325
)
2426
from .pagination import StandardResultsSetPagination
2527
from .serializers import (
28+
AreaCouncilSerializer,
2629
ClusterSerializer,
30+
ProvinceSerializer,
2731
RasterDatasetSerializer,
2832
TabularDatasetSerializer,
2933
TabularItemExcelSerializer,
@@ -40,6 +44,24 @@ class ClusterListView(ListAPIView):
4044
pagination_class = StandardResultsSetPagination
4145

4246

47+
class ProvinceListView(ListAPIView):
48+
queryset = Province.objects.all()
49+
serializer_class = ProvinceSerializer
50+
permission_classes = [IsAuthenticatedOrReadOnly]
51+
pagination_class = GeoJsonPagination
52+
53+
54+
class AreaCouncilListView(ListAPIView):
55+
serializer_class = AreaCouncilSerializer
56+
permission_classes = [IsAuthenticatedOrReadOnly]
57+
pagination_class = GeoJsonPagination
58+
59+
def get_queryset(self):
60+
return AreaCouncil.objects.filter(
61+
province__name__iexact=self.kwargs.get("province")
62+
)
63+
64+
4365
class RasterDatasetListView(ListAPIView):
4466
queryset = RasterDataset.objects.all()
4567
serializer_class = RasterDatasetSerializer

0 commit comments

Comments
 (0)