diff options
Diffstat (limited to 'api')
| -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. | 
