From 3ed89f511bda1265c970d04b3f61c32f98b7ffcc Mon Sep 17 00:00:00 2001 From: Kenzo-Hugo Hillion <kenzo-hugo.hillion1@pasteur.fr> Date: Thu, 4 Jun 2020 16:11:13 +0200 Subject: [PATCH] add statistics PUT and POST and fix Kegg Eggnog permissions --- .../metagenedb/api/catalog/views/function.py | 4 +- .../api/catalog/views/statistics.py | 38 +++++++++++++------ .../metagenedb/apps/catalog/admin/__init__.py | 1 + .../apps/catalog/admin/statistics.py | 9 +++++ .../apps/catalog/models/statistics.py | 3 ++ .../common/django_default/permissions.py | 3 ++ 6 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 backend/metagenedb/apps/catalog/admin/statistics.py diff --git a/backend/metagenedb/api/catalog/views/function.py b/backend/metagenedb/api/catalog/views/function.py index 9a4d6b1..a26b79e 100644 --- a/backend/metagenedb/api/catalog/views/function.py +++ b/backend/metagenedb/api/catalog/views/function.py @@ -57,7 +57,7 @@ class FunctionViewSet(BulkViewSet): return super().partial_update(*args, **kwargs) -class KeggOrthologyViewSet(QParamsValidationViewSet): +class KeggOrthologyViewSet(BulkViewSet): queryset = KeggOrthology.objects.all() serializer_class = KeggOrthologySerializer lookup_field = 'function_id' @@ -117,7 +117,7 @@ class KeggOrthologyViewSet(QParamsValidationViewSet): return super().partial_update(*args, **kwargs) -class EggNOGViewSet(QParamsValidationViewSet): +class EggNOGViewSet(BulkViewSet): queryset = EggNOG.objects.all() serializer_class = EggNOGSerializer lookup_field = 'function_id' diff --git a/backend/metagenedb/api/catalog/views/statistics.py b/backend/metagenedb/api/catalog/views/statistics.py index f0e3cfd..7146b7f 100644 --- a/backend/metagenedb/api/catalog/views/statistics.py +++ b/backend/metagenedb/api/catalog/views/statistics.py @@ -1,4 +1,3 @@ -from django.shortcuts import get_object_or_404 from drf_yasg.utils import swagger_auto_schema from rest_framework import viewsets from rest_framework.response import Response @@ -6,8 +5,12 @@ from rest_framework.response import Response from metagenedb.apps.catalog.models import Statistics from metagenedb.apps.catalog.serializers import StatisticsSerializer +from .base import BulkViewSet -class StatisticsViewSet(viewsets.ViewSet): + +class StatisticsViewSet(BulkViewSet): + queryset = Statistics.objects.all() + serializer_class = StatisticsSerializer lookup_field = 'stats_id' @swagger_auto_schema( @@ -15,18 +18,31 @@ class StatisticsViewSet(viewsets.ViewSet): operation_summary="API to list all pre-computed statistics.", tags=['Statistics'], ) - def list(self, request): - queryset = Statistics.objects.all() - serializer = StatisticsSerializer(queryset, many=True) - return Response(serializer.data) + def list(self, *args, **kwargs): + return super().list(*args, **kwargs) @swagger_auto_schema( operation_description="Retrieve pre-computed statistics from an ID", operation_summary="API to retrieve pre-computed statistics.", tags=['Statistics'], ) - def retrieve(self, request, stats_id=None): - queryset = Statistics.objects.all() - stats = get_object_or_404(queryset, stats_id=stats_id) - serializer = StatisticsSerializer(stats) - return Response(serializer.data) + def retrieve(self, *args, **kwargs): + return super().retrieve(*args, **kwargs) + + @swagger_auto_schema( + tags=['Statistics'], + ) + def create(self, *args, **kwargs): + return super().create(*args, **kwargs) + + @swagger_auto_schema( + tags=['Statistics'], + ) + def update(self, *args, **kwargs): + return super().update(*args, **kwargs) + + @swagger_auto_schema( + tags=['Statistics'], + ) + def partial_update(self, *args, **kwargs): + return super().partial_update(*args, **kwargs) diff --git a/backend/metagenedb/apps/catalog/admin/__init__.py b/backend/metagenedb/apps/catalog/admin/__init__.py index f7d7aca..93ccd2c 100644 --- a/backend/metagenedb/apps/catalog/admin/__init__.py +++ b/backend/metagenedb/apps/catalog/admin/__init__.py @@ -1,3 +1,4 @@ from .gene import GeneAdmin # noqa from .function import FunctionAdmin, KeggOrthologyAdmin # noqa +from .statistics import Statistics # noqa from .taxonomy import TaxonomyAdmin # noqa diff --git a/backend/metagenedb/apps/catalog/admin/statistics.py b/backend/metagenedb/apps/catalog/admin/statistics.py new file mode 100644 index 0000000..6b1d575 --- /dev/null +++ b/backend/metagenedb/apps/catalog/admin/statistics.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from metagenedb.apps.catalog.models import Statistics + + +@admin.register(Statistics) +class StatisticsAdmin(admin.ModelAdmin): + list_display = ('stats_id',) + search_fields = ('stats_id',) diff --git a/backend/metagenedb/apps/catalog/models/statistics.py b/backend/metagenedb/apps/catalog/models/statistics.py index 71630a7..70371c6 100644 --- a/backend/metagenedb/apps/catalog/models/statistics.py +++ b/backend/metagenedb/apps/catalog/models/statistics.py @@ -9,3 +9,6 @@ class Statistics(models.Model): stats_id = models.SlugField(max_length=400, db_index=True, unique=True) body = JSONField() + + class Meta: + verbose_name_plural = "Statistics" diff --git a/backend/metagenedb/common/django_default/permissions.py b/backend/metagenedb/common/django_default/permissions.py index 456f88f..c92bbde 100644 --- a/backend/metagenedb/common/django_default/permissions.py +++ b/backend/metagenedb/common/django_default/permissions.py @@ -7,4 +7,7 @@ class ListAndRetrieveAll(BasePermission): """ def has_permission(self, request, view): + print(view.action) + print(view.action in ['list', 'retrieve']) + print(request.user.is_staff) return view.action in ['list', 'retrieve'] or request.user.is_staff -- GitLab