diff options
-rw-r--r-- | pydis_site/apps/api/admin.py | 9 | ||||
-rw-r--r-- | pydis_site/apps/api/migrations/0036_removing_snake_apis.py | 25 | ||||
-rw-r--r-- | pydis_site/apps/api/models/__init__.py | 4 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/__init__.py | 4 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/snake_fact.py | 17 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/snake_idiom.py | 17 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/snake_name.py | 24 | ||||
-rw-r--r-- | pydis_site/apps/api/models/bot/special_snake.py | 27 | ||||
-rw-r--r-- | pydis_site/apps/api/serializers.py | 42 | ||||
-rw-r--r-- | pydis_site/apps/api/tests/test_models.py | 12 | ||||
-rw-r--r-- | pydis_site/apps/api/tests/test_snake_names.py | 67 | ||||
-rw-r--r-- | pydis_site/apps/api/urls.py | 23 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/__init__.py | 4 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/__init__.py | 4 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/snake_fact.py | 30 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/snake_idiom.py | 30 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/snake_name.py | 67 | ||||
-rw-r--r-- | pydis_site/apps/api/viewsets/bot/special_snake.py | 33 |
18 files changed, 28 insertions, 411 deletions
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py index 3ae7f3c5..b6021f7c 100644 --- a/pydis_site/apps/api/admin.py +++ b/pydis_site/apps/api/admin.py @@ -4,10 +4,7 @@ from .models import ( BotSetting, DeletedMessage, DocumentationLink, Infraction, MessageDeletionContext, OffTopicChannelName, - Role, SnakeFact, - SnakeIdiom, SnakeName, - SpecialSnake, Tag, - User + Role, Tag, User ) @@ -18,9 +15,5 @@ admin.site.register(Infraction) admin.site.register(MessageDeletionContext) admin.site.register(OffTopicChannelName) admin.site.register(Role) -admin.site.register(SnakeFact) -admin.site.register(SnakeIdiom) -admin.site.register(SnakeName) -admin.site.register(SpecialSnake) admin.site.register(Tag) admin.site.register(User) diff --git a/pydis_site/apps/api/migrations/0036_removing_snake_apis.py b/pydis_site/apps/api/migrations/0036_removing_snake_apis.py new file mode 100644 index 00000000..624afc95 --- /dev/null +++ b/pydis_site/apps/api/migrations/0036_removing_snake_apis.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.3 on 2019-07-10 09:07 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0035_create_table_log_entry'), + ] + + operations = [ + migrations.DeleteModel( + name='SnakeFact', + ), + migrations.DeleteModel( + name='SnakeIdiom', + ), + migrations.DeleteModel( + name='SnakeName', + ), + migrations.DeleteModel( + name='SpecialSnake', + ), + ] diff --git a/pydis_site/apps/api/models/__init__.py b/pydis_site/apps/api/models/__init__.py index 4645bda2..a7eccb04 100644 --- a/pydis_site/apps/api/models/__init__.py +++ b/pydis_site/apps/api/models/__init__.py @@ -9,10 +9,6 @@ from .bot import ( # noqa OffTopicChannelName, Reminder, Role, - SnakeFact, - SnakeIdiom, - SnakeName, - SpecialSnake, Tag, User ) diff --git a/pydis_site/apps/api/models/bot/__init__.py b/pydis_site/apps/api/models/bot/__init__.py index fb313193..b805924a 100644 --- a/pydis_site/apps/api/models/bot/__init__.py +++ b/pydis_site/apps/api/models/bot/__init__.py @@ -8,9 +8,5 @@ from .nomination import Nomination # noqa from .off_topic_channel_name import OffTopicChannelName # noqa from .reminder import Reminder # noqa from .role import Role # noqa -from .snake_fact import SnakeFact # noqa -from .snake_idiom import SnakeIdiom # noqa -from .snake_name import SnakeName # noqa -from .special_snake import SpecialSnake # noqa from .tag import Tag # noqa from .user import User # noqa diff --git a/pydis_site/apps/api/models/bot/snake_fact.py b/pydis_site/apps/api/models/bot/snake_fact.py deleted file mode 100644 index e4486d41..00000000 --- a/pydis_site/apps/api/models/bot/snake_fact.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - -from pydis_site.apps.api.models.utils import ModelReprMixin - - -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): - """Returns the current snake fact, for display purposes.""" - return self.fact diff --git a/pydis_site/apps/api/models/bot/snake_idiom.py b/pydis_site/apps/api/models/bot/snake_idiom.py deleted file mode 100644 index 73ce25eb..00000000 --- a/pydis_site/apps/api/models/bot/snake_idiom.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.db import models - -from pydis_site.apps.api.models.utils import ModelReprMixin - - -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): - """Returns the current idiom, for display purposes.""" - return self.idiom diff --git a/pydis_site/apps/api/models/bot/snake_name.py b/pydis_site/apps/api/models/bot/snake_name.py deleted file mode 100644 index 6d33f872..00000000 --- a/pydis_site/apps/api/models/bot/snake_name.py +++ /dev/null @@ -1,24 +0,0 @@ -from django.core.validators import RegexValidator -from django.db import models - -from pydis_site.apps.api.models.utils import ModelReprMixin - - -class SnakeName(ModelReprMixin, models.Model): - """A snake name used by the bot's snake cog.""" - - name = models.CharField( - primary_key=True, - max_length=100, - help_text="The regular name for this snake, e.g. 'Python'.", - validators=[RegexValidator(regex=r'^([^0-9])+$')] - ) - scientific = models.CharField( - max_length=150, - help_text="The scientific name for this snake, e.g. 'Python bivittatus'.", - validators=[RegexValidator(regex=r'^([^0-9])+$')] - ) - - def __str__(self): - """Returns the regular and scientific name of the current snake, for display purposes.""" - return f"{self.name} ({self.scientific})" diff --git a/pydis_site/apps/api/models/bot/special_snake.py b/pydis_site/apps/api/models/bot/special_snake.py deleted file mode 100644 index 5d38ab6f..00000000 --- a/pydis_site/apps/api/models/bot/special_snake.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.contrib.postgres import fields as pgfields -from django.core.validators import RegexValidator -from django.db import models - -from pydis_site.apps.api.models.utils import ModelReprMixin - - -class SpecialSnake(ModelReprMixin, models.Model): - """A special snake's name, info and image from our database used by the bot's snake cog.""" - - name = models.CharField( - max_length=140, - primary_key=True, - help_text='A special snake name.', - validators=[RegexValidator(regex=r'^([^0-9])+$')] - ) - info = models.TextField( - help_text='Info about a special snake.' - ) - images = pgfields.ArrayField( - models.URLField(), - help_text='Images displaying this special snake.' - ) - - def __str__(self): - """Returns the name of the current snake, for display purposes.""" - return self.name diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index 19d4ab8c..f5cfb1e6 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -9,8 +9,6 @@ from .models import ( LogEntry, MessageDeletionContext, Nomination, OffTopicChannelName, Reminder, Role, - SnakeFact, SnakeIdiom, - SnakeName, SpecialSnake, Tag, User ) @@ -178,46 +176,6 @@ class OffTopicChannelNameSerializer(ModelSerializer): return obj.name -class SnakeFactSerializer(ModelSerializer): - """A class providing (de-)serialization of `SnakeFact` instances.""" - - class Meta: - """Metadata defined for the Django REST Framework.""" - - model = SnakeFact - fields = ('fact',) - - -class SnakeIdiomSerializer(ModelSerializer): - """A class providing (de-)serialization of `SnakeIdiom` instances.""" - - class Meta: - """Metadata defined for the Django REST Framework.""" - - model = SnakeIdiom - fields = ('idiom',) - - -class SnakeNameSerializer(ModelSerializer): - """A class providing (de-)serialization of `SnakeName` instances.""" - - class Meta: - """Metadata defined for the Django REST Framework.""" - - model = SnakeName - fields = ('name', 'scientific') - - -class SpecialSnakeSerializer(ModelSerializer): - """A class providing (de-)serialization of `SpecialSnake` instances.""" - - class Meta: - """Metadata defined for the Django REST Framework.""" - - model = SpecialSnake - fields = ('name', 'images', 'info') - - class ReminderSerializer(ModelSerializer): """A class providing (de-)serialization of `Reminder` instances.""" diff --git a/pydis_site/apps/api/tests/test_models.py b/pydis_site/apps/api/tests/test_models.py index a958419d..cfc8464e 100644 --- a/pydis_site/apps/api/tests/test_models.py +++ b/pydis_site/apps/api/tests/test_models.py @@ -7,10 +7,7 @@ from ..models import ( Infraction, Message, MessageDeletionContext, ModelReprMixin, OffTopicChannelName, Reminder, - Role, SnakeFact, - SnakeIdiom, SnakeName, - SpecialSnake, Tag, - User + Role, Tag, User ) @@ -52,13 +49,6 @@ class StringDunderMethodTests(SimpleTestCase): 'test', 'http://example.com', 'http://example.com' ), OffTopicChannelName(name='bob-the-builders-playground'), - 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/pydis_site/apps/api/tests/test_snake_names.py b/pydis_site/apps/api/tests/test_snake_names.py deleted file mode 100644 index 41dfae63..00000000 --- a/pydis_site/apps/api/tests/test_snake_names.py +++ /dev/null @@ -1,67 +0,0 @@ -from django_hosts.resolvers import reverse - -from .base import APISubdomainTestCase -from ..models import SnakeName - - -class StatusTests(APISubdomainTestCase): - def setUp(self): - super().setUp() - self.client.force_authenticate(user=None) - - def test_cannot_read_snake_name_list(self): - url = reverse('bot:snakename-list', host='api') - response = self.client.get(url) - - self.assertEqual(response.status_code, 401) - - def test_cannot_read_snake_names_with_get_all_param(self): - url = reverse('bot:snakename-list', host='api') - response = self.client.get(f'{url}?get_all=True') - - self.assertEqual(response.status_code, 401) - - -class EmptyDatabaseSnakeNameTests(APISubdomainTestCase): - def test_endpoint_returns_empty_object(self): - url = reverse('bot:snakename-list', host='api') - response = self.client.get(url) - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), {}) - - def test_endpoint_returns_empty_list_with_get_all_param(self): - url = reverse('bot:snakename-list', host='api') - response = self.client.get(f'{url}?get_all=True') - - self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), []) - - -class SnakeNameListTests(APISubdomainTestCase): - @classmethod - def setUpTestData(cls): # noqa - cls.snake_python = SnakeName.objects.create(name='Python', scientific='Totally.') - - def test_endpoint_returns_all_snakes_with_get_all_param(self): - url = reverse('bot:snakename-list', host='api') - response = self.client.get(f'{url}?get_all=True') - - self.assertEqual(response.status_code, 200) - self.assertEqual( - response.json(), - [ - { - 'name': self.snake_python.name, - 'scientific': self.snake_python.scientific - } - ] - ) - - def test_endpoint_returns_single_snake_without_get_all_param(self): - url = reverse('bot:snakename-list', host='api') - response = self.client.get(url) - self.assertEqual(response.json(), { - 'name': self.snake_python.name, - 'scientific': self.snake_python.scientific - }) diff --git a/pydis_site/apps/api/urls.py b/pydis_site/apps/api/urls.py index 724d7e2b..ac6704c8 100644 --- a/pydis_site/apps/api/urls.py +++ b/pydis_site/apps/api/urls.py @@ -7,10 +7,7 @@ from .viewsets import ( DocumentationLinkViewSet, InfractionViewSet, LogEntryViewSet, NominationViewSet, OffTopicChannelNameViewSet, ReminderViewSet, - RoleViewSet, SnakeFactViewSet, - SnakeIdiomViewSet, SnakeNameViewSet, - SpecialSnakeViewSet, TagViewSet, - UserViewSet + RoleViewSet, TagViewSet, UserViewSet ) @@ -50,23 +47,6 @@ bot_router.register( RoleViewSet ) bot_router.register( - 'snake-facts', - SnakeFactViewSet -) -bot_router.register( - 'snake-idioms', - SnakeIdiomViewSet -) -bot_router.register( - 'snake-names', - SnakeNameViewSet, - base_name='snakename' -) -bot_router.register( - 'special-snakes', - SpecialSnakeViewSet -) -bot_router.register( 'tags', TagViewSet ) @@ -80,7 +60,6 @@ urlpatterns = ( # Build URLs using something like... # # from django_hosts.resolvers import reverse - # snake_name_endpoint = reverse('bot:snakename-list', host='api') # `bot/` endpoints path('bot/', include((bot_router.urls, 'api'), namespace='bot')), path('logs', LogEntryViewSet.as_view({'post': 'create'}), name='logs'), path('healthcheck', HealthcheckView.as_view(), name='healthcheck'), diff --git a/pydis_site/apps/api/viewsets/__init__.py b/pydis_site/apps/api/viewsets/__init__.py index 553ca2c3..224e6910 100644 --- a/pydis_site/apps/api/viewsets/__init__.py +++ b/pydis_site/apps/api/viewsets/__init__.py @@ -7,10 +7,6 @@ from .bot import ( # noqa OffTopicChannelNameViewSet, ReminderViewSet, RoleViewSet, - SnakeFactViewSet, - SnakeIdiomViewSet, - SnakeNameViewSet, - SpecialSnakeViewSet, TagViewSet, UserViewSet ) diff --git a/pydis_site/apps/api/viewsets/bot/__init__.py b/pydis_site/apps/api/viewsets/bot/__init__.py index 8e7d1290..465ba5f4 100644 --- a/pydis_site/apps/api/viewsets/bot/__init__.py +++ b/pydis_site/apps/api/viewsets/bot/__init__.py @@ -6,9 +6,5 @@ from .nomination import NominationViewSet # noqa from .off_topic_channel_name import OffTopicChannelNameViewSet # noqa from .reminder import ReminderViewSet # noqa from .role import RoleViewSet # noqa -from .snake_fact import SnakeFactViewSet # noqa -from .snake_idiom import SnakeIdiomViewSet # noqa -from .snake_name import SnakeNameViewSet # noqa -from .special_snake import SpecialSnakeViewSet # noqa from .tag import TagViewSet # noqa from .user import UserViewSet # noqa diff --git a/pydis_site/apps/api/viewsets/bot/snake_fact.py b/pydis_site/apps/api/viewsets/bot/snake_fact.py deleted file mode 100644 index 0b2e8ede..00000000 --- a/pydis_site/apps/api/viewsets/bot/snake_fact.py +++ /dev/null @@ -1,30 +0,0 @@ -from rest_framework.mixins import ListModelMixin -from rest_framework.viewsets import GenericViewSet - -from pydis_site.apps.api.models.bot.snake_fact import SnakeFact -from pydis_site.apps.api.serializers import SnakeFactSerializer - - -class SnakeFactViewSet(ListModelMixin, GenericViewSet): - """ - View providing snake facts created by the Pydis community in the first code jam. - - ## Routes - ### GET /bot/snake-facts - Returns snake facts from 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() diff --git a/pydis_site/apps/api/viewsets/bot/snake_idiom.py b/pydis_site/apps/api/viewsets/bot/snake_idiom.py deleted file mode 100644 index 9f274d2f..00000000 --- a/pydis_site/apps/api/viewsets/bot/snake_idiom.py +++ /dev/null @@ -1,30 +0,0 @@ -from rest_framework.mixins import ListModelMixin -from rest_framework.viewsets import GenericViewSet - -from pydis_site.apps.api.models.bot.snake_idiom import SnakeIdiom -from pydis_site.apps.api.serializers import SnakeIdiomSerializer - - -class SnakeIdiomViewSet(ListModelMixin, GenericViewSet): - """ - View providing snake idioms 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() diff --git a/pydis_site/apps/api/viewsets/bot/snake_name.py b/pydis_site/apps/api/viewsets/bot/snake_name.py deleted file mode 100644 index 113c6899..00000000 --- a/pydis_site/apps/api/viewsets/bot/snake_name.py +++ /dev/null @@ -1,67 +0,0 @@ -from rest_framework.response import Response -from rest_framework.viewsets import ViewSet - -from pydis_site.apps.api.models.bot.snake_name import SnakeName -from pydis_site.apps.api.serializers import SnakeNameSerializer - - -class SnakeNameViewSet(ViewSet): - """ - View providing snake names for the bot's snake cog from our first code jam's winners. - - ## Routes - ### GET /bot/snake-names - By default, return a single random snake name along with its name and scientific name. - If the `get_all` query parameter is given, for example using... - $ curl api.pythondiscord.local:8000/bot/snake-names?get_all=yes - ... then the API will return all snake names and scientific names in the database. - - #### Response format - Without `get_all` query parameter: - >>> { - ... 'name': "Python", - ... 'scientific': "Langus greatus" - ... } - - If the database is empty for whatever reason, this will return an empty dictionary. - - With `get_all` query parameter: - >>> [ - ... {'name': "Python 3", 'scientific': "Langus greatus"}, - ... {'name': "Python 2", 'scientific': "Langus decentus"} - ... ] - - #### Status codes - - 200: returned on success - - ## Authentication - Requires a API token. - """ - - serializer_class = SnakeNameSerializer - - def get_queryset(self): - """Returns a queryset that covers the entire SnakeName table.""" - return SnakeName.objects.all() - - def list(self, request): - """ - DRF method for listing SnakeName entries. - - Called by the Django Rest Framework in response to the corresponding HTTP request. - """ - if request.query_params.get('get_all'): - queryset = self.get_queryset() - serialized = self.serializer_class(queryset, many=True) - return Response(serialized.data) - - single_snake = SnakeName.objects.order_by('?').first() - if single_snake is not None: - body = { - 'name': single_snake.name, - 'scientific': single_snake.scientific - } - - return Response(body) - - return Response({}) diff --git a/pydis_site/apps/api/viewsets/bot/special_snake.py b/pydis_site/apps/api/viewsets/bot/special_snake.py deleted file mode 100644 index 446c79a1..00000000 --- a/pydis_site/apps/api/viewsets/bot/special_snake.py +++ /dev/null @@ -1,33 +0,0 @@ -from rest_framework.mixins import ListModelMixin -from rest_framework.viewsets import GenericViewSet - -from pydis_site.apps.api.models.bot import SpecialSnake -from pydis_site.apps.api.serializers import SpecialSnakeSerializer - - -class SpecialSnakeViewSet(ListModelMixin, GenericViewSet): - """ - View providing special snake names for our bot's snake cog. - - ## Routes - ### GET /bot/special-snakes - Returns a list of special snake names. - - #### Response Format - >>> [ - ... { - ... 'name': 'Snakky sneakatus', - ... 'info': 'Scary snek', - ... 'image': 'https://discordapp.com/assets/53ef346458017da2062aca5c7955946b.svg' - ... } - ... ] - - #### Status codes - - 200: returned on success - - ## Authentication - Requires an API token. - """ - - serializer_class = SpecialSnakeSerializer - queryset = SpecialSnake.objects.all() |