Skip to content

Commit a2d5ed8

Browse files
committed
Added data preview/plot/export section to the signal set detailed view page
1 parent 9e804e3 commit a2d5ed8

File tree

5 files changed

+385
-12
lines changed

5 files changed

+385
-12
lines changed

src/rest_api/serializers.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from rest_framework.serializers import ModelSerializer, SlugRelatedField
22

3-
from signals.models import Signal
3+
from signals.models import Signal, Geography
44

55

66
class SignalSerializer(ModelSerializer):
@@ -14,9 +14,14 @@ class SignalSerializer(ModelSerializer):
1414

1515
class Meta:
1616
model = Signal
17-
fields = [
18-
"name",
19-
"source",
20-
"signal_type",
21-
"available_geography",
22-
]
17+
fields = ["name", "source", "signal_type", "available_geography", "time_type"]
18+
19+
20+
class AvailableGeographySerializer(ModelSerializer):
21+
"""
22+
Serializer for the AvailableGeography model.
23+
"""
24+
25+
class Meta:
26+
model = Geography
27+
fields = ["name", "display_name"]

src/rest_api/urls.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
from django.urls import path
22
from django.urls.resolvers import URLPattern
33

4-
from rest_api.views import api_signal_detail_view
4+
from rest_api.views import api_signal_detail_view, api_available_geography_view
55

66

77
urlpatterns: list[URLPattern] = [
8-
path("signal/<int:pk>", api_signal_detail_view, name="api_signal_detail"),
8+
path("rest_api/signal/<int:pk>", api_signal_detail_view, name="api_signal_detail"),
9+
path("rest_api/signal/", api_signal_detail_view, name="api_signal_detail"),
10+
path("rest_api/geo_level/<int:pk>", api_available_geography_view, name="api_available_geography_detail"),
11+
path("rest_api/geo_level/", api_available_geography_view, name="api_available_geography_detail")
912
]

src/rest_api/views.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from rest_framework.decorators import api_view
22
from rest_framework.response import Response
33

4-
from rest_api.serializers import SignalSerializer
5-
from signals.models import Signal
4+
from rest_api.serializers import SignalSerializer, AvailableGeographySerializer
5+
from signals.models import Signal, Geography
66

77

88
@api_view(
@@ -30,3 +30,30 @@ def api_signal_detail_view(request, pk):
3030
if request.method == "GET":
3131
serializer = SignalSerializer(signal)
3232
return Response(serializer.data)
33+
34+
35+
@api_view(
36+
[
37+
"GET",
38+
]
39+
)
40+
def api_available_geography_view(request, pk):
41+
"""
42+
API view for getting a single Geography.
43+
44+
Args:
45+
request: The request object.
46+
pk: The primary key of the Geography object.
47+
48+
Returns:
49+
Response: The response object.
50+
"""
51+
52+
try:
53+
geography = Geography.objects.get(pk=pk)
54+
except Geography.DoesNotExist:
55+
return Response(status=404)
56+
57+
if request.method == "GET":
58+
serializer = AvailableGeographySerializer(geography)
59+
return Response(serializer.data)

src/signal_sets/views.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import logging
22
from typing import Any, Dict
33

4+
from django.conf import settings
45
from django.db.models.query import QuerySet
56
from django.views.generic import ListView, DetailView
67

8+
9+
from signals.models import Geography
710
from signal_sets.models import SignalSet
811
from signal_sets.filters import SignalSetFilter
912
from signal_sets.forms import SignalSetFilterForm
@@ -40,7 +43,9 @@ def get_url_params(self):
4043
else None
4144
),
4245
"data_source": [el for el in self.request.GET.getlist("data_source")],
43-
"temporal_granularity": [el for el in self.request.GET.getlist("temporal_granularity")],
46+
"temporal_granularity": [
47+
el for el in self.request.GET.getlist("temporal_granularity")
48+
],
4449
}
4550
url_params_str = ""
4651
for param_name, param_value in url_params_dict.items():
@@ -72,4 +77,22 @@ class SignalSetDetailedView(DetailView):
7277

7378
def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
7479
context: Dict[str, Any] = super().get_context_data(**kwargs)
80+
context["epivis_url"] = settings.EPIVIS_URL
81+
context["data_export_url"] = settings.DATA_EXPORT_URL
82+
context["covidcast_url"] = settings.COVIDCAST_URL
83+
context["data_source"] = (
84+
self.object.signals.all()
85+
.values_list("source__name", flat=True)
86+
.distinct()
87+
.order_by()
88+
.first()
89+
)
90+
context["available_geographies"] = Geography.objects.filter(
91+
id__in=self.object.signals.all()
92+
.values_list("available_geography")
93+
.distinct()
94+
.order_by()
95+
)
96+
context["time_type"] = self.object.signals.all().values_list("time_type", flat=True).distinct().order_by().first()
97+
7598
return context

0 commit comments

Comments
 (0)