From abe64f3a7dda674d2ad3b83b70adf2fc91f3876a Mon Sep 17 00:00:00 2001 From: Josh Washburne Date: Wed, 28 Mar 2018 16:12:55 -0400 Subject: [PATCH] Add rudimentary API functionality. --- requirements.txt | 1 + savepointradio/api/__init__.py | 0 savepointradio/api/admin.py | 3 ++ savepointradio/api/apps.py | 5 +++ savepointradio/api/migrations/__init__.py | 0 savepointradio/api/models.py | 3 ++ savepointradio/api/serializers/__init__.py | 0 savepointradio/api/serializers/radio.py | 36 +++++++++++++++++++ savepointradio/api/tests.py | 3 ++ savepointradio/api/urls.py | 13 +++++++ savepointradio/api/views/__init__.py | 0 savepointradio/api/views/radio.py | 25 +++++++++++++ .../savepointradio/settings/base.py | 4 ++- savepointradio/savepointradio/urls.py | 1 + 14 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 savepointradio/api/__init__.py create mode 100644 savepointradio/api/admin.py create mode 100644 savepointradio/api/apps.py create mode 100644 savepointradio/api/migrations/__init__.py create mode 100644 savepointradio/api/models.py create mode 100644 savepointradio/api/serializers/__init__.py create mode 100644 savepointradio/api/serializers/radio.py create mode 100644 savepointradio/api/tests.py create mode 100644 savepointradio/api/urls.py create mode 100644 savepointradio/api/views/__init__.py create mode 100644 savepointradio/api/views/radio.py diff --git a/requirements.txt b/requirements.txt index 0f06aef..6e5bdfc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ dj-database-url>=0.4.2 Django>=2.0 django-authtools>=1.6.0 +djangorestframework>=3.7.7 psycopg2>=2.7.3.2 python-decouple>=3.1 pytz>=2017.3 diff --git a/savepointradio/api/__init__.py b/savepointradio/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/savepointradio/api/admin.py b/savepointradio/api/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/savepointradio/api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/savepointradio/api/apps.py b/savepointradio/api/apps.py new file mode 100644 index 0000000..d87006d --- /dev/null +++ b/savepointradio/api/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + name = 'api' diff --git a/savepointradio/api/migrations/__init__.py b/savepointradio/api/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/savepointradio/api/models.py b/savepointradio/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/savepointradio/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/savepointradio/api/serializers/__init__.py b/savepointradio/api/serializers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/savepointradio/api/serializers/radio.py b/savepointradio/api/serializers/radio.py new file mode 100644 index 0000000..521da61 --- /dev/null +++ b/savepointradio/api/serializers/radio.py @@ -0,0 +1,36 @@ +from rest_framework import serializers + +from radio.models import Album, Artist, Game, Song + + +class AlbumSerializer(serializers.ModelSerializer): + class Meta: + model = Album + fields = ('id', 'title') + + +class ArtistSerializer(serializers.ModelSerializer): + class Meta: + model = Artist + fields = ('id', 'alias', 'first_name', 'last_name') + + +class ArtistFullnameSerializer(serializers.ModelSerializer): + class Meta: + model = Artist + fields = ('id', 'full_name') + + +class GameSerializer(serializers.ModelSerializer): + class Meta: + model = Game + fields = ('id', 'title') + + +class SongSerializer(serializers.ModelSerializer): + artists = ArtistFullnameSerializer(many=True) + + class Meta: + model = Song + fields = ('id', 'album', 'artists', 'published_date', 'game', + 'num_played', 'last_played', 'length', 'song_type', 'title') diff --git a/savepointradio/api/tests.py b/savepointradio/api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/savepointradio/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/savepointradio/api/urls.py b/savepointradio/api/urls.py new file mode 100644 index 0000000..15f1eff --- /dev/null +++ b/savepointradio/api/urls.py @@ -0,0 +1,13 @@ +from rest_framework.routers import DefaultRouter + +from api.views.radio import (AlbumViewSet, ArtistViewSet, + GameViewSet, SongViewSet) + + +router = DefaultRouter() +router.register(r'albums', AlbumViewSet, base_name='album') +router.register(r'artists', ArtistViewSet, base_name='artist') +router.register(r'games', GameViewSet, base_name='game') +router.register(r'songs', SongViewSet, base_name='song') + +urlpatterns = router.urls diff --git a/savepointradio/api/views/__init__.py b/savepointradio/api/views/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/savepointradio/api/views/radio.py b/savepointradio/api/views/radio.py new file mode 100644 index 0000000..6fdf691 --- /dev/null +++ b/savepointradio/api/views/radio.py @@ -0,0 +1,25 @@ +from rest_framework import viewsets + +from radio.models import Album, Artist, Game, Song +from ..serializers.radio import (AlbumSerializer, ArtistSerializer, + GameSerializer, SongSerializer) + + +class AlbumViewSet(viewsets.ModelViewSet): + queryset = Album.objects.all() + serializer_class = AlbumSerializer + + +class ArtistViewSet(viewsets.ModelViewSet): + queryset = Artist.objects.all() + serializer_class = ArtistSerializer + + +class GameViewSet(viewsets.ModelViewSet): + queryset = Game.objects.all() + serializer_class = GameSerializer + + +class SongViewSet(viewsets.ModelViewSet): + queryset = Song.objects.all() + serializer_class = SongSerializer diff --git a/savepointradio/savepointradio/settings/base.py b/savepointradio/savepointradio/settings/base.py index ad6d135..7f7f93f 100644 --- a/savepointradio/savepointradio/settings/base.py +++ b/savepointradio/savepointradio/settings/base.py @@ -38,10 +38,12 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'authtools', + 'rest_framework', 'core.apps.CoreConfig', 'radio.apps.RadioConfig', - 'profiles.apps.ProfilesConfig' + 'profiles.apps.ProfilesConfig', + 'api.apps.ApiConfig', ] LANGUAGE_CODE = 'en-us' diff --git a/savepointradio/savepointradio/urls.py b/savepointradio/savepointradio/urls.py index d216a0a..5b8c5cb 100644 --- a/savepointradio/savepointradio/urls.py +++ b/savepointradio/savepointradio/urls.py @@ -4,4 +4,5 @@ from django.urls import include, path urlpatterns = [ path('accounts/', include('authtools.urls')), path('admin/', admin.site.urls), + path('api/', include('api.urls')), ]