diff --git a/Makefile b/Makefile index c8030b98..41c87b59 100755 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ install: - sudo pip install -r requirements.txt + pip install -r requirements.txt --upgrade setup: python manage.py migrate --settings=config.local - python manage.py loaddata dev_data.json --settings=config.local + python manage.py loaddata dev-data.json --settings=config.local wipe_db: rm -rf db.sqlite3 diff --git a/config/settings.py b/config/settings.py index fd955f9f..3e2e2c08 100755 --- a/config/settings.py +++ b/config/settings.py @@ -114,7 +114,7 @@ SECRET_KEY = os.environ.get( CUSTOM_APPS = ( 'tastypie', - # 'pokemon', + 'pokemon', 'pokemon_v2', 'hits', ) @@ -128,7 +128,7 @@ INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.humanize', 'corsheaders', - 'rest_framework' + 'rest_framework', ) + CUSTOM_APPS diff --git a/config/urls.py b/config/urls.py index 075b3b76..d97429e2 100755 --- a/config/urls.py +++ b/config/urls.py @@ -6,7 +6,6 @@ from django.conf.urls import patterns, include, url from django.conf.urls.static import static from django.views.generic import TemplateView -# Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() @@ -22,6 +21,14 @@ from pokemon.api import ( PokedexResource ) +from rest_framework import routers + +from pokemon_v2 import views + +router = routers.DefaultRouter() + +router.register(r"sprites", views.SpriteResource) + from tastypie.api import Api api_resources = Api() @@ -44,13 +51,13 @@ api_resources.register(PokedexResource()) from rest_framework import routers from pokemon_v2.views import ( - AbilityResource, TestResource + AbilityResource, SpriteResource ) router = routers.DefaultRouter() router.register(r"ability", AbilityResource) -router.register(r"test", TestResource) +router.register(r"sprite", SpriteResource) ########################### diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index 4bb0df60..5b861436 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -1,10 +1,63 @@ + +from __future__ import unicode_literals from rest_framework import serializers -from pokemon_v2.models import ( - Ability + +""" +PokeAPI v2 serializers +""" + +from pokemon.models import ( + Sprite +) + +from .models import ( + Ability, + Move, + Nature, + Type ) class AbilitySerializer(serializers.HyperlinkedModelSerializer): + """ + Serializer for the Ability resource + """ + class Meta: model = Ability - fields = ('id', 'name', 'generation', 'is_main_series') + + +class MoveSerializer(serializers.HyperlinkedModelSerializer): + """ + Serializer for the Move resource + """ + + class Meta: + model = Move + + +class NatureSerializer(serializers.HyperlinkedModelSerializer): + """ + Serializer for the Nature resource + """ + + class Meta: + model = Nature + + +class SpriteSerializer(serializers.HyperlinkedModelSerializer): + """ + Serializer for the Type resource + """ + + class Meta: + model = Sprite + + +class TypeSerializer(serializers.HyperlinkedModelSerializer): + """ + Serializer for the Type resource + """ + + class Meta: + model = Type diff --git a/pokemon_v2/tests.py b/pokemon_v2/tests.py index 5f97b7e7..8767759a 100644 --- a/pokemon_v2/tests.py +++ b/pokemon_v2/tests.py @@ -1,6 +1,11 @@ from __future__ import unicode_literals from django.test import TestCase +from pokemon.models import Sprite + +from rest_framework import status +from rest_framework.test import APIClient + class HeaderTest(TestCase): @@ -13,3 +18,62 @@ class HeaderTest(TestCase): self.assertEqual(response['Access-Control-Allow-Origin'], '*') + +class SpriteV2Resource(TestCase): + """ + All tests for the Sprite V2 resource. + """ + + @classmethod + def setUpClass(self): + self.client = APIClient() + + def test_get_sprite(self): + """ + Get a single sprite. + """ + + sp = Sprite.objects.create( + name='test_sprite_image', + image='image_url.jpg' + ) + sp.save() + + url = '/api/v2/sprites/{}/'.format(sp.pk) + response = self.client.get(url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data['name'], sp.name) + + + def test_get_sprite_not_found(self): + """ + Get a single sprite that doesn't exist, expects a 404 response + """ + + + url = '/api/v2/sprites/{}/'.format(12344556) + response = self.client.get(url) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + + def test_get_all_sprites(self): + """ + Try to get all the sprites! + """ + + sp = Sprite.objects.create( + name='test_sprite_image', + image='image_url.jpg' + ) + sp.save() + + sp_2 = Sprite.objects.create( + name='test_sprite_image_two', + image='image_url_second.jpg' + ) + sp_2.save() + + url = '/api/v2/sprites/' + response = self.client.get(url) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(len(response.data), 2) diff --git a/pokemon_v2/views.py b/pokemon_v2/views.py index 2a3678f9..3e3766e0 100644 --- a/pokemon_v2/views.py +++ b/pokemon_v2/views.py @@ -1,30 +1,32 @@ -# from __future__ import unicode_literals -# from django.http import HttpResponse -# -from rest_framework.renderers import JSONRenderer -from rest_framework import viewsets -from rest_framework.decorators import api_view -from rest_framework.response import Response -from pokemon_v2.serializers import ( - AbilitySerializer +from __future__ import unicode_literals +from rest_framework import viewsets + +from pokemon.models import ( + + Sprite ) -from pokemon_v2.models import ( +from .models import ( Ability ) +from .serializers import ( + AbilitySerializer, SpriteSerializer +) + +class SpriteResource(viewsets.ReadOnlyModelViewSet): + """ + Views for the Sprite V2 Resource + """ + + queryset = Sprite.objects.all() + serializer_class = SpriteSerializer class AbilityResource(viewsets.ReadOnlyModelViewSet): + """ + Views for the Ability V2 Resource + """ + queryset = Ability.objects.all() serializer_class = AbilitySerializer - - -# @api_view(['GET', 'POST']) -class TestResource(): - - queryset = Ability.objects.all() - serializer_class = AbilitySerializer - - def get(self, request, pk, format=None): - return Response("hello Test") diff --git a/requirements.txt b/requirements.txt index 654de8ba..f198ed6f 100755 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ django-cors-headers==1.0.0 django-discover-runner==0.4 django-imagekit==3.2.4 django-tastypie==0.12.1 -djangorestframework==3.0.0 +djangorestframework>=3.0.0 gunicorn==0.17.0 mimeparse==0.1.3 pilkit==1.1.12