aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorGravatar Hasan-Ahmad <[email protected]>2018-10-11 16:14:34 +0100
committerGravatar Hasan-Ahmad <[email protected]>2018-10-11 16:14:34 +0100
commit2ae5f5205ec19dbc1574b6136da9479e080c6ba2 (patch)
tree9059566c30cc1e4f1496d2b750eb6cc8f0795013 /api
parentUse proper keyword argument. (diff)
Added snake facts api
Diffstat (limited to 'api')
-rw-r--r--api/admin.py3
-rw-r--r--api/migrations/0009_snakefact.py21
-rw-r--r--api/models.py13
-rw-r--r--api/serializers.py8
-rw-r--r--api/urls.py6
-rw-r--r--api/viewsets.py29
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.