diff options
author | 2018-10-11 16:14:34 +0100 | |
---|---|---|
committer | 2018-10-11 16:14:34 +0100 | |
commit | 2ae5f5205ec19dbc1574b6136da9479e080c6ba2 (patch) | |
tree | 9059566c30cc1e4f1496d2b750eb6cc8f0795013 /api | |
parent | Use proper keyword argument. (diff) |
Added snake facts api
Diffstat (limited to 'api')
-rw-r--r-- | api/admin.py | 3 | ||||
-rw-r--r-- | api/migrations/0009_snakefact.py | 21 | ||||
-rw-r--r-- | api/models.py | 13 | ||||
-rw-r--r-- | api/serializers.py | 8 | ||||
-rw-r--r-- | api/urls.py | 6 | ||||
-rw-r--r-- | api/viewsets.py | 29 |
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. |