From e2816fb066c0d0ea2c3386acea9bd23be64275e2 Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Tue, 13 Oct 2020 06:03:24 +0200 Subject: [PATCH] Add basic SubsidyListAPIView (with csv option) --- api/urls.py | 1 + finances/api/serializers.py | 18 ++++++++++++++++++ finances/api/urls.py | 18 ++++++++++++++++++ finances/api/views.py | 24 ++++++++++++++++++++++++ requirements.txt | 1 + 5 files changed, 62 insertions(+) create mode 100644 finances/api/serializers.py create mode 100644 finances/api/urls.py create mode 100644 finances/api/views.py diff --git a/api/urls.py b/api/urls.py index 9bf2d58c3..dc61d316c 100644 --- a/api/urls.py +++ b/api/urls.py @@ -29,6 +29,7 @@ urlpatterns += [ views.OmniAuthUserInfoView.as_view(), name='omniauth_userinfo' ), + path('finances/', include('finances.api.urls')), path('journals/', include('journals.api.urls')), path('organizations/', include('organizations.api.urls')), diff --git a/finances/api/serializers.py b/finances/api/serializers.py new file mode 100644 index 000000000..f22b49441 --- /dev/null +++ b/finances/api/serializers.py @@ -0,0 +1,18 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from organizations.api.serializers import OrganizationSerializer + +from ..models import Subsidy + + +class SubsidySerializer(serializers.ModelSerializer): + organization = serializers.CharField()#OrganizationSerializer() + subsidy_type = serializers.CharField(source='get_subsidy_type_display', read_only=True) + + class Meta: + model = Subsidy + fields = '__all__' diff --git a/finances/api/urls.py b/finances/api/urls.py new file mode 100644 index 000000000..da5f5c962 --- /dev/null +++ b/finances/api/urls.py @@ -0,0 +1,18 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from django.urls import path + +from finances.api import views as api_views + + +urlpatterns = [ + + path ( # /api/finances/subsidies + 'subsidies', + api_views.SubsidyListAPIView.as_view(), + name='subsidies' + ), + +] diff --git a/finances/api/views.py b/finances/api/views.py new file mode 100644 index 000000000..0c10b8912 --- /dev/null +++ b/finances/api/views.py @@ -0,0 +1,24 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework.generics import ListAPIView, RetrieveAPIView +from rest_framework.permissions import BasePermission +from rest_framework.settings import api_settings +from rest_framework_csv import renderers as r + +from ..models import Subsidy +from .serializers import SubsidySerializer + + +class CanManageSubsidies(BasePermission): + def has_permission(self, request, view): + return request.user.has_perm('scipost:can_manage_subsidies') + + +class SubsidyListAPIView(ListAPIView): + pagination_class = None + permission_classes = [CanManageSubsidies] + queryset = Subsidy.objects.all() + renderer_classes = tuple(api_settings.DEFAULT_RENDERER_CLASSES) + (r.CSVRenderer, ) + serializer_class = SubsidySerializer diff --git a/requirements.txt b/requirements.txt index 4ba2e302f..65021f9c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,6 +25,7 @@ django-oauth-toolkit==1.3.2 # 2020-09-03 django-silk==2.0.0 django-webpack-loader==0.5 django-maintenancemode-2==1.1.11 +djangorestframework-csv # 2020-10-13 plotly==4.6.0 # 2020-05-05 -- GitLab