diff options
| -rw-r--r-- | api/admin.py | 3 | ||||
| -rw-r--r-- | api/migrations/0009_snakefact.py | 21 | ||||
| -rw-r--r-- | api/models.py | 13 | ||||
| -rw-r--r-- | api/serializers.py | 8 | ||||
| -rw-r--r-- | api/urls.py | 6 | ||||
| -rw-r--r-- | api/viewsets.py | 29 | 
6 files changed, 75 insertions, 5 deletions
| diff --git a/api/admin.py b/api/admin.py index 526bea52..1d152b9e 100644 --- a/api/admin.py +++ b/api/admin.py @@ -3,7 +3,7 @@ from django.contrib import admin  from .models import (      DocumentationLink, Member,      OffTopicChannelName, Role, -    SnakeName, Tag +    SnakeName, Tag, SnakeFact,  ) @@ -13,3 +13,4 @@ admin.site.register(OffTopicChannelName)  admin.site.register(Role)  admin.site.register(SnakeName)  admin.site.register(Tag) +admin.site.register(SnakeFact) 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..32f978d4 100644 --- a/api/models.py +++ b/api/models.py @@ -77,6 +77,19 @@ class SnakeName(ModelReprMixin, models.Model):          return f"{self.name} ({self.scientific})" +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 f"{self.fact}" + +  class Role(ModelReprMixin, models.Model):      """A role on our Discord server.""" diff --git a/api/serializers.py b/api/serializers.py index c36cce5f..900fa8b8 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, -    SnakeName, Tag +    SnakeName, Tag, SnakeFact,  ) @@ -29,6 +29,12 @@ class SnakeNameSerializer(ModelSerializer):          fields = ('name', 'scientific') +class SnakeFactSerializer(ModelSerializer): +    class Meta: +        model = SnakeFact +        fields = ('fact',) + +  class RoleSerializer(ModelSerializer):      class Meta:          model = Role diff --git a/api/urls.py b/api/urls.py index 1648471c..38508d38 100644 --- a/api/urls.py +++ b/api/urls.py @@ -5,7 +5,7 @@ from .views import HealthcheckView  from .viewsets import (      DocumentationLinkViewSet, MemberViewSet,      OffTopicChannelNameViewSet, SnakeNameViewSet, -    TagViewSet +    TagViewSet, SnakeFactViewSet  ) @@ -33,6 +33,10 @@ bot_router.register(      'tags',      TagViewSet,  ) +bot_router.register( +    'snake-fact', +    SnakeFactViewSet, +)  app_name = 'api'  urlpatterns = ( diff --git a/api/viewsets.py b/api/viewsets.py index e3fa219c..29eb5782 100644 --- a/api/viewsets.py +++ b/api/viewsets.py @@ -12,12 +12,12 @@ from rest_framework_bulk import BulkCreateModelMixin  from .models import (      DocumentationLink, Member,      OffTopicChannelName, SnakeName, -    Tag +    Tag, SnakeFact,  )  from .serializers import (      DocumentationLinkSerializer, MemberSerializer,      OffTopicChannelNameSerializer, SnakeNameSerializer, -    TagSerializer +    TagSerializer, SnakeFactSerializer  ) @@ -230,6 +230,31 @@ class SnakeNameViewSet(ViewSet):          return Response({}) +class SnakeFactViewSet(RetrieveModelMixin, 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 TagViewSet(ModelViewSet):      """      View providing CRUD operations on tags shown by our bot. | 
