diff options
author | 2018-10-22 11:22:48 +0100 | |
---|---|---|
committer | 2018-10-22 11:22:48 +0100 | |
commit | 0766dab8306d24b22550e1a4a054ff3f2956a0b1 (patch) | |
tree | a3503b68c70154a1cad8b454ccf4269b560c2136 /api | |
parent | fixed linting issues (diff) |
Added special snakes api
Diffstat (limited to 'api')
-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. |