SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 359fd8e1 authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Work on organizations API

parent 550c61dd
No related branches found
No related tags found
No related merge requests found
...@@ -27,7 +27,7 @@ router.register('publications', PublicationViewSet) ...@@ -27,7 +27,7 @@ router.register('publications', PublicationViewSet)
# organizations # organizations
router.register('organizations', OrganizationViewSet) router.register('organizations', OrganizationViewSet)
router.register('nap/organizations', OrganizationNAPViewSet) router.register('nap', OrganizationNAPViewSet)
# submissions # submissions
router.register('submissions', SubmissionViewSet) router.register('submissions', SubmissionViewSet)
...@@ -49,6 +49,5 @@ urlpatterns += [ ...@@ -49,6 +49,5 @@ urlpatterns += [
), ),
path('finances/', include('finances.api.urls')), path('finances/', include('finances.api.urls')),
path('journals/', include('journals.api.urls')), path('journals/', include('journals.api.urls')),
path('organizations/', include('organizations.api.urls')),
] ]
...@@ -4,6 +4,7 @@ __license__ = "AGPL v3" ...@@ -4,6 +4,7 @@ __license__ = "AGPL v3"
from rest_framework import serializers from rest_framework import serializers
from organizations.api.serializers import OrganizationSerializer
from ..models import Publication, OrgPubFraction from ..models import Publication, OrgPubFraction
...@@ -54,6 +55,7 @@ class OrgPubFractionSerializer(serializers.ModelSerializer): ...@@ -54,6 +55,7 @@ class OrgPubFractionSerializer(serializers.ModelSerializer):
Takes optional `fields` argument specifying which fields should be displayed. Takes optional `fields` argument specifying which fields should be displayed.
""" """
organization = OrganizationSerializer()
publication = PublicationSerializer() publication = PublicationSerializer()
class Meta: class Meta:
......
copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.urls import path
from rest_framework import routers
#from organizations.api import views as api_views
from . import views as api_views
from . import viewsets as api_viewsets
router = routers.SimpleRouter()
# OrganizationNAPViewSet before OrganizationViewSet, to prevent 404
router.register('nap', api_viewsets.OrganizationNAPViewSet)
router.register('', api_viewsets.OrganizationViewSet)
urlpatterns = router.urls
urlpatterns += [
path( # /api/organizations/<int:pk>/balance
'<int:pk>/balance',
api_views.OrganizationBalanceAPIView.as_view(),
name='organization-balance',
)
]
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from rest_framework.generics import ListAPIView, RetrieveAPIView
from rest_framework.settings import api_settings
from rest_framework_csv import renderers as r
from ..models import Organization
from .serializers import (
OrganizationSerializer,
OrganizationNAPSerializer,
OrganizationBalanceSerializer
)
from .viewsets import OrganizationFilterSet
class OrganizationNAPListAPIView(ListAPIView):
queryset = Organization.objects.all()
serializer_class = OrganizationNAPSerializer
renderer_classes = tuple(api_settings.DEFAULT_RENDERER_CLASSES) + (r.PaginatedCSVRenderer, )
search_fields = ['name', 'name_original', 'acronym',]
filterset_class = OrganizationFilterSet
default_filtering_fields = [
'name__icontains',
'name_original__icontains',
'acronym__icontains'
]
class OrganizationBalanceAPIView(RetrieveAPIView):
queryset = Organization.objects.all()
serializer_class = OrganizationBalanceSerializer
...@@ -16,7 +16,12 @@ from rest_framework_csv import renderers as r ...@@ -16,7 +16,12 @@ from rest_framework_csv import renderers as r
from api.viewsets.mixins import FilteringOptionsActionMixin from api.viewsets.mixins import FilteringOptionsActionMixin
from ..models import Organization from ..models import Organization
from .serializers import OrganizationSerializer, OrganizationNAPSerializer from journals.api.serializers import OrgPubFractionSerializer
from .serializers import (
OrganizationSerializer,
OrganizationNAPSerializer,
OrganizationBalanceSerializer
)
class OrganizationFilterSet(df_filters.FilterSet): class OrganizationFilterSet(df_filters.FilterSet):
...@@ -45,6 +50,21 @@ class OrganizationViewSet(FilteringOptionsActionMixin, ...@@ -45,6 +50,21 @@ class OrganizationViewSet(FilteringOptionsActionMixin,
'acronym__icontains' 'acronym__icontains'
] ]
@action(detail=True)
def pubfractions(self, request, pk=None):
pubfractions = self.get_object().pubfractions.all()
serializer = OrgPubFractionSerializer(
pubfractions,
many=True,
context={'request': self.request}
)
return Response(serializer.data)
@action(detail=True)
def balance(self, request, pk=None):
serializer = OrganizationBalanceSerializer(self.get_object())
return Response(serializer.data)
class OrganizationNAPViewSet(OrganizationViewSet): class OrganizationNAPViewSet(OrganizationViewSet):
serializer_class = OrganizationNAPSerializer serializer_class = OrganizationNAPSerializer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment