Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wip] Cria API para Article #885

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 29 additions & 5 deletions article/api/v1/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
from article import models
from core.api.v1.serializers import LanguageSerializer, LicenseStatementSerializer
from doi.api.v1.serializers import DoiSerializer
from institution.api.v1.serializers import SponsorSerializer
from institution.api.v1.serializers import SponsorSerializer, PublisherSerializer
from issue.api.v1.serializers import IssueSerializer, TocSectionsSerializer
from journal.api.v1.serializers import JournalSerializer
from journal.models import SciELOJournal
from researcher.api.v1.serializers import ResearcherSerializer
from vocabulary.api.v1.serializers import KeywordSerializer

from pid_provider.models import PidProviderXML

class FundingsSerializer(serializers.ModelSerializer):
funding_source = SponsorSerializer(many=False, read_only=True)
Expand Down Expand Up @@ -60,8 +61,8 @@ class Meta:


class ArticleSerializer(serializers.ModelSerializer):
journal = JournalSerializer(many=False, read_only=True)
publisher = SponsorSerializer(many=True, read_only=True)
journal = serializers.SerializerMethodField()
publisher = PublisherSerializer(many=False, read_only=True)
titles = TitleSerializer(many=True, read_only=True)
doi = DoiSerializer(many=True, read_only=True)
abstracts = DocumentAbstractSerializer(many=True, read_only=True)
Expand All @@ -73,6 +74,30 @@ class ArticleSerializer(serializers.ModelSerializer):
license = LicenseStatementSerializer(many=True, read_only=True)
issue = IssueSerializer(many=False, read_only=True)
keywords = KeywordSerializer(many=True, read_only=True)
xml_link = serializers.SerializerMethodField()


def get_journal(self, obj):
if obj.journal:
scielo_journal = SciELOJournal.objects.get(journal=obj.journal).issn_scielo
return {
"title": obj.journal.title,
"short_title": obj.journal.short_title,
"issn_print": obj.journal.official.issn_print,
"issn_electronic": obj.journal.official.issn_electronic,
"issnl": obj.journal.official.issnl,
"journal_acron": scielo_journal.journal_acron,
}
else:
return None


def get_xml_link(self, obj):
if obj:
pid_provider = PidProviderXML.objects.get(v3=obj.pid_v3)
# TODO
# Adicionar dominio no link?
return {"xml_link": pid_provider.current_version.file.url}

class Meta:
model = models.Article
Expand All @@ -99,4 +124,3 @@ class Meta:
"elocation_id",
"keywords",
]
datatables_always_serialize = ("id",)
100 changes: 95 additions & 5 deletions article/api/v1/views.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,108 @@
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination

from article import models

from .serializers import ArticleSerializer
from core.validators import validate_params
from core.utils.utils import params_api

class ArticlePagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000

class ArticleViewSet(viewsets.ModelViewSet):

class ArticleViewSetGeneric(viewsets.ModelViewSet):
serializer_class = ArticleSerializer
http_method_names = ["get"]
queryset = models.Article.objects.all()


class ArticleViewSet(ArticleViewSetGeneric):
pagination_class = ArticlePagination

def get_queryset(self):
queryset = models.Article.objects.all()
queryset = super().get_queryset()
# # fazer fora da funcao params_api
# # issn = self.request.query_params.get("issn")
# # pub_date_year=year,
doi_prefix = self.request.query_params.get('doi_prefix', None)
if doi_prefix is not None:
queryset = queryset.filter(doi__value__startswith=doi_prefix)
return queryset
issn_print = self.request.query_params.get("issn_print")
issn_electronic = self.request.query_params.get("issn_electronic")
year = self.request.query_params.get("year")
thematic_areas = self.request.query_params.get("thematic_areas")
toc_sections = self.request.query_params.get("toc_sections")
article_type = self.request.query_params.get("article_type")
pid_v3 = self.request.query_params.get("pid_v3")
pid_v2 = self.request.query_params.get("pid_v2")
license = self.request.query_params.get("license")
acron3_collection = self.request.query_params.get("collection")
affiliation_code = self.request.query_params.get("affiliation_code")
from_date_created = self.request.query_params.get("from_date_created")
until_date_created = self.request.query_params.get("until_date_created")
from_date_updated = self.request.query_params.get("from_date_updated")
until_date_updated = self.request.query_params.get("until_date_updated")

