Skip to content
This repository has been archived by the owner on Jan 29, 2022. It is now read-only.

Commit

Permalink
Merge pull request #141 from girder/get-quota-endpoint
Browse files Browse the repository at this point in the history
Add REST endpoint for retrieving a folder quota
  • Loading branch information
zachmullen authored Feb 4, 2021
2 parents 87d3cab + 47d588b commit c48e4b5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
16 changes: 15 additions & 1 deletion dkc/core/rest/folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -94,6 +94,12 @@ class Meta(FolderSerializer.Meta):
read_only_fields = FolderSerializer.Meta.read_only_fields + ['parent']


class QuotaSerializer(serializers.ModelSerializer):
class Meta:
model = Quota
fields = ['allowed', 'used']


class TermsSerializer(serializers.ModelSerializer):
class Meta:
model = Terms
Expand Down Expand Up @@ -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: 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 = QuotaSerializer(folder.tree.quota)
return Response(serializer.data)

@swagger_auto_schema(
operation_description='Retrieve the terms of use for a folder.',
responses={
Expand Down
11 changes: 11 additions & 0 deletions dkc/core/tests/test_folder_rest.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from django.conf import settings
import pytest

from dkc.core.models import File, Folder, Tree
Expand Down Expand Up @@ -192,3 +193,13 @@ 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 resp.data == {
'used': 0,
'allowed': settings.DKC_DEFAULT_QUOTA,
}

0 comments on commit c48e4b5

Please sign in to comment.