diff options
| -rw-r--r-- | api/admin.py | 8 | ||||
| -rw-r--r-- | api/migrations/0012_specialsnake.py | 22 | ||||
| -rw-r--r-- | api/models.py | 12 | ||||
| -rw-r--r-- | api/serializers.py | 15 | ||||
| -rw-r--r-- | api/tests/test_models.py | 4 | ||||
| -rw-r--r-- | api/urls.py | 10 | ||||
| -rw-r--r-- | api/viewsets.py | 16 | 
7 files changed, 71 insertions, 16 deletions
| diff --git a/api/admin.py b/api/admin.py index 829d74ed..13ba2db0 100644 --- a/api/admin.py +++ b/api/admin.py @@ -2,9 +2,10 @@ from django.contrib import admin  from .models import (      DocumentationLink, Member, -    OffTopicChannelName, Role, -    SnakeFact, SnakeIdiom, -    SnakeName, Tag +    OffTopicChannelName, Role,  +    SpecialSnake, SnakeFact,  +    SnakeIdiom, SnakeName,  +    Tag  ) @@ -15,4 +16,5 @@ admin.site.register(Role)  admin.site.register(SnakeFact)  admin.site.register(SnakeIdiom)  admin.site.register(SnakeName) +admin.site.register(SpecialSnake)  admin.site.register(Tag) diff --git a/api/migrations/0012_specialsnake.py b/api/migrations/0012_specialsnake.py new file mode 100644 index 00000000..9c6e8305 --- /dev/null +++ b/api/migrations/0012_specialsnake.py @@ -0,0 +1,22 @@ +# Generated by Django 2.1.2 on 2018-10-22 09:53 + +import api.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('api', '0011_auto_20181020_1904'), +    ] + +    operations = [ +        migrations.CreateModel( +            name='SpecialSnake', +            fields=[ +                ('name', models.CharField(max_length=140, primary_key=True, serialize=False)), +                ('info', models.TextField()), +            ], +            bases=(api.models.ModelReprMixin, models.Model), +        ), +    ] diff --git a/api/models.py b/api/models.py index bb520f8c..6571d16a 100644 --- a/api/models.py +++ b/api/models.py @@ -103,6 +103,18 @@ class SnakeName(ModelReprMixin, models.Model):          return f"{self.name} ({self.scientific})" +class SpecialSnake(ModelReprMixin, models.Model): +    """A special snake used by the bot's snake cog.""" + +    name = models.CharField( +        max_length=140, primary_key=True +        ) +    info = models.TextField() + +    def __str__(self): +        return self.name + +  class Role(ModelReprMixin, models.Model):      """A role on our Discord server.""" diff --git a/api/serializers.py b/api/serializers.py index 51d89425..683a6df5 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -2,10 +2,11 @@ from rest_framework.serializers import ModelSerializer, PrimaryKeyRelatedField  from rest_framework_bulk import BulkSerializerMixin  from .models import ( -    DocumentationLink, Member, -    OffTopicChannelName, Role, -    SnakeFact, SnakeIdiom, -    SnakeName, Tag +    DocumentationLink,  +    Member, OffTopicChannelName, +    Role, SnakeFact,  +    SnakeIdiom, SnakeName,  +    SpecialSnake, Tag  ) @@ -42,6 +43,12 @@ class SnakeNameSerializer(ModelSerializer):          fields = ('name', 'scientific') +class SpecialSnakeSerializer(ModelSerializer): +    class Meta: +        model = SpecialSnake +        fields = ('name', 'info',) + +  class RoleSerializer(ModelSerializer):      class Meta:          model = Role diff --git a/api/tests/test_models.py b/api/tests/test_models.py index af2ef5d5..009e5bd4 100644 --- a/api/tests/test_models.py +++ b/api/tests/test_models.py @@ -4,7 +4,8 @@ from ..models import (      DocumentationLink, Member, ModelReprMixin,      OffTopicChannelName, Role,      SnakeFact, SnakeIdiom, -    SnakeName, Tag +    SnakeName, SpecialSnake, +    Tag  ) @@ -32,6 +33,7 @@ class StringDunderMethodTests(SimpleTestCase):              SnakeFact(fact='snakes are cute'),              SnakeIdiom(idiom='snake snacks'),              SnakeName(name='python', scientific='3'), +            SpecialSnake(name='Pythagoras Pythonista', info='The only python snake that is born a triangle'),              Role(                  id=5, name='test role',                  colour=0x5, permissions=0 diff --git a/api/urls.py b/api/urls.py index 4f1b2455..c90c1a14 100644 --- a/api/urls.py +++ b/api/urls.py @@ -4,9 +4,9 @@ from rest_framework.routers import DefaultRouter  from .views import HealthcheckView  from .viewsets import (      DocumentationLinkViewSet, MemberViewSet, -    OffTopicChannelNameViewSet, SnakeFactViewSet, -    SnakeIdiomViewSet, SnakeNameViewSet, -    TagViewSet +    OffTopicChannelNameViewSet, SpecialSnakeViewSet, +    SnakeFactViewSet, SnakeIdiomViewSet, +    SnakeNameViewSet, TagViewSet  ) @@ -39,6 +39,10 @@ bot_router.register(      base_name='snakename'  )  bot_router.register( +    'special-snakes', +    SpecialSnakeViewSet, +) +bot_router.register(      'tags',      TagViewSet,  ) diff --git a/api/viewsets.py b/api/viewsets.py index 24c2aef9..098b34f6 100644 --- a/api/viewsets.py +++ b/api/viewsets.py @@ -11,15 +11,16 @@ from rest_framework_bulk import BulkCreateModelMixin  from .models import (      DocumentationLink, Member, -    OffTopicChannelName, SnakeFact, -    SnakeIdiom, SnakeName, +    OffTopicChannelName,  +    SnakeFact, SnakeIdiom, +    SpecialSnake, SnakeName,       Tag  )  from .serializers import ( +    OffTopicChannelNameSerializer,      DocumentationLinkSerializer, MemberSerializer, -    OffTopicChannelNameSerializer, SnakeFactSerializer, -    SnakeIdiomSerializer, SnakeNameSerializer, -    TagSerializer +    SnakeFactSerializer, SnakeIdiomSerializer,  +    SnakeNameSerializer, SpecialSnakeSerializer, TagSerializer  ) @@ -282,6 +283,11 @@ class SnakeNameViewSet(ViewSet):          return Response({}) +class SpecialSnakeViewSet(ListModelMixin, GenericViewSet): +    serializer_class = SpecialSnakeSerializer +    queryset = SpecialSnake.objects.all() + +  class TagViewSet(ModelViewSet):      """      View providing CRUD operations on tags shown by our bot. | 
