aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2018-10-21 20:22:11 +0000
committerGravatar Johannes Christ <[email protected]>2018-10-21 20:22:11 +0000
commit0232d1a8b4a00c3e03153f0820810397effc9285 (patch)
treeed6ba70cc3801be8cc513883a532a415f4639e3a
parentDrop extra whitespace. (diff)
parentfixed linting issues (diff)
Merge branch 'snake_idioms' into 'django'
Snake idioms API See merge request python-discord/projects/site!44
-rw-r--r--api/admin.py5
-rw-r--r--api/migrations/0010_snakeidiom.py21
-rw-r--r--api/migrations/0011_auto_20181020_1904.py18
-rw-r--r--api/models.py13
-rw-r--r--api/serializers.py10
-rw-r--r--api/tests/test_models.py5
-rw-r--r--api/urls.py7
-rw-r--r--api/viewsets.py35
8 files changed, 104 insertions, 10 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/migrations/0011_auto_20181020_1904.py b/api/migrations/0011_auto_20181020_1904.py
new file mode 100644
index 00000000..bb5a6325
--- /dev/null
+++ b/api/migrations/0011_auto_20181020_1904.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.1.2 on 2018-10-20 19:04
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0010_snakeidiom'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='snakeidiom',
+ name='idiom',
+ field=models.CharField(help_text='A saying about a snake.', max_length=140, primary_key=True, serialize=False),
+ ),
+ ]
diff --git a/api/models.py b/api/models.py
index 7c9b63f5..bb520f8c 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 saying about a snake."
+ )
+
+ 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..51d89425 100644
--- a/api/serializers.py
+++ b/api/serializers.py
@@ -4,8 +4,8 @@ from rest_framework_bulk import BulkSerializerMixin
from .models import (
DocumentationLink, Member,
OffTopicChannelName, Role,
- SnakeFact, SnakeName,
- Tag
+ 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..24c2aef9 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,8 +181,8 @@ class SnakeFactViewSet(ListModelMixin, 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.
+ ### GET /bot/snake-facts
+ Returns snake facts from the database.
#### Response format
>>> [
@@ -199,6 +201,31 @@ class SnakeFactViewSet(ListModelMixin, GenericViewSet):
queryset = SnakeFact.objects.all()
+class SnakeIdiomViewSet(ListModelMixin, GenericViewSet):
+ """
+ View providing for the snake cog.
+
+ ## Routes
+ ### GET /bot/snake-idioms
+ Returns snake idioms from the database.
+
+ #### Response format
+ >>> [
+ ... {'idiom': 'Sneky snek'},
+ ... {'idiom': 'Snooky Snake'}
+ ... ]
+
+ #### Status codes
+ - 200: returned on success
+
+ ## Authentication
+ Requires an 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.