SciPost Code Repository

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

Fire up basic PubFraction API

parent 6275e638
No related branches found
No related tags found
No related merge requests found
......@@ -7,7 +7,7 @@ from django.urls import include, path
from rest_framework import routers
from journals.viewsets import PublicationViewSet
from journals.viewsets import PublicationViewSet, PubFractionViewSet
from organizations.api.viewsets import OrganizationViewSet, OrganizationNAPViewSet
from submissions.viewsets import SubmissionViewSet
......@@ -24,6 +24,7 @@ router = routers.SimpleRouter()
# journals
router.register('publications', PublicationViewSet)
router.register('pubfractions', PubFractionViewSet)
# organizations
router.register('organizations', OrganizationViewSet)
......
......@@ -3,3 +3,5 @@ __license__ = "AGPL v3"
from .publication import PublicationSerializer
from .pubfraction import PubFractionSerializer
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from rest_framework import serializers
from ..models import OrgPubFraction
from journals.serializers import PublicationSerializer
from organizations.api.serializers import OrganizationSerializer
class PubFractionSerializer(serializers.ModelSerializer):
organization = OrganizationSerializer(
fields=['url', 'name', 'acronym', 'country']
)
publication = PublicationSerializer(
fields=[
'url',
'title', 'author_list',
'doi_label', 'publication_date'
]
)
class Meta:
model = OrgPubFraction
fields = [
'organization',
'publication',
'fraction'
]
......@@ -20,3 +20,17 @@ class PublicationSerializer(serializers.ModelSerializer):
'publication_date',
'url'
]
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop('fields', None)
# Instantiate the superclass normally
super().__init__(*args, **kwargs)
if fields is not None:
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields)
for field_name in existing - allowed:
self.fields.pop(field_name)
......@@ -3,3 +3,4 @@ __license__ = "AGPL v3"
from .publication import PublicationViewSet
from .pubfraction import PubFractionViewSet
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django_filters import rest_framework as df_filters
from rest_framework import viewsets
from rest_framework.permissions import AllowAny
from api.viewsets.mixins import FilteringOptionsActionMixin
from ..models import OrgPubFraction
from ..serializers import PubFractionSerializer
class PubFractionFilterSet(df_filters.FilterSet):
class Meta:
model = OrgPubFraction
fields = {
'organization__name': ['icontains', 'istartswith', 'exact'],
'organization__country': ['exact',],
'publication__publication_date': [
'year', 'month', 'exact',
'year__gte', 'year__lte', 'year__range',
'gte', 'lte', 'range'
],
'fraction': ['gte', 'lte', 'exact']
}
class PubFractionViewSet(FilteringOptionsActionMixin,
viewsets.ReadOnlyModelViewSet):
queryset = OrgPubFraction.objects.all()
permission_classes = [AllowAny,]
serializer_class = PubFractionSerializer
search_fields = [
'organization__name',
'publication__publication_date__year'
]
ordering_fields = ['-publication_date',]
filterset_class = PubFractionFilterSet
default_filtering_fields = [
'organization__name__icontains',
'publication__publication_date__year__exact',
]
......@@ -29,6 +29,20 @@ class OrganizationSerializer(serializers.ModelSerializer):
'superseded_by',
]
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop('fields', None)
# Instantiate the superclass normally
super().__init__(*args, **kwargs)
if fields is not None:
# Drop any fields that are not specified in the `fields` argument.
allowed = set(fields)
existing = set(self.fields)
for field_name in existing - allowed:
self.fields.pop(field_name)
class OrganizationNAPSerializer(OrganizationSerializer):
nap = serializers.SerializerMethodField()
......
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