SciPost Code Repository

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

Remove deprecated API views

parent f7b25847
No related branches found
No related tags found
No related merge requests found
...@@ -55,6 +55,4 @@ urlpatterns += [ ...@@ -55,6 +55,4 @@ urlpatterns += [
name='omniauth_userinfo' name='omniauth_userinfo'
), ),
path('finances/', include('finances.api.urls')), path('finances/', include('finances.api.urls')),
path('deprec/journals/', include('journals.api.urls')), # TODO remove
] ]
...@@ -14,10 +14,10 @@ class PublicationPublicSerializer(DynamicFieldsModelSerializer): ...@@ -14,10 +14,10 @@ class PublicationPublicSerializer(DynamicFieldsModelSerializer):
class Meta: class Meta:
model = Publication model = Publication
fields = [ fields = [
'url',
'title', 'title',
'author_list', 'author_list',
'abstract', 'abstract',
'doi_label', 'doi_label',
'publication_date', 'publication_date',
'url'
] ]
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from rest_framework import serializers
from organizations.api.serializers import OrganizationPublicSerializer
from ..models import Publication, OrgPubFraction
class StringListField(serializers.ListField):
child = serializers.CharField()
class PublicationSerializer(serializers.BaseSerializer):
title = serializers.CharField(max_length=512)
authors = StringListField()
doi = serializers.CharField(max_length=256)
publication_date = serializers.DateField()
journal_name = serializers.CharField(max_length=128)
issn = serializers.CharField(max_length=16)
volume = serializers.IntegerField()
issue = serializers.IntegerField()
url = serializers.URLField()
pdf_url = serializers.URLField()
def to_representation(self, instance):
"""
Convert publication information to a JSON format.
"""
authors = []
for author in instance.authors.all():
authors.append('%s, %s' % (author.profile.last_name,
author.profile.first_name))
rep = {
'title': instance.title,
'authors': authors,
'doi': instance.doi_string,
'publication_date': instance.publication_date.strftime('%Y/%m/%d'),
'journal_name': str(instance.get_journal()),
'issn': instance.get_journal().issn,
}
if instance.in_issue:
if instance.in_issue.in_volume:
rep['volume'] = instance.in_issue.in_volume.number
rep['issue'] = instance.in_issue.number
rep['url'] = 'https://scipost.org%s' % instance.get_absolute_url()
rep['pdf_url'] = 'https://scipost.org%s/pdf' % instance.get_absolute_url()
return rep
class OrgPubFractionSerializer(serializers.ModelSerializer):
"""
Read-only ModelSerializer for OrgPubFraction.
Takes optional `fields` argument specifying which fields should be displayed.
"""
organization = OrganizationPublicSerializer()
publication = PublicationSerializer()
class Meta:
model = OrgPubFraction
fields = ['organization', 'publication', 'fraction']
read_only_fields = ['organization', 'publication', 'fraction']
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(OrgPubFractionSerializer, self).__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)
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.urls import path
from journals.api import views as api_views
urlpatterns = [
path( # /api/journals/publications
'publications',
api_views.PublicationListAPIView.as_view(),
name='publications'
),
path( # /api/journals/publications/<doi_label>
'publications/<str:doi_label>',
api_views.PublicationRetrieveAPIView.as_view(),
name='publication-detail'
),
path( # /api/journals/pubfractions
'pubfractions',
api_views.OrgPubFractionListAPIView.as_view(),
name='pubfractions'
),
]
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from rest_framework.generics import ListAPIView, RetrieveAPIView
from django.db.models import Sum
from ..models import Publication, OrgPubFraction
from .serializers_deprec import PublicationSerializer, OrgPubFractionSerializer
class PublicationListAPIView(ListAPIView):
serializer_class = PublicationSerializer
lookup_field = 'doi_label'
def get_queryset(self):
queryset = Publication.objects.published().order_by('-publication_date')
doi = self.request.query_params.get('doi', None)
if doi:
queryset = queryset.filter(doi_label__icontains=doi)
return queryset
class PublicationRetrieveAPIView(RetrieveAPIView):
queryset = Publication.objects.published()
serializer_class = PublicationSerializer
lookup_url_kwarg = 'doi_label'
lookup_field = 'doi_label'
class OrgPubFractionListAPIView(ListAPIView):
serializer_class = OrgPubFractionSerializer
def get_queryset(self):
queryset = OrgPubFraction.objects.all()
org_id = self.request.query_params.get('org_id', None)
if org_id is not None:
queryset = queryset.filter(organization__pk=org_id)
year = self.request.query_params.get('year', None)
if year is not None:
queryset = queryset.filter(publication__publication_date__startswith=year)
journal = self.request.query_params.get('journal', None)
if journal is not None:
queryset = queryset.filter(publication__doi_label__istartswith=journal + '.')
return queryset
...@@ -10,6 +10,7 @@ from rest_framework.permissions import AllowAny ...@@ -10,6 +10,7 @@ from rest_framework.permissions import AllowAny
from api.viewsets.mixins import FilteringOptionsActionMixin from api.viewsets.mixins import FilteringOptionsActionMixin
from journals.models import Publication from journals.models import Publication
from journals.regexes import PUBLICATION_DOI_LABEL_REGEX
from journals.api.filtersets import PublicationPublicAPIFilterSet from journals.api.filtersets import PublicationPublicAPIFilterSet
from journals.api.serializers import PublicationPublicSerializer from journals.api.serializers import PublicationPublicSerializer
...@@ -20,6 +21,8 @@ class PublicationPublicAPIViewSet( ...@@ -20,6 +21,8 @@ class PublicationPublicAPIViewSet(
queryset = Publication.objects.published() queryset = Publication.objects.published()
permission_classes = [AllowAny,] permission_classes = [AllowAny,]
serializer_class = PublicationPublicSerializer serializer_class = PublicationPublicSerializer
lookup_field = 'doi_label'
lookup_value_regex = PUBLICATION_DOI_LABEL_REGEX
search_fields = ['title', 'author_list', 'abstract', 'doi_label'] search_fields = ['title', 'author_list', 'abstract', 'doi_label']
ordering_fields = ['publication_date',] ordering_fields = ['publication_date',]
filterset_class = PublicationPublicAPIFilterSet filterset_class = PublicationPublicAPIFilterSet
......
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from .submission import SubmissionPublicAPIFilterSet
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django_filters import rest_framework as df_filters
from submissions.models import Submission
class SubmissionPublicAPIFilterSet(df_filters.FilterSet):
class Meta:
model = Submission
fields = {
'title': ['icontains', 'contains', 'istartswith', 'iregex', 'regex'],
'author_list': ['icontains', 'contains', 'iregex', 'regex'],
'abstract': ['icontains', 'contains', 'iregex', 'regex'],
'submission_date': [
'date__year', 'date__month', 'date__exact',
'date__year__gte', 'date__year__lte', 'date__year__range',
'date__gte', 'date__lte', 'date__range'
],
'acad_field__name': ['icontains',],
'specialties__name': ['icontains',],
'topics__name': ['icontains',],
}
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