validate_params(
self.request,
"doi_prefix",
"issn_print",
"issn_electronic",
"year",
"thematic_areas",
"toc_sections",
"article_type",
"pid_v3",
"pid_v2",
"license",
"acron3_collection",
"affiliation_code",
"from_date_created",
"until_date_created",
"from_date_updated",
"until_date_updated",
"page",
""
)


params = {}
params = params_api(
journal__officialjournal__issn_print=issn_print,
journal__officialjournal__issn_electronic=issn_electronic,
issue__year=year,
doi__value__startswith=doi_prefix,
journal__subject__value__insubject__value__in=thematic_areas.split(",") if thematic_areas else None,
toc_sections__plain_text=toc_sections,
article_type=article_type,
pid_v3=pid_v3,
pid_v2=pid_v2,
publisher__institution__location__country__acronym=affiliation_code,
article_license__icontains="".join(("/", license, "/")) if license else None,
journal__scielojournal__collection__acron3=acron3_collection,
created__gte=from_date_created.replace("/", "-") if from_date_created else None,
created__lte=until_date_created.replace("/", "-") if until_date_created else None,
updated__gte=from_date_updated.replace("/", "-") if from_date_updated else None,
updated__lte=until_date_updated.replace("/", "-") if until_date_updated else None
)

return queryset.filter(**params)


# def list(self, request, *args, **kwargs):
# query_params = request.query_params

#
# queryset = self.filter_queryset(self.get_queryset())
# page = self.paginate_queryset(queryset)
# if page is not None:
# serializer = self.get_serializer(page, many=True)
# return self.get_paginated_response(serializer.data)

# serializer = self.get_serializer(queryset, many=True)
# return Response({
# 'parameters_used': query_params,
# 'results': serializer.data,
# })
34 changes: 17 additions & 17 deletions collection/api/v1/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from collection import models
from core.validators import validate_params

from core.utils.utils import params_api
from .serializers import CollectionSerializer


Expand Down Expand Up @@ -34,20 +34,20 @@ def get_queryset(self):
)

queryset = super().get_queryset()
params = {}

if acron2:
params["acron2"] = acron2
if acron3:
params["acron3"] = acron3
if main_name:
params["main_name"] = main_name
if from_date_created:
params["created__gte"] = from_date_created.replace("/", "-")
if until_date_created:
params["created__lte"] = until_date_created.replace("/", "-")
if from_date_updated:
params["updated__gte"] = from_date_updated.replace("/", "-")
if until_date_updated:
params["updated__lte"] = until_date_updated.replace("/", "-")
params = params_api(
scielojournal__issn_scielo=issn,
official__issn_electronic=issn_electronic,
official__issn_print=issn_print,
official__issnl=issnl,
title=title,
journaltocsection__toc_items__text=toc_item,
subject__value__in=thematic_areas.split(",") if thematic_areas else None,
acron2=acron2,
acron3=acron3,
main_name=main_name,
created__gte=from_date_created.replace("/", "-") if from_date_created else None,
created__lte=until_date_created.replace("/", "-") if until_date_created else None,
updated__gte=from_date_updated.replace("/", "-") if from_date_updated else None,
updated__lte=until_date_updated.replace("/", "-") if until_date_updated else None
)
return queryset.filter(**params)
6 changes: 5 additions & 1 deletion core/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,8 @@ def _get_user(request, username=None, user_id=None):
if user_id:
return User.objects.get(pk=user_id)
if username:
return User.objects.get(username=username)
return User.objects.get(username=username)


def params_api(**kwargs):
return {key: value for key, value in kwargs.items() if value}
16 changes: 13 additions & 3 deletions institution/api/v1/serializers.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
from rest_framework import serializers

from institution.models import Sponsor
from institution.models import Sponsor, Publisher


class SponsorSerializer(serializers.ModelSerializer):
name = serializers.CharField(source="institution.institution_identification")

class Meta:
model = Sponsor
model = Publisher
fields = [
"name",
"institution_type",
]

class PublisherSerializer(serializers.ModelSerializer):
name = serializers.CharField(source="institution.institution_identification")

class Meta:
model = Publisher
fields = [
"name",
]
44 changes: 17 additions & 27 deletions issue/api/v1/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,33 +56,23 @@ def get_queryset(self):
"",
)

params = {}
if collection:
params["journal__scielojournal__collection__acron3"] = collection
if from_publication_year:
params["year__gte"] = from_publication_year
if until_publication_year:
params["year__lte"] = until_publication_year
if from_date_created:
params["created__gte"] = from_date_created.replace("/", "-")
if until_date_created:
params["created__lte"] = until_date_created.replace("/", "-")
if from_date_updated:
params["updated__gte"] = from_date_updated.replace("/", "-")
if until_date_updated:
params["updated__lte"] = until_date_updated.replace("/", "-")
if issn_print:
params["journal__official__issn_print"] = issn_print
if issn_electronic:
params["journal__official__issn_electronic"] = issn_electronic
if volume:
params["volume"] = volume
if number:
params["number"] = number
if supplement:
params["supplement"] = supplement
if params:
queryset = queryset.filter(**params)
params = params_api(
scielojournal__issn_scielo=issn,
official__issn_electronic=issn_electronic,
official__issn_print=issn_print,
official__issnl=issnl,
title=title,
journaltocsection__toc_items__text=toc_item,
subject__value__in=thematic_areas.split(",") if thematic_areas else None,
acron2=acron2,
acron3=acron3,
main_name=main_name,
created__gte=from_date_created.replace("/", "-") if from_date_created else None,
created__lte=until_date_created.replace("/", "-") if until_date_created else None,
updated__gte=from_date_updated.replace("/", "-") if from_date_updated else None,
updated__lte=until_date_updated.replace("/", "-") if until_date_updated else None
)

return queryset


38 changes: 14 additions & 24 deletions journal/api/v1/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from .serializers import JournalSerializer

from core.validators import validate_params

from core.utils.utils import params_api


class GenericJournalViewSet(viewsets.ModelViewSet):
Expand Down Expand Up @@ -47,28 +47,18 @@ def get_queryset(self):

queryset = super().get_queryset()

params = {}
if issn:
params['scielojournal__issn_scielo'] = issn
if issn_electronic:
params['official__issn_electronic'] = issn_electronic
if issn_print:
params['official__issn_print'] = issn_print
if issnl:
params['official__issnl'] = issnl
if title:
params['title'] = title
if toc_item:
params['journaltocsection__toc_items__text'] = toc_item
if thematic_areas:
params['subject__value__in'] = thematic_areas.split(",")
if from_date_created:
params["created__gte"] = from_date_created.replace("/", "-")
if until_date_created:
params["created__lte"] = until_date_created.replace("/", "-")
if from_date_updated:
params["updated__gte"] = from_date_updated.replace("/", "-")
if until_date_updated:
params["updated__lte"] = until_date_updated.replace("/", "-")
params = params_api(
scielojournal__issn_scielo=issn,
official__issn_electronic= issn_electronic,
official__issn_print=issn_print,
official__issnl=issnl,
title=title,
journaltocsection__toc_items__text=toc_item,
subject__value__in=thematic_areas.split(",") if thematic_areas else None,
created__gte=from_date_created.replace("/", "-") if from_date_created else None,
created__lte=until_date_created.replace("/", "-") if until_date_created else None,
updated__gte=from_date_updated.replace("/", "-") if from_date_updated else None,
updated__lte=until_date_updated.replace("/", "-") if until_date_updated else None
)

return queryset.filter(**params)
7 changes: 2 additions & 5 deletions researcher/api/v1/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@ class ResearcherSerializer(serializers.ModelSerializer):
class Meta:
model = Researcher
fields = [
"given_names",
"last_name",
"suffix",
"orcid",
"lattes",
"person_name",
"affiliation",
# "gender",
# "gender_identification_status",
]
Loading