Skip to content

Commit 9e804e3

Browse files
committed
Added RestAPI to return information about signals
1 parent b63a374 commit 9e804e3

File tree

11 files changed

+83
-1
lines changed

11 files changed

+83
-1
lines changed

src/rest_api/__init__.py

Whitespace-only changes.

src/rest_api/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

src/rest_api/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class RestApiConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'rest_api'

src/rest_api/migrations/__init__.py

Whitespace-only changes.

src/rest_api/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.db import models
2+
3+
# Create your models here.

src/rest_api/serializers.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from rest_framework.serializers import ModelSerializer, SlugRelatedField
2+
3+
from signals.models import Signal
4+
5+
6+
class SignalSerializer(ModelSerializer):
7+
"""
8+
Serializer for the Signal model.
9+
"""
10+
11+
source = SlugRelatedField(read_only=True, slug_field="name")
12+
signal_type = SlugRelatedField(read_only=True, slug_field="name")
13+
available_geography = SlugRelatedField(many=True, read_only=True, slug_field="name")
14+
15+
class Meta:
16+
model = Signal
17+
fields = [
18+
"name",
19+
"source",
20+
"signal_type",
21+
"available_geography",
22+
]

src/rest_api/urls.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.urls import path
2+
from django.urls.resolvers import URLPattern
3+
4+
from rest_api.views import api_signal_detail_view
5+
6+
7+
urlpatterns: list[URLPattern] = [
8+
path("signal/<int:pk>", api_signal_detail_view, name="api_signal_detail"),
9+
]

src/rest_api/views.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from rest_framework.decorators import api_view
2+
from rest_framework.response import Response
3+
4+
from rest_api.serializers import SignalSerializer
5+
from signals.models import Signal
6+
7+
8+
@api_view(
9+
[
10+
"GET",
11+
]
12+
)
13+
def api_signal_detail_view(request, pk):
14+
"""
15+
API view for getting a single Signal object.
16+
17+
Args:
18+
request: The request object.
19+
pk: The primary key of the Signal object.
20+
21+
Returns:
22+
Response: The response object.
23+
"""
24+
25+
try:
26+
signal = Signal.objects.get(pk=pk)
27+
except Signal.DoesNotExist:
28+
return Response(status=404)
29+
30+
if request.method == "GET":
31+
serializer = SignalSerializer(signal)
32+
return Response(serializer.data)

src/signal_documentation/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
'datasources',
106106
'signals',
107107
'signal_sets',
108+
'rest_api',
108109
]
109110

110111
INSTALLED_APPS: list[str] = DEFAULT_APPS + EXTERNAL_APPS + LOCAL_APPS

src/signal_documentation/urls.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,14 @@
4747
),
4848
# datasources
4949
path(
50-
f"{settings.MAIN_PAGE}/datasources/" if settings.MAIN_PAGE else "datasources",
50+
f"{settings.MAIN_PAGE}/datasources/" if settings.MAIN_PAGE else "datasources/",
5151
include("datasources.urls"),
5252
),
53+
# rest_api
54+
path(
55+
f"{settings.MAIN_PAGE}/rest_api/" if settings.MAIN_PAGE else "rest_api/",
56+
include("rest_api.urls"),
57+
),
5358
path("__debug__/", include("debug_toolbar.urls")),
5459
]
5560

0 commit comments

Comments
 (0)