From a87d4f387fb0754355d37a34f56c128d6e122be6 Mon Sep 17 00:00:00 2001 From: sonny Date: Mon, 2 Mar 2020 20:14:38 +0100 Subject: [PATCH] Replace rest_framework_swagger with drf_yasg rest_framework is deprecated see https://github.com/marcgibbons/django-rest-swagger#django-rest-swagger-deprecated-2019-06-04 --- requirements/base.txt | 2 +- src/newsreader/conf/base.py | 2 +- src/newsreader/news/collection/endpoints.py | 3 +- .../tests/endpoints/rule/list/tests.py | 8 ++--- src/newsreader/news/core/endpoints.py | 2 +- src/newsreader/news/core/pagination.py | 32 ------------------- .../tests/endpoints/category/list/tests.py | 4 +-- src/newsreader/urls.py | 17 ++++++---- 8 files changed, 18 insertions(+), 52 deletions(-) delete mode 100644 src/newsreader/news/core/pagination.py diff --git a/requirements/base.txt b/requirements/base.txt index e362370..a266589 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -7,7 +7,7 @@ django-axes==5.2.2 Django==2.2 django-celery-beat==1.5.0 djangorestframework==3.9.4 -django-rest-swagger==2.2.0 +drf-yasg==1.17.1 django-registration-redux==2.6 lxml==4.4.2 feedparser==5.2.1 diff --git a/src/newsreader/conf/base.py b/src/newsreader/conf/base.py index c90e9e3..41e1669 100644 --- a/src/newsreader/conf/base.py +++ b/src/newsreader/conf/base.py @@ -27,7 +27,7 @@ INSTALLED_APPS = [ "django.contrib.staticfiles", # third party apps "rest_framework", - "rest_framework_swagger", + "drf_yasg", "celery", "django_celery_beat", "registration", diff --git a/src/newsreader/news/collection/endpoints.py b/src/newsreader/news/collection/endpoints.py index 3605d76..0a13766 100644 --- a/src/newsreader/news/collection/endpoints.py +++ b/src/newsreader/news/collection/endpoints.py @@ -2,7 +2,6 @@ from rest_framework import status from rest_framework.generics import ( GenericAPIView, ListAPIView, - ListCreateAPIView, RetrieveUpdateDestroyAPIView, get_object_or_404, ) @@ -17,7 +16,7 @@ from newsreader.news.core.models import Post from newsreader.news.core.serializers import PostSerializer -class ListRuleView(ListCreateAPIView): +class ListRuleView(ListAPIView): queryset = CollectionRule.objects.all() serializer_class = RuleSerializer pagination_class = ResultSetPagination diff --git a/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py b/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py index a84a093..32d8a0d 100644 --- a/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py +++ b/src/newsreader/news/collection/tests/endpoints/rule/list/tests.py @@ -94,13 +94,9 @@ class RuleListViewTestCase(TestCase): content_type="application/json", ) data = response.json() - data["category"] - self.assertEquals(response.status_code, 201) - - self.assertEquals(data["name"], "BBC") - self.assertEquals(data["url"], "https://www.bbc.co.uk") - self.assertEquals(data["category"], category.pk) + self.assertEquals(response.status_code, 405) + self.assertEquals(data["detail"], 'Method "POST" not allowed.') def test_patch(self): response = self.client.patch(reverse("api:rules-list")) diff --git a/src/newsreader/news/core/endpoints.py b/src/newsreader/news/core/endpoints.py index d3b679b..91736a9 100644 --- a/src/newsreader/news/core/endpoints.py +++ b/src/newsreader/news/core/endpoints.py @@ -44,7 +44,7 @@ class DetailPostView(RetrieveUpdateAPIView): permission_classes = (IsAuthenticated, IsPostOwner) -class ListCategoryView(ListCreateAPIView): +class ListCategoryView(ListAPIView): queryset = Category.objects.all() serializer_class = CategorySerializer diff --git a/src/newsreader/news/core/pagination.py b/src/newsreader/news/core/pagination.py deleted file mode 100644 index ff289c3..0000000 --- a/src/newsreader/news/core/pagination.py +++ /dev/null @@ -1,32 +0,0 @@ -from newsreadern.news.collection.serializers import RuleSerializer -from rest_framework import serializers - -from newsreader.news.posts.models import Category, Post - - -class CategorySerializer(serializers.ModelSerializer): - rules = serializers.SerializerMethodField() - - def get_rules(self, instance): - rules = instance.rules.order_by("-modified", "-created") - serializer = RuleSerializer(rules, many=True) - return serializer.data - - class Meta: - model = Category - fields = ("id", "name", "rules") - - -class PostSerializer(serializers.ModelSerializer): - class Meta: - model = Post - fields = ( - "id", - "title", - "body", - "author", - "publication_date", - "url", - "rule", - "remote_identifier", - ) diff --git a/src/newsreader/news/core/tests/endpoints/category/list/tests.py b/src/newsreader/news/core/tests/endpoints/category/list/tests.py index 54058fd..043e805 100644 --- a/src/newsreader/news/core/tests/endpoints/category/list/tests.py +++ b/src/newsreader/news/core/tests/endpoints/category/list/tests.py @@ -74,8 +74,8 @@ class CategoryListViewTestCase(TestCase): ) response_data = response.json() - self.assertEquals(response.status_code, 201) - self.assertEquals(response_data["name"], "Tech") + self.assertEquals(response.status_code, 405) + self.assertEquals(response_data["detail"], 'Method "POST" not allowed.') def test_patch(self): response = self.client.patch(reverse("api:categories-list")) diff --git a/src/newsreader/urls.py b/src/newsreader/urls.py index fb68235..3b01563 100644 --- a/src/newsreader/urls.py +++ b/src/newsreader/urls.py @@ -2,7 +2,8 @@ from django.conf import settings from django.contrib import admin from django.urls import include, path -from rest_framework_swagger.views import get_swagger_view +from drf_yasg import openapi +from drf_yasg.views import get_schema_view from newsreader.accounts.urls import urlpatterns as login_urls from newsreader.news.collection.urls import endpoints as collection_endpoints @@ -11,19 +12,21 @@ from newsreader.news.core.urls import endpoints as core_endpoints from newsreader.news.core.urls import urlpatterns as core_patterns -schema_view = get_swagger_view(title="Newsreader API") -endpoints = [ - path("", schema_view, name="schema-view"), - *collection_endpoints, - *core_endpoints, +apipatterns = [ + path("api/", include(core_endpoints)), + path("api/", include(collection_endpoints)), ] +schema_info = openapi.Info(title="Newsreader API", default_version="v1") +schema_view = get_schema_view(schema_info, patterns=apipatterns) + urlpatterns = [ path("", include(core_patterns)), path("", include(collection_patterns)), + path("", include((apipatterns, "api")), name="api"), path("accounts/", include((login_urls, "accounts")), name="accounts"), path("admin/", admin.site.urls, name="admin"), - path("api/", include((endpoints, "api")), name="api"), + path("api/", schema_view.with_ui("swagger"), name="api"), path("api/auth/", include("rest_framework.urls"), name="rest_framework"), ]