From 2c486153860a7fe60172c64c9237c2677c2aa8a7 Mon Sep 17 00:00:00 2001 From: Zach Mullen Date: Wed, 3 Feb 2021 14:06:20 -0500 Subject: [PATCH 1/3] Add REST endpoint for showing a folder quota --- dkc/core/rest/folder.py | 16 +++++++++++++++- dkc/core/tests/test_folder_rest.py | 10 ++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/dkc/core/rest/folder.py b/dkc/core/rest/folder.py index a9e7329..373afe4 100644 --- a/dkc/core/rest/folder.py +++ b/dkc/core/rest/folder.py @@ -12,7 +12,7 @@ from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet -from dkc.core.models import File, Folder, Terms, TermsAgreement, Tree +from dkc.core.models import File, Folder, Quota, Terms, TermsAgreement, Tree from dkc.core.permissions import ( HasAccess, IsAdmin, @@ -94,6 +94,12 @@ class Meta(FolderSerializer.Meta): read_only_fields = FolderSerializer.Meta.read_only_fields + ['parent'] +class FolderQuotaSerializer(serializers.ModelSerializer): + class Meta: + model = Quota + fields = ['allowed', 'used'] + + class TermsSerializer(serializers.ModelSerializer): class Meta: model = Terms @@ -199,6 +205,14 @@ def path(self, request, pk=None): serializer = self.get_serializer(ancestors, many=True) return Response(serializer.data) + @swagger_auto_schema(responses={200: FolderQuotaSerializer}) + @action(detail=True, queryset=Folder.objects.select_related('tree__quota')) + def quota(self, request, pk=None): + """Retrieve size quota information for a folder.""" + folder = self.get_object() + serializer = FolderQuotaSerializer(folder.tree.quota) + return Response(serializer.data) + @swagger_auto_schema( operation_description='Retrieve the terms of use for a folder.', responses={ diff --git a/dkc/core/tests/test_folder_rest.py b/dkc/core/tests/test_folder_rest.py index bda8fe2..deddaad 100644 --- a/dkc/core/tests/test_folder_rest.py +++ b/dkc/core/tests/test_folder_rest.py @@ -1,3 +1,4 @@ +from django.conf import settings import pytest from dkc.core.models import File, Folder, Tree @@ -192,3 +193,12 @@ def test_folder_default_ordering(admin_api_client, folder_factory): resp = admin_api_client.get('/api/v2/folders', data={'parent': 'null'}) assert resp.status_code == 200 assert [f['name'] for f in resp.data['results']] == ['A', 'B', 'C'] + + +@pytest.mark.django_db +def test_folder_rest_get_quota(admin_api_client, folder): + resp = admin_api_client.get(f'/api/v2/folders/{folder.id}/quota') + assert resp.status_code == 200 + assert set(resp.data.keys()) == {'used', 'allowed'} + assert resp.data['used'] == 0 + assert resp.data['allowed'] == settings.DKC_DEFAULT_QUOTA From e2a73e3713b2c1c3f80929e52078bc23e6480e9c Mon Sep 17 00:00:00 2001 From: Zach Mullen Date: Thu, 4 Feb 2021 12:54:42 -0500 Subject: [PATCH 2/3] Simplify test assertion Co-authored-by: Brian Helba --- dkc/core/tests/test_folder_rest.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dkc/core/tests/test_folder_rest.py b/dkc/core/tests/test_folder_rest.py index deddaad..c8e9efd 100644 --- a/dkc/core/tests/test_folder_rest.py +++ b/dkc/core/tests/test_folder_rest.py @@ -199,6 +199,7 @@ def test_folder_default_ordering(admin_api_client, folder_factory): def test_folder_rest_get_quota(admin_api_client, folder): resp = admin_api_client.get(f'/api/v2/folders/{folder.id}/quota') assert resp.status_code == 200 - assert set(resp.data.keys()) == {'used', 'allowed'} - assert resp.data['used'] == 0 - assert resp.data['allowed'] == settings.DKC_DEFAULT_QUOTA + assert resp.data == { + 'used': 0, + 'allowed': settings.DKC_DEFAULT_QUOTA, + } From 47d588bab4e30012f703b816f022abf5727faec6 Mon Sep 17 00:00:00 2001 From: Zach Mullen Date: Thu, 4 Feb 2021 12:58:34 -0500 Subject: [PATCH 3/3] Improve internal class name --- dkc/core/rest/folder.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dkc/core/rest/folder.py b/dkc/core/rest/folder.py index 373afe4..f6795f1 100644 --- a/dkc/core/rest/folder.py +++ b/dkc/core/rest/folder.py @@ -94,7 +94,7 @@ class Meta(FolderSerializer.Meta): read_only_fields = FolderSerializer.Meta.read_only_fields + ['parent'] -class FolderQuotaSerializer(serializers.ModelSerializer): +class QuotaSerializer(serializers.ModelSerializer): class Meta: model = Quota fields = ['allowed', 'used'] @@ -205,12 +205,12 @@ def path(self, request, pk=None): serializer = self.get_serializer(ancestors, many=True) return Response(serializer.data) - @swagger_auto_schema(responses={200: FolderQuotaSerializer}) + @swagger_auto_schema(responses={200: QuotaSerializer}) @action(detail=True, queryset=Folder.objects.select_related('tree__quota')) def quota(self, request, pk=None): """Retrieve size quota information for a folder.""" folder = self.get_object() - serializer = FolderQuotaSerializer(folder.tree.quota) + serializer = QuotaSerializer(folder.tree.quota) return Response(serializer.data) @swagger_auto_schema(