diff options
author | 2018-10-17 19:50:23 +0000 | |
---|---|---|
committer | 2018-10-17 19:50:23 +0000 | |
commit | 7b0e0ce545238bfa21f710f983b595950a636b52 (patch) | |
tree | 66f92f9d6328e2ad4484bf412cebe3057af7056a | |
parent | Add `docker` tag to use proper runners. (diff) | |
parent | Merge branch 'django' of https://gitlab.com/python-discord/projects/site into... (diff) |
Merge branch 'snake_facts' into 'django'
Snake Facts API
See merge request python-discord/projects/site!41
-rw-r--r-- | api/admin.py | 4 | ||||
-rw-r--r-- | api/migrations/0009_snakefact.py | 21 | ||||
-rw-r--r-- | api/models.py | 13 | ||||
-rw-r--r-- | api/serializers.py | 9 | ||||
-rw-r--r-- | api/tests/test_models.py | 3 | ||||
-rw-r--r-- | api/urls.py | 6 | ||||
-rw-r--r-- | api/viewsets.py | 33 |
7 files changed, 81 insertions, 8 deletions
diff --git a/api/admin.py b/api/admin.py index 526bea52..1ce8d767 100644 --- a/api/admin.py +++ b/api/admin.py @@ -3,7 +3,8 @@ from django.contrib import admin from .models import ( DocumentationLink, Member, OffTopicChannelName, Role, - SnakeName, Tag + SnakeFact, SnakeName, + Tag ) @@ -11,5 +12,6 @@ admin.site.register(DocumentationLink) admin.site.register(Member) admin.site.register(OffTopicChannelName) admin.site.register(Role) +admin.site.register(SnakeFact) admin.site.register(SnakeName) admin.site.register(Tag) diff --git a/api/migrations/0009_snakefact.py b/api/migrations/0009_snakefact.py new file mode 100644 index 00000000..966478a9 --- /dev/null +++ b/api/migrations/0009_snakefact.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1.2 on 2018-10-11 14:25 + +import api.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0008_tag_embed_validator'), + ] + + operations = [ + migrations.CreateModel( + name='SnakeFact', + fields=[ + ('fact', models.CharField(help_text='A fact about snakes.', max_length=200, primary_key=True, serialize=False)), + ], + bases=(api.models.ModelReprMixin, models.Model), + ), + ] diff --git a/api/models.py b/api/models.py index e5ec7992..7c9b63f5 100644 --- a/api/models.py +++ b/api/models.py @@ -60,6 +60,19 @@ class OffTopicChannelName(ModelReprMixin, models.Model): return self.name +class SnakeFact(ModelReprMixin, models.Model): + """A snake fact used by the bot's snake cog.""" + + fact = models.CharField( + primary_key=True, + max_length=200, + help_text="A fact about snakes." + ) + + def __str__(self): + return self.fact + + class SnakeName(ModelReprMixin, models.Model): """A snake name used by the bot's snake cog.""" diff --git a/api/serializers.py b/api/serializers.py index c36cce5f..fe2ab2f1 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -4,7 +4,8 @@ from rest_framework_bulk import BulkSerializerMixin from .models import ( DocumentationLink, Member, OffTopicChannelName, Role, - SnakeName, Tag + SnakeFact, SnakeName, + Tag ) @@ -23,6 +24,12 @@ class OffTopicChannelNameSerializer(ModelSerializer): return obj.name +class SnakeFactSerializer(ModelSerializer): + class Meta: + model = SnakeFact + fields = ('fact',) + + class SnakeNameSerializer(ModelSerializer): class Meta: model = SnakeName diff --git a/api/tests/test_models.py b/api/tests/test_models.py index 3cf828d6..55009bf6 100644 --- a/api/tests/test_models.py +++ b/api/tests/test_models.py @@ -2,7 +2,7 @@ from django.test import SimpleTestCase from ..models import ( DocumentationLink, Member, ModelReprMixin, - OffTopicChannelName, Role, SnakeName, Tag + OffTopicChannelName, Role, SnakeFact, SnakeName, Tag ) @@ -27,6 +27,7 @@ class StringDunderMethodTests(SimpleTestCase): 'test', 'http://example.com', 'http://example.com' ), OffTopicChannelName(name='bob-the-builders-playground'), + SnakeFact(fact='snakes are cute'), SnakeName(name='python', scientific='3'), Role( id=5, name='test role', diff --git a/api/urls.py b/api/urls.py index 1648471c..40883c64 100644 --- a/api/urls.py +++ b/api/urls.py @@ -4,7 +4,7 @@ from rest_framework.routers import DefaultRouter from .views import HealthcheckView from .viewsets import ( DocumentationLinkViewSet, MemberViewSet, - OffTopicChannelNameViewSet, SnakeNameViewSet, + OffTopicChannelNameViewSet, SnakeFactViewSet, SnakeNameViewSet, TagViewSet ) @@ -25,6 +25,10 @@ bot_router.register( MemberViewSet ) bot_router.register( + 'snake-facts', + SnakeFactViewSet, +) +bot_router.register( 'snake-names', SnakeNameViewSet, base_name='snakename' diff --git a/api/viewsets.py b/api/viewsets.py index e3fa219c..22862c16 100644 --- a/api/viewsets.py +++ b/api/viewsets.py @@ -11,13 +11,13 @@ from rest_framework_bulk import BulkCreateModelMixin from .models import ( DocumentationLink, Member, - OffTopicChannelName, SnakeName, - Tag + OffTopicChannelName, SnakeFact, + SnakeName, Tag ) from .serializers import ( DocumentationLinkSerializer, MemberSerializer, - OffTopicChannelNameSerializer, SnakeNameSerializer, - TagSerializer + OffTopicChannelNameSerializer, SnakeFactSerializer, + SnakeNameSerializer, TagSerializer ) @@ -174,6 +174,31 @@ class OffTopicChannelNameViewSet(DestroyModelMixin, ViewSet): return Response(serialized.data) +class SnakeFactViewSet(ListModelMixin, GenericViewSet): + """ + View providing snake facts created by the Pydis community in the first code jam. + + ## Routes + ### GET /bot/snake-fact/<fact> + Returns a snake fact in the database. + + #### Response format + >>> [ + ... {'fact': 'Snakes are dangerous'}, + ... {'fact': 'Except for Python, we all love it'} + ... ] + + #### Status codes + - 200: returned on success + + ## Authentication + Requires an API token. + """ + + serializer_class = SnakeFactSerializer + queryset = SnakeFact.objects.all() + + class SnakeNameViewSet(ViewSet): """ View providing snake names for the bot's snake cog from our first code jam's winners. |