Newer
Older
__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from rest_framework import serializers
from .models import Publication
class StringListField(serializers.ListField):
child = serializers.CharField()
class PublicationSerializerForGoogleScholar(serializers.BaseSerializer):
citation_title = serializers.CharField(max_length=512)
citation_authors = StringListField()
citation_doi = serializers.CharField(max_length=256)
citation_publication_date = serializers.DateField()
citation_journal_title = serializers.CharField(max_length=128)
citation_issn = serializers.CharField(max_length=16)
citation_volume = serializers.IntegerField()
citation_issue = serializers.IntegerField()
citation_firstpage = serializers.CharField(max_length=16)
citation_pdf_url = serializers.URLField()
dc_identifier = serializers.CharField(max_length=64)
def to_representation(self, instance):
"""
Convert to a Google Scholar-appropriate JSON format.
"""
authors = []
for author in instance.authors.all():
authors.append('%s, %s' % (author.profile.last_name,
author.profile.first_name))
rep = {
'citation_title': instance.title,
'citation_authors': authors,
'citation_doi': instance.doi_string,
'citation_publication_date': instance.publication_date.strftime('%Y/%m/%d'),
'citation_journal_title': str(instance.get_journal()),
'citation_issn': instance.get_journal().issn,
}
if instance.in_issue:
rep['citation_volume'] = instance.in_issue.in_volume.number
rep['citation_issue'] = instance.in_issue.number
rep['citation_firstpage'] = instance.get_paper_nr()
rep['citation_pdf_url'] = 'https://scipost.org%s/pdf' % instance.get_absolute_url()
rep['dc_identifier'] = instance.doi_string
return rep