aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorGravatar Hasan-Ahmad <[email protected]>2018-10-22 11:22:48 +0100
committerGravatar Hasan-Ahmad <[email protected]>2018-10-22 11:22:48 +0100
commit0766dab8306d24b22550e1a4a054ff3f2956a0b1 (patch)
treea3503b68c70154a1cad8b454ccf4269b560c2136 /api
parentfixed linting issues (diff)
Added special snakes api
Diffstat (limited to 'api')
-rw-r--r--api/admin.py8
-rw-r--r--api/migrations/0012_specialsnake.py22
-rw-r--r--api/models.py12
-rw-r--r--api/serializers.py15
-rw-r--r--api/tests/test_models.py4
-rw-r--r--api/urls.py10
-rw-r--r--api/viewsets.py16
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.