Skip to content

Adiciona Suporte ao Formato articlemeta na API de Issue #919

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

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
aeaa40c
Fix MissionSerializer
samuelveigarangel Jan 29, 2025
2bea7ad
Adiciona formato articlemeta
samuelveigarangel Jan 29, 2025
5d6234a
Adiciona ArticleMetaFormatSerializer
samuelveigarangel Jan 29, 2025
e8fd196
Adiciona property para texto puro em RichTextWithLanguage
samuelveigarangel Jan 29, 2025
897b11d
Fix null
samuelveigarangel Jan 29, 2025
d7787ae
adiciona collection a funcao add_to_result
samuelveigarangel Jan 29, 2025
006fa21
muda nome para get_articlemeta_format
samuelveigarangel Jan 29, 2025
b70678d
Coloca articlemeta_format como property
samuelveigarangel Jan 29, 2025
1c6df48
Merge branch 'main' into issue-902
samuelveigarangel Jan 29, 2025
bbe68b3
Muda nome do modulo
samuelveigarangel Feb 3, 2025
0fd91a8
Remove importacao inutilizada
samuelveigarangel Feb 3, 2025
3e3dcae
Cria formato do article meta e insere em um endpoint
samuelveigarangel Feb 3, 2025
09e8f21
Merge branch 'main' into issue-903
samuelveigarangel Feb 3, 2025
ef062d7
Cria property em BaseHistoryItem
samuelveigarangel Feb 8, 2025
4910e09
Realiza melhorias em add_to_result e cria add_items
samuelveigarangel Feb 8, 2025
c7a28c8
Realiza mudanças de chamada para publisher e medline
samuelveigarangel Feb 8, 2025
9589a28
Merge branch 'issue-902' of https://github.com/samuelveigarangel/core…
samuelveigarangel Feb 8, 2025
7cd61f3
black
samuelveigarangel Feb 8, 2025
0413de4
Realoca importacao de get_article_meta_format
samuelveigarangel Feb 10, 2025
b40cd5e
Merge branch 'issue-902' of https://github.com/samuelveigarangel/core…
samuelveigarangel Feb 10, 2025
7fdeefc
Coloca importacao get_articlemeta_format_title dentro de articlemeta_…
samuelveigarangel Feb 10, 2025
d03f486
Coloca funcao add_items e add_to_result em um lugar comum
samuelveigarangel Feb 10, 2025
b1990f9
Mudança das funcoes add_to_result, add_items
samuelveigarangel Feb 10, 2025
fa4dc65
Merge branch 'issue-903' of https://github.com/samuelveigarangel/core…
samuelveigarangel Feb 10, 2025
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
7 changes: 6 additions & 1 deletion core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.db import models, IntegrityError
from django.db.models import Case, When, Value, IntegerField
from django.utils.translation import gettext as _
from django.utils.html import strip_tags
from wagtail.admin.panels import FieldPanel
from wagtail.fields import RichTextField
from wagtail.search import index
Expand Down Expand Up @@ -268,7 +269,11 @@ class RichTextWithLanguage(models.Model):
AutocompletePanel("language"),
FieldPanel("rich_text"),
]


@property
def get_text_pure(self):
return strip_tags(self.rich_text)

objects = LanguageFallbackManager()

class Meta:
Expand Down
9 changes: 9 additions & 0 deletions core/utils/api_articlemeta_format.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
def add_items(key, items, dictonary):
for item in items:
add_to_result(key, item, dictonary)

def add_to_result(key, value, dictonary):
if value:
if key not in dictonary:
dictonary[key] = []
dictonary[key].append({"_": value})
43 changes: 43 additions & 0 deletions institution/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,49 @@ def __str__(self):
return self.institution.institution.institution_identification.name
except AttributeError:
return ''

@property
def get_institution_name(self):
try:
return self.institution.institution.institution_identification.name
except AttributeError:
return None

@property
def get_institution_city_name(self):
try:
return self.institution.institution.location.city.name
except AttributeError:
return None

@property
def get_institution_country_name(self):
try:
return self.institution.institution.location.country.name
except AttributeError:
return None

@property
def get_institution_country_acronym(self):
try:
return self.institution.institution.location.country.acronym
except AttributeError:
return None

@property
def get_institution_state_name(self):
try:
return self.institution.institution.location.state.name
except AttributeError:
return None

@property
def get_instition_state_acronym(self):
try:
return self.institution.institution.location.state.acronym
except AttributeError:
return None


class BaseInstitution(CommonControlField):
institution = models.ForeignKey(
Expand Down
16 changes: 14 additions & 2 deletions issue/api/v1/views.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
from rest_framework.exceptions import ValidationError

from django.db.models import Q
from rest_framework import viewsets
from rest_framework import viewsets, serializers

from article import models
from core.validators import validate_params
from .serializers import IssueSerializer

class ArticleMetaFormatIssueSerializer(serializers.ModelSerializer):
class Meta:
model = models.Issue

def to_representation(self, instance):
return instance.articlemeta_format


class GenericIssueViewSet(viewsets.ModelViewSet):
serializer_class = IssueSerializer
Expand Down Expand Up @@ -53,6 +60,7 @@ def get_queryset(self):
"number",
"supplement",
"page",
"formats",
"",
)

Expand Down Expand Up @@ -85,4 +93,8 @@ def get_queryset(self):
queryset = queryset.filter(**params)
return queryset


def get_serializer_class(self):
format_param = self.request.query_params.get("formats")
if format_param == "articlemeta":
return ArticleMetaFormatIssueSerializer
return IssueSerializer
4 changes: 4 additions & 0 deletions issue/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,10 @@ def __str__(self):

return "%s, %s, %s" % (self.journal, issue_info, self.year)

@property
def articlemeta_format(self):
from .sources.articlemeta_format import get_articlemeta_format_issue
return get_articlemeta_format_issue(self)

base_form_class = CoreAdminModelForm

Expand Down
32 changes: 32 additions & 0 deletions issue/sources/articlemeta_format.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from journal.models import SciELOJournal, TitleInDatabase
from core.utils.api_articlemeta_format import add_to_result, add_items

def get_articlemeta_format_issue(obj):
result = {}

scielo_issn = SciELOJournal.objects.filter(journal=obj.journal).first().issn_scielo

add_to_result("v30", obj.journal.short_title, result)
add_to_result("v31", obj.volume, result)
add_to_result("v32", obj.number, result)
add_to_result("v35", scielo_issn, result)
add_items("v62", [ch.get_institution_name for ch in obj.journal.copyright_holder_history.all()], result)

# Data de publicação do fascículo
year = obj.year
month = obj.month
if year and month:
add_to_result("v64", year + month, result)
elif year:
add_to_result("v64", year, result)
add_to_result("v117", obj.journal.standard.code if obj.journal.standard else None, result)
add_to_result("v130", obj.journal.title if obj.journal.title else None, result)
add_items("v140", [sponsor.get_institution_name for sponsor in obj.journal.sponsor_history.all()], result)
add_to_result("v151", obj.journal.official.iso_short_title if obj.journal.official and obj.journal.official.iso_short_title else None, result)
add_items("v230", [pt.text for pt in obj.journal.official.parallel_titles if obj.journal.official and pt.text], result)
medline_titles = TitleInDatabase.objects.filter(journal=obj.journal, indexed_at__acronym__iexact="medline")
add_items("v421", [medline.title for medline in medline_titles], result)

add_items("v480", [publisher.get_institution_name for publisher in obj.journal.publisher_history.all()], result)

return result
11 changes: 7 additions & 4 deletions journal/api/v1/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,18 @@ class Meta:


class MissionSerializer(serializers.ModelSerializer):
language = serializers.CharField(source="language.code2")
language = serializers.SerializerMethodField()

class Meta:
model = models.Mission
fields = [
"rich_text",
"language",
]

def get_language(self, obj):
if obj.language is not None:
return obj.language.code2
return None

class JournalSerializer(serializers.ModelSerializer):
# Serializadores para campos de relacionamento, como 'official', devem corresponder aos campos do modelo.
Expand Down Expand Up @@ -182,7 +185,7 @@ def get_other_titles(self, obj):
def get_next_journal_title(self, obj):
if obj.official and obj.official.next_journal_title:
try:
journal_new_title = models.Journal.objects.get(title__icontains=obj.official.next_journal_title)
journal_new_title = models.Journal.objects.get(title__exact=obj.official.next_journal_title)
issn_print = journal_new_title.official.issn_print
issn_electronic = journal_new_title.official.issn_electronic
except models.Journal.DoesNotExist:
Expand All @@ -198,7 +201,7 @@ def get_previous_journal_title(self, obj):
if obj.official and obj.official.previous_journal_titles:
try:
old_journal = obj.official.old_title.get(
title__icontains=obj.official.previous_journal_titles
title__exact=obj.official.previous_journal_titles
)
old_issn_print = old_journal.issn_print
old_issn_electronic = old_journal.issn_electronic
Expand Down
14 changes: 13 additions & 1 deletion journal/api/v1/views.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
from django.db.models import Q
from rest_framework import viewsets
from rest_framework import viewsets, serializers

from journal import models
from .serializers import JournalSerializer

from core.validators import validate_params

class ArticleMetaFormatSerializer(serializers.ModelSerializer):
class Meta:
model = models.Journal

def to_representation(self, instance):
return instance.articlemeta_format

class GenericJournalViewSet(viewsets.ModelViewSet):
serializer_class = JournalSerializer
Expand Down Expand Up @@ -42,6 +47,7 @@ def get_queryset(self):
"until_date_created",
"from_date_updated",
"until_date_updated",
"formats",
"",
)

Expand Down Expand Up @@ -72,3 +78,9 @@ def get_queryset(self):
params["updated__lte"] = until_date_updated.replace("/", "-")

return queryset.filter(**params)

def get_serializer_class(self):
format_param = self.request.query_params.get("formats")
if format_param == "articlemeta":
return ArticleMetaFormatSerializer
return JournalSerializer
5 changes: 5 additions & 0 deletions journal/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,11 @@ def __str__(self):
title = self.title or str(self.official)
return f"{title} ({collection_acronym}) | ({issns})"

@property
def articlemeta_format(self):
from .sources.articlemeta_format import get_articlemeta_format_title
return get_articlemeta_format_title(self)

base_form_class = CoreAdminModelForm


Expand Down
Loading
Loading