From 3cdd001b5421ed20ea365c881e66ea00d1e4dd66 Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Thu, 30 Apr 2020 21:43:08 +0200 Subject: [PATCH] Skeletal API for Organizations --- api/urls.py | 3 +-- organizations/api/serializers.py | 26 ++++++++++++++++++++++++++ organizations/api/urls.py | 23 +++++++++++++++++++++++ organizations/api/views.py | 18 ++++++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 organizations/api/serializers.py create mode 100644 organizations/api/urls.py create mode 100644 organizations/api/views.py diff --git a/api/urls.py b/api/urls.py index 8cc44e69c..3cf361a51 100644 --- a/api/urls.py +++ b/api/urls.py @@ -10,8 +10,6 @@ from rest_framework import routers from conflicts.viewsets import ConflictOfInterestViewSet from news.viewsets import NewsItemViewSet -from journals.api import views as journal_api_views - router = routers.SimpleRouter() router.register(r'news', NewsItemViewSet) @@ -26,5 +24,6 @@ urlpatterns = router.urls urlpatterns += [ path('journals/', include('journals.api.urls')), + path('organizations/', include('organizations.api.urls')), ] diff --git a/organizations/api/serializers.py b/organizations/api/serializers.py new file mode 100644 index 000000000..2e7a014fc --- /dev/null +++ b/organizations/api/serializers.py @@ -0,0 +1,26 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework import serializers + +from django_countries.serializer_fields import CountryField + +from ..models import Organization + + +class OrganizationSerializer(serializers.BaseSerializer): + name = serializers.CharField(max_length=256) + name_original = serializers.CharField(max_length=256) + acronym = serializers.CharField(max_length=64) + country = CountryField() + + def to_representation(self, instance): + rep = { + 'name': instance.name, + 'acronym': instance.acronym, + 'country': instance.country.name + } + if instance.name_original: + rep['name_original'] = instance.name_original + return rep diff --git a/organizations/api/urls.py b/organizations/api/urls.py new file mode 100644 index 000000000..b82b3a7a1 --- /dev/null +++ b/organizations/api/urls.py @@ -0,0 +1,23 @@ +copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from django.urls import path + +from organizations.api import views as api_views + + +urlpatterns = [ + + path( # /api/organizations/ + '', + api_views.OrganizationListAPIView.as_view(), + name='organizations' + ), + path( # /api/organizations/<int:pk> + '<int:pk>', + api_views.OrganizationRetrieveAPIView.as_view(), + name='organization-detail' + ), + +] diff --git a/organizations/api/views.py b/organizations/api/views.py new file mode 100644 index 000000000..9699d829b --- /dev/null +++ b/organizations/api/views.py @@ -0,0 +1,18 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from rest_framework.generics import ListAPIView, RetrieveAPIView + +from ..models import Organization +from .serializers import OrganizationSerializer + + +class OrganizationListAPIView(ListAPIView): + queryset = Organization.objects.all().order_by('name') + serializer_class = OrganizationSerializer + + +class OrganizationRetrieveAPIView(RetrieveAPIView): + queryset = Organization.objects.all() + serializer_class = OrganizationSerializer -- GitLab