diff options
Diffstat (limited to 'api')
| -rw-r--r-- | api/admin.py | 5 | ||||
| -rw-r--r-- | api/migrations/0010_snakeidiom.py | 21 | ||||
| -rw-r--r-- | api/models.py | 13 | ||||
| -rw-r--r-- | api/serializers.py | 8 | ||||
| -rw-r--r-- | api/tests/test_models.py | 5 | ||||
| -rw-r--r-- | api/urls.py | 7 | ||||
| -rw-r--r-- | api/viewsets.py | 31 | 
7 files changed, 82 insertions, 8 deletions
| diff --git a/api/admin.py b/api/admin.py index 1ce8d767..829d74ed 100644 --- a/api/admin.py +++ b/api/admin.py @@ -3,8 +3,8 @@ from django.contrib import admin  from .models import (      DocumentationLink, Member,      OffTopicChannelName, Role, -    SnakeFact, SnakeName, -    Tag +    SnakeFact, SnakeIdiom, +    SnakeName, Tag  ) @@ -13,5 +13,6 @@ admin.site.register(Member)  admin.site.register(OffTopicChannelName)  admin.site.register(Role)  admin.site.register(SnakeFact) +admin.site.register(SnakeIdiom)  admin.site.register(SnakeName)  admin.site.register(Tag) diff --git a/api/migrations/0010_snakeidiom.py b/api/migrations/0010_snakeidiom.py new file mode 100644 index 00000000..982a9466 --- /dev/null +++ b/api/migrations/0010_snakeidiom.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1.2 on 2018-10-19 16:27 + +import api.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('api', '0009_snakefact'), +    ] + +    operations = [ +        migrations.CreateModel( +            name='SnakeIdiom', +            fields=[ +                ('idiom', models.CharField(help_text='A snake idiom', max_length=140, primary_key=True, serialize=False)), +            ], +            bases=(api.models.ModelReprMixin, models.Model), +        ), +    ] diff --git a/api/models.py b/api/models.py index 7c9b63f5..81cd63aa 100644 --- a/api/models.py +++ b/api/models.py @@ -73,6 +73,19 @@ class SnakeFact(ModelReprMixin, models.Model):          return self.fact +class SnakeIdiom(ModelReprMixin, models.Model): +    """A snake idiom used by the snake cog.""" + +    idiom = models.CharField( +        primary_key=True, +        max_length=140, +        help_text="A snake idiom" +    ) + +    def __str__(self): +        return self.idiom + +  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 fe2ab2f1..fae5abd9 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -4,7 +4,7 @@ from rest_framework_bulk import BulkSerializerMixin  from .models import (      DocumentationLink, Member,      OffTopicChannelName, Role, -    SnakeFact, SnakeName, +    SnakeFact, SnakeIdiom, SnakeName,      Tag  ) @@ -30,6 +30,12 @@ class SnakeFactSerializer(ModelSerializer):          fields = ('fact',) +class SnakeIdiomSerializer(ModelSerializer): +    class Meta: +        model = SnakeIdiom +        fields = ('idiom',) + +  class SnakeNameSerializer(ModelSerializer):      class Meta:          model = SnakeName diff --git a/api/tests/test_models.py b/api/tests/test_models.py index 55009bf6..af2ef5d5 100644 --- a/api/tests/test_models.py +++ b/api/tests/test_models.py @@ -2,7 +2,9 @@ from django.test import SimpleTestCase  from ..models import (      DocumentationLink, Member, ModelReprMixin, -    OffTopicChannelName, Role, SnakeFact, SnakeName, Tag +    OffTopicChannelName, Role, +    SnakeFact, SnakeIdiom, +    SnakeName, Tag  ) @@ -28,6 +30,7 @@ class StringDunderMethodTests(SimpleTestCase):              ),              OffTopicChannelName(name='bob-the-builders-playground'),              SnakeFact(fact='snakes are cute'), +            SnakeIdiom(idiom='snake snacks'),              SnakeName(name='python', scientific='3'),              Role(                  id=5, name='test role', diff --git a/api/urls.py b/api/urls.py index 40883c64..4f1b2455 100644 --- a/api/urls.py +++ b/api/urls.py @@ -4,7 +4,8 @@ from rest_framework.routers import DefaultRouter  from .views import HealthcheckView  from .viewsets import (      DocumentationLinkViewSet, MemberViewSet, -    OffTopicChannelNameViewSet, SnakeFactViewSet, SnakeNameViewSet, +    OffTopicChannelNameViewSet, SnakeFactViewSet, +    SnakeIdiomViewSet, SnakeNameViewSet,      TagViewSet  ) @@ -29,6 +30,10 @@ bot_router.register(      SnakeFactViewSet,  )  bot_router.register( +    'snake-idioms', +    SnakeIdiomViewSet +) +bot_router.register(      'snake-names',      SnakeNameViewSet,      base_name='snakename' diff --git a/api/viewsets.py b/api/viewsets.py index c65cbac6..e633c8b7 100644 --- a/api/viewsets.py +++ b/api/viewsets.py @@ -12,12 +12,14 @@ from rest_framework_bulk import BulkCreateModelMixin  from .models import (      DocumentationLink, Member,      OffTopicChannelName, SnakeFact, -    SnakeName, Tag +    SnakeIdiom, SnakeName, +    Tag  )  from .serializers import (      DocumentationLinkSerializer, MemberSerializer,      OffTopicChannelNameSerializer, SnakeFactSerializer, -    SnakeNameSerializer, TagSerializer +    SnakeIdiomSerializer, SnakeNameSerializer, +    TagSerializer  ) @@ -179,7 +181,7 @@ class SnakeFactViewSet(ListModelMixin, GenericViewSet):      View providing snake facts created by the Pydis community in the first code jam.      ## Routes -    ### GET /bot/snake-fact/<fact> +    ### GET /bot/snake-facts      Returns a snake fact in the database.      #### Response format @@ -199,6 +201,29 @@ class SnakeFactViewSet(ListModelMixin, GenericViewSet):      queryset = SnakeFact.objects.all() +class SnakeIdiomViewSet(ListModelMixin, GenericViewSet): +    """ +    View providing snake idioms for the snake cog. + +    ## Routes +    ### GET /bot/snake-idioms +    Returns a snake idiom in the database. + +    #### Response format +    >>> [ +    ...    {'idiom': 'Sneky snek'}, +    ...    {'idiom': 'Snooky Snake'} +    ... ] +    #### Status codes +    - 200: returned on success +    ## Authentication +    Requires and API token +    """ + +    serializer_class = SnakeIdiomSerializer +    queryset = SnakeIdiom.objects.all() + +  class SnakeNameViewSet(ViewSet):      """      View providing snake names for the bot's snake cog from our first code jam's winners. | 
