From aeaa40cc45f673f9cc873c1699705bf3042cdfa0 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 28 Jan 2025 23:53:12 -0300 Subject: [PATCH 01/13] Fix MissionSerializer --- journal/api/v1/serializers.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/journal/api/v1/serializers.py b/journal/api/v1/serializers.py index 56e63d43..99e320d1 100644 --- a/journal/api/v1/serializers.py +++ b/journal/api/v1/serializers.py @@ -67,7 +67,7 @@ class Meta: class MissionSerializer(serializers.ModelSerializer): - language = serializers.CharField(source="language.code2") + language = serializers.SerializerMethodField() class Meta: model = models.Mission @@ -75,7 +75,10 @@ class Meta: "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. @@ -181,7 +184,7 @@ def get_other_titles(self, obj): def get_next_journal_title(self, obj): if 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: @@ -197,7 +200,7 @@ def get_previous_journal_title(self, obj): if 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 @@ -221,7 +224,6 @@ def get_toc_items(self, obj): "language": section.language.code2 if section.language else None }) return data - class Meta: model = models.Journal @@ -254,5 +256,4 @@ class Meta: "title_in_database", "url_logo", "mission", - ] From 2bea7ad4807147cef63b41dce7c36a9e67e05a23 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 28 Jan 2025 23:53:01 -0300 Subject: [PATCH 02/13] Adiciona formato articlemeta --- journal/models.py | 4 ++ journal/sources/api_article_meta.py | 105 ++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 journal/sources/api_article_meta.py diff --git a/journal/models.py b/journal/models.py index 6b9b7907..c5c4e400 100755 --- a/journal/models.py +++ b/journal/models.py @@ -903,6 +903,10 @@ def __str__(self): title = self.title or str(self.official) return f"{title} ({collection_acronym}) | ({issns})" + def articlemeta_format(self): + from journal.sources.api_article_meta import get_article_meta + return get_article_meta(self) + base_form_class = CoreAdminModelForm diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py new file mode 100644 index 00000000..6419de15 --- /dev/null +++ b/journal/sources/api_article_meta.py @@ -0,0 +1,105 @@ +from journal.models import SciELOJournal, TitleInDatabase + +def get_article_meta(obj): + result = {} + scielo_journal = SciELOJournal.objects.filter(journal=obj, collection__is_active=True).first() + publisher_exists = obj.publisher_history.exists() + + def add_to_result(key, value): + if value: + result[key] = value + + add_to_result("v5", [{"_": obj.type_of_literature}] if obj.type_of_literature else None) + add_to_result("v6", [{"_": obj.treatment_level}] if obj.treatment_level else None) + add_to_result("v10", [{"_": obj.center_code}] if obj.center_code else None) + add_to_result("v20", [{"_": obj.national_code}] if obj.national_code else None) + add_to_result("v30", [{"_": obj.identification_number}] if obj.identification_number else None) + + secs_code = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="secs") + add_to_result("v37", [{"_": sc.identifier} for sc in secs_code] if secs_code.exists() else None) + + add_to_result("v50", [{"_": scielo_journal.status}] if scielo_journal and scielo_journal.status else None) + add_to_result("v62", [{"_": ch.institution.institution.institution_identification.name} + for ch in obj.copyright_holder_history.all() if ch.institution] if obj.copyright_holder_history.exists() else None) + add_to_result("v66", [{"_": obj.ftp}] if obj.ftp else None) + add_to_result("v67", [{"_": obj.user_subscription}] if obj.user_subscription else None) + add_to_result("v68", [{"_": scielo_journal.journal_acron}] if scielo_journal and scielo_journal.journal_acron else None) + add_to_result("v69", [{"_": obj.journal_url}] if obj.journal_url else None) + add_to_result("v85", [{"_": obj.vocabulary.acronym}] if obj.vocabulary else None) + add_to_result("v100", [{"_": obj.title}] if obj.official and obj.official.title else None) + add_to_result("v110", [{"_": obj.subtitle}] if obj.subtitle else None) + add_to_result("v117", [{"_": obj.standard.code}] if obj.standard and obj.standard.code else None) + add_to_result("v130", [{"_": obj.section}] if obj.section else None) + add_to_result("v140", [{"_": sponsor.institution.institution.institution_identification.name} + for sponsor in obj.sponsor_history.all() if sponsor.institution] if obj.sponsor_history.exists() else None) + add_to_result("v150", [{"_": obj.short_title}] if obj.short_title else None) + add_to_result("v151", [{"_": obj.official.iso_short_title}] if obj.official and obj.official.iso_short_title else None) + + parallel_titles = [{"_": pt.text} for pt in obj.official.parallel_titles if pt.text] + add_to_result("v230", parallel_titles if parallel_titles else None) + + add_to_result("v240", [{"_": other_title.title} for other_title in obj.other_titles.all()] if obj.other_titles.exists() else None) + add_to_result("v301", [{"_": obj.official.initial_year}] if obj.official and obj.official.initial_year else None) + add_to_result("v302", [{"_": obj.official.initial_volume}] if obj.official and obj.official.initial_volume else None) + add_to_result("v303", [{"_": obj.official.initial_number}] if obj.official and obj.official.initial_number else None) + add_to_result("v304", [{"_": obj.official.terminate_year + obj.official.terminate_month}] if obj.official and obj.official.terminate_year else None) + add_to_result("v305", [{"_": obj.official.final_volume}] if obj.official and obj.official.final_volume else None) + add_to_result("v306", [{"_": obj.official.final_number}] if obj.official and obj.official.final_number else None) + + if publisher_exists: + add_to_result("v310", [{"_": publisher.institution.institution.location.country.name} + for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.country]) + add_to_result("v320", [{"_": publisher.institution.institution.location.state.name} + for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.state]) + add_to_result("v480", [{"_": publisher.institution.institution.institution_identification.name} + for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.country]) + add_to_result("v490", [{"_": publisher.institution.institution.location.city.name} + for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.city]) + + add_to_result("v330", [{"_": obj.level_of_publication}] if obj.level_of_publication else None) + add_to_result("v340", [{"_": obj.alphabet}] if obj.alphabet else None) + add_to_result("v350", [{"_": lang.code2} for lang in obj.text_language.all()] if obj.text_language.exists() else None) + add_to_result("v360", [{"_": lang.code2} for lang in obj.abstract_language.all()] if obj.abstract_language.exists() else None) + add_to_result("v380", [{"_": obj.frequency}] if obj.frequency else None) + + medline_titles = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="medline") + if medline_titles.exists(): + v420 = [{"_": medline.identifier} for medline in medline_titles if medline.identifier] + if v420: + add_to_result("v420", v420) + add_to_result("v421", [{"_": medline.title} for medline in medline_titles]) + + add_to_result("v430", [{"_": obj.classification}] if obj.classification else None) + + issns = [] + if obj.official and obj.official.issn_print: + issns.append({"_": obj.official.issn_print, "t": "PRINT"}) + if obj.official and obj.official.issn_electronic: + issns.append({"_": obj.official.issn_electronic, "t": "ONLIN"}) + add_to_result("v435", issns if issns else None) + + add_to_result("v440", [{"_": descriptor.value} for descriptor in obj.subject_descriptor.all()] if obj.subject_descriptor.exists() else None) + add_to_result("v441", [{"_": subject.value} for subject in obj.subject.all()] if obj.subject.exists() else None) + add_to_result("v450", [{"_": index.name} for index in obj.indexed_at.all()] if obj.indexed_at.exists() else None) + + add_to_result("v550", [{"_": obj.has_supplement}] if obj.has_supplement else None) + add_to_result("v560", [{"_": obj.is_supplement}] if obj.is_supplement else None) + + if obj.official and obj.official.old_title: + add_to_result("v610", [{"_": old_title.title} for old_title in obj.official.old_title.all()]) + if obj.official and obj.official.new_title: + add_to_result("v710", [{"_": obj.official.new_title.title}]) + + add_to_result("v900", [{"_": annotation.notes} for annotation in obj.annotation.all()] if obj.annotation.exists() else None) + add_to_result("v901", [{"l": mission.language.code2, "_": mission.get_text_pure} + for mission in obj.mission.all() if mission.language and mission.get_text_pure] if obj.mission else None) + + result["v940"] = [{"_": obj.created}] + result["v941"] = [{"_": obj.updated}] + + if scielo_journal: + result["collection"] = scielo_journal.collection.acron3 + + # Ordena o dicionário por chave + result = dict(sorted(result.items())) + return result \ No newline at end of file From 5d6234a34641af12153fb7476d6e7a5ce1d8c179 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 28 Jan 2025 23:51:34 -0300 Subject: [PATCH 03/13] Adiciona ArticleMetaFormatSerializer --- journal/api/v1/views.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/journal/api/v1/views.py b/journal/api/v1/views.py index 46d69027..efed48c3 100644 --- a/journal/api/v1/views.py +++ b/journal/api/v1/views.py @@ -1,12 +1,18 @@ from django.db.models import Q -from rest_framework import viewsets +from rest_framework import viewsets, serializers +from rest_framework.response import Response 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 @@ -42,6 +48,7 @@ def get_queryset(self): "until_date_created", "from_date_updated", "until_date_updated", + "formats", "", ) @@ -72,3 +79,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 From e8fd1960983f63956e952b6d75b5f82344481b02 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 28 Jan 2025 23:50:22 -0300 Subject: [PATCH 04/13] Adiciona property para texto puro em RichTextWithLanguage --- core/models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/models.py b/core/models.py index 78f6b235..b0e849f1 100755 --- a/core/models.py +++ b/core/models.py @@ -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 @@ -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: From 897b11da9f1bf6e2b4547b7c6f6637e84869b596 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 29 Jan 2025 00:18:59 -0300 Subject: [PATCH 05/13] Fix null --- journal/sources/api_article_meta.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py index 6419de15..f6bbdeb6 100644 --- a/journal/sources/api_article_meta.py +++ b/journal/sources/api_article_meta.py @@ -16,7 +16,7 @@ def add_to_result(key, value): add_to_result("v30", [{"_": obj.identification_number}] if obj.identification_number else None) secs_code = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="secs") - add_to_result("v37", [{"_": sc.identifier} for sc in secs_code] if secs_code.exists() else None) + add_to_result("v37", [{"_": sc.identifier} for sc in secs_code if sc.identifier] if secs_code.exists() else None) add_to_result("v50", [{"_": scielo_journal.status}] if scielo_journal and scielo_journal.status else None) add_to_result("v62", [{"_": ch.institution.institution.institution_identification.name} @@ -42,14 +42,21 @@ def add_to_result(key, value): add_to_result("v301", [{"_": obj.official.initial_year}] if obj.official and obj.official.initial_year else None) add_to_result("v302", [{"_": obj.official.initial_volume}] if obj.official and obj.official.initial_volume else None) add_to_result("v303", [{"_": obj.official.initial_number}] if obj.official and obj.official.initial_number else None) - add_to_result("v304", [{"_": obj.official.terminate_year + obj.official.terminate_month}] if obj.official and obj.official.terminate_year else None) + if obj.official: + year = obj.official.terminate_year + month = obj.official.terminate_month + if year and month: + add_to_result("v304", [{"_": year + month}]) + elif year: + add_to_result("v304", [{"_": year}]) + add_to_result("v305", [{"_": obj.official.final_volume}] if obj.official and obj.official.final_volume else None) add_to_result("v306", [{"_": obj.official.final_number}] if obj.official and obj.official.final_number else None) if publisher_exists: - add_to_result("v310", [{"_": publisher.institution.institution.location.country.name} + add_to_result("v310", [{"_": publisher.institution.institution.location.country.name or publisher.institution.institution.location.country.acronym} for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.country]) - add_to_result("v320", [{"_": publisher.institution.institution.location.state.name} + add_to_result("v320", [{"_": publisher.institution.institution.location.state.acronym or publisher.institution.institution.location.state.name} for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.state]) add_to_result("v480", [{"_": publisher.institution.institution.institution_identification.name} for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.country]) From d7787ae9f7414b60dd8731fa9e2ff342ffefb4f9 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 29 Jan 2025 00:21:24 -0300 Subject: [PATCH 06/13] adiciona collection a funcao add_to_result --- journal/sources/api_article_meta.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py index f6bbdeb6..cc69ce5e 100644 --- a/journal/sources/api_article_meta.py +++ b/journal/sources/api_article_meta.py @@ -9,6 +9,7 @@ def add_to_result(key, value): if value: result[key] = value + add_to_result("collection", scielo_journal.collection.acron3 if scielo_journal else None) add_to_result("v5", [{"_": obj.type_of_literature}] if obj.type_of_literature else None) add_to_result("v6", [{"_": obj.treatment_level}] if obj.treatment_level else None) add_to_result("v10", [{"_": obj.center_code}] if obj.center_code else None) @@ -103,9 +104,6 @@ def add_to_result(key, value): result["v940"] = [{"_": obj.created}] result["v941"] = [{"_": obj.updated}] - - if scielo_journal: - result["collection"] = scielo_journal.collection.acron3 # Ordena o dicionário por chave result = dict(sorted(result.items())) From 006fa214e6de15b6488140bd70a709306f3f0b41 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 29 Jan 2025 00:29:02 -0300 Subject: [PATCH 07/13] muda nome para get_articlemeta_format --- journal/sources/api_article_meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py index cc69ce5e..a2dcdb28 100644 --- a/journal/sources/api_article_meta.py +++ b/journal/sources/api_article_meta.py @@ -1,6 +1,6 @@ from journal.models import SciELOJournal, TitleInDatabase -def get_article_meta(obj): +def get_articlemeta_format(obj): result = {} scielo_journal = SciELOJournal.objects.filter(journal=obj, collection__is_active=True).first() publisher_exists = obj.publisher_history.exists() From b70678dd020b54b44ea14e1cc209eb4bf9635a49 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 29 Jan 2025 00:29:29 -0300 Subject: [PATCH 08/13] Coloca articlemeta_format como property --- journal/api/v1/views.py | 2 +- journal/models.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/journal/api/v1/views.py b/journal/api/v1/views.py index efed48c3..b360166f 100644 --- a/journal/api/v1/views.py +++ b/journal/api/v1/views.py @@ -12,7 +12,7 @@ class Meta: model = models.Journal def to_representation(self, instance): - return instance.articlemeta_format() + return instance.articlemeta_format class GenericJournalViewSet(viewsets.ModelViewSet): serializer_class = JournalSerializer diff --git a/journal/models.py b/journal/models.py index c5c4e400..47a42c99 100755 --- a/journal/models.py +++ b/journal/models.py @@ -903,9 +903,10 @@ def __str__(self): title = self.title or str(self.official) return f"{title} ({collection_acronym}) | ({issns})" + @property def articlemeta_format(self): - from journal.sources.api_article_meta import get_article_meta - return get_article_meta(self) + from journal.sources.api_article_meta import get_articlemeta_format + return get_articlemeta_format(self) base_form_class = CoreAdminModelForm From ef062d73169471ebb320d9b475ddd71022048f6f Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Sat, 8 Feb 2025 04:16:14 -0300 Subject: [PATCH 09/13] Cria property em BaseHistoryItem --- institution/models.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/institution/models.py b/institution/models.py index a1f195bd..3f6b57d9 100755 --- a/institution/models.py +++ b/institution/models.py @@ -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( From 4910e0990948ed77aea7055e6bbf0509dbc7cf25 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Sat, 8 Feb 2025 04:17:24 -0300 Subject: [PATCH 10/13] Realiza melhorias em add_to_result e cria add_items --- journal/sources/api_article_meta.py | 165 ++++++++++++++-------------- 1 file changed, 80 insertions(+), 85 deletions(-) diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py index a2dcdb28..761c7d68 100644 --- a/journal/sources/api_article_meta.py +++ b/journal/sources/api_article_meta.py @@ -1,110 +1,105 @@ from journal.models import SciELOJournal, TitleInDatabase +from journal.choices import STATUS def get_articlemeta_format(obj): result = {} scielo_journal = SciELOJournal.objects.filter(journal=obj, collection__is_active=True).first() - publisher_exists = obj.publisher_history.exists() - + publisher_history = obj.publisher_history.all() + + def add_items(key, items): + for item in items: + add_to_result(key, item) + def add_to_result(key, value): if value: - result[key] = value + if key not in result: + result[key] = [] + result[key].append({"_": value}) - add_to_result("collection", scielo_journal.collection.acron3 if scielo_journal else None) - add_to_result("v5", [{"_": obj.type_of_literature}] if obj.type_of_literature else None) - add_to_result("v6", [{"_": obj.treatment_level}] if obj.treatment_level else None) - add_to_result("v10", [{"_": obj.center_code}] if obj.center_code else None) - add_to_result("v20", [{"_": obj.national_code}] if obj.national_code else None) - add_to_result("v30", [{"_": obj.identification_number}] if obj.identification_number else None) + add_to_result("collection", scielo_journal.collection.acron3 if scielo_journal and scielo_journal.collection else None) + add_to_result("v5", obj.type_of_literature) + add_to_result("v6", obj.treatment_level) + add_to_result("v10", obj.center_code) + add_to_result("v20", obj.national_code) + add_to_result("v30", obj.identification_number) secs_code = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="secs") - add_to_result("v37", [{"_": sc.identifier} for sc in secs_code if sc.identifier] if secs_code.exists() else None) - - add_to_result("v50", [{"_": scielo_journal.status}] if scielo_journal and scielo_journal.status else None) - add_to_result("v62", [{"_": ch.institution.institution.institution_identification.name} - for ch in obj.copyright_holder_history.all() if ch.institution] if obj.copyright_holder_history.exists() else None) - add_to_result("v66", [{"_": obj.ftp}] if obj.ftp else None) - add_to_result("v67", [{"_": obj.user_subscription}] if obj.user_subscription else None) - add_to_result("v68", [{"_": scielo_journal.journal_acron}] if scielo_journal and scielo_journal.journal_acron else None) - add_to_result("v69", [{"_": obj.journal_url}] if obj.journal_url else None) - add_to_result("v85", [{"_": obj.vocabulary.acronym}] if obj.vocabulary else None) - add_to_result("v100", [{"_": obj.title}] if obj.official and obj.official.title else None) - add_to_result("v110", [{"_": obj.subtitle}] if obj.subtitle else None) - add_to_result("v117", [{"_": obj.standard.code}] if obj.standard and obj.standard.code else None) - add_to_result("v130", [{"_": obj.section}] if obj.section else None) - add_to_result("v140", [{"_": sponsor.institution.institution.institution_identification.name} - for sponsor in obj.sponsor_history.all() if sponsor.institution] if obj.sponsor_history.exists() else None) - add_to_result("v150", [{"_": obj.short_title}] if obj.short_title else None) - add_to_result("v151", [{"_": obj.official.iso_short_title}] if obj.official and obj.official.iso_short_title else None) - - parallel_titles = [{"_": pt.text} for pt in obj.official.parallel_titles if pt.text] - add_to_result("v230", parallel_titles if parallel_titles else None) - - add_to_result("v240", [{"_": other_title.title} for other_title in obj.other_titles.all()] if obj.other_titles.exists() else None) - add_to_result("v301", [{"_": obj.official.initial_year}] if obj.official and obj.official.initial_year else None) - add_to_result("v302", [{"_": obj.official.initial_volume}] if obj.official and obj.official.initial_volume else None) - add_to_result("v303", [{"_": obj.official.initial_number}] if obj.official and obj.official.initial_number else None) + add_items("v37", [sc.identifier for sc in secs_code if sc.identifier]) + add_to_result("v50", scielo_journal.status.lower() if scielo_journal.status else None) + add_items("v62", [ch.get_institution_name for ch in obj.copyright_holder_history.all()]) + add_to_result("v66", obj.ftp) + add_to_result("v67", obj.user_subscription) + add_to_result("v68", scielo_journal.journal_acron if scielo_journal and scielo_journal.journal_acron else None) + add_to_result("v69", obj.journal_url) + add_to_result("v85", obj.vocabulary.acronym) + add_to_result("v110", obj.subtitle) + add_to_result("v117", obj.standard.code if obj.standard and obj.standard.code else None) + add_to_result("v130", obj.section) + add_items("v140", [sponsor.get_institution_name for sponsor in obj.sponsor_history.all()]) + add_to_result("v150", obj.short_title) + add_to_result("v240", [other_title.title for other_title in obj.other_titles.all()]) + + # Data of the object official if obj.official: + add_to_result("v100", obj.title if obj.official.title else None) + add_to_result("v151", obj.official.iso_short_title if obj.official.iso_short_title else None) + add_items("v230", [pt.text for pt in obj.official.parallel_titles if pt.text]) + add_to_result("v301", obj.official.initial_year if obj.official.initial_year else None) + add_to_result("v302", obj.official.initial_volume if obj.official.initial_volume else None) + add_to_result("v303", obj.official.initial_number if obj.official.initial_number else None) + year = obj.official.terminate_year month = obj.official.terminate_month + if year and month: - add_to_result("v304", [{"_": year + month}]) + add_to_result("v304", year + month) elif year: - add_to_result("v304", [{"_": year}]) - - add_to_result("v305", [{"_": obj.official.final_volume}] if obj.official and obj.official.final_volume else None) - add_to_result("v306", [{"_": obj.official.final_number}] if obj.official and obj.official.final_number else None) - - if publisher_exists: - add_to_result("v310", [{"_": publisher.institution.institution.location.country.name or publisher.institution.institution.location.country.acronym} - for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.country]) - add_to_result("v320", [{"_": publisher.institution.institution.location.state.acronym or publisher.institution.institution.location.state.name} - for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.state]) - add_to_result("v480", [{"_": publisher.institution.institution.institution_identification.name} - for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.country]) - add_to_result("v490", [{"_": publisher.institution.institution.location.city.name} - for publisher in obj.publisher_history.all() if publisher.institution and publisher.institution.institution.location and publisher.institution.institution.location.city]) - - add_to_result("v330", [{"_": obj.level_of_publication}] if obj.level_of_publication else None) - add_to_result("v340", [{"_": obj.alphabet}] if obj.alphabet else None) - add_to_result("v350", [{"_": lang.code2} for lang in obj.text_language.all()] if obj.text_language.exists() else None) - add_to_result("v360", [{"_": lang.code2} for lang in obj.abstract_language.all()] if obj.abstract_language.exists() else None) - add_to_result("v380", [{"_": obj.frequency}] if obj.frequency else None) + add_to_result("v304", year) + add_to_result("v305", obj.official.final_volume if obj.official.final_volume else None) + add_to_result("v306", obj.official.final_number if obj.official and obj.official.final_number else None) + + issns = [] + if obj.official.issn_print: + issns.append({"_": obj.official.issn_print, "t": "PRINT"}) + if obj.official.issn_electronic: + issns.append({"_": obj.official.issn_electronic, "t": "ONLIN"}) + result["435"] = issns + + if obj.official.old_title.all(): + add_items("v610", [old_title.title for old_title in obj.official.old_title.all()]) + if obj.official.new_title: + add_to_result("v710", obj.official.new_title.title) + + if publisher_history: + add_to_result("v310", [{"_": publisher.get_institution_country_name} for publisher in publisher_history if publisher.get_institution_country_name]) + add_to_result("v320", [{"_": publisher.get_instition_state_acronym} for publisher in publisher_history if publisher.get_instition_state_acronym]) + add_to_result("v480", [{"_": publisher.get_institution_name} for publisher in publisher_history if publisher.get_institution_name]) + add_to_result("v490", [{"_": publisher.get_institution_city_name} for publisher in publisher_history]) + + add_to_result("v330", obj.level_of_publication if obj.level_of_publication else None) + add_to_result("v340", obj.alphabet if obj.alphabet else None) + add_items("v350", [lang.code2 for lang in obj.text_language.all()]) + add_items("v360", [lang.code2 for lang in obj.abstract_language.all()]) + add_to_result("v380", obj.frequency if obj.frequency else None) medline_titles = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="medline") if medline_titles.exists(): - v420 = [{"_": medline.identifier} for medline in medline_titles if medline.identifier] - if v420: - add_to_result("v420", v420) + add_items("v420", [medline.identifier for medline in medline_titles]) add_to_result("v421", [{"_": medline.title} for medline in medline_titles]) + add_to_result("v430", obj.classification) - add_to_result("v430", [{"_": obj.classification}] if obj.classification else None) + add_items("v440", [descriptor.value for descriptor in obj.subject_descriptor.all()]) + add_items("v441", [subject.value for subject in obj.subject.all()]) + add_items("v450", [index.name for index in obj.indexed_at.all()]) - issns = [] - if obj.official and obj.official.issn_print: - issns.append({"_": obj.official.issn_print, "t": "PRINT"}) - if obj.official and obj.official.issn_electronic: - issns.append({"_": obj.official.issn_electronic, "t": "ONLIN"}) - add_to_result("v435", issns if issns else None) + add_to_result("v550", obj.has_supplement) + add_to_result("v560", obj.is_supplement) - add_to_result("v440", [{"_": descriptor.value} for descriptor in obj.subject_descriptor.all()] if obj.subject_descriptor.exists() else None) - add_to_result("v441", [{"_": subject.value} for subject in obj.subject.all()] if obj.subject.exists() else None) - add_to_result("v450", [{"_": index.name} for index in obj.indexed_at.all()] if obj.indexed_at.exists() else None) + add_items("v900", [annotation.notes for annotation in obj.annotation.all()]) + result["v901"] = [{"l": mission.language.code2, "_": mission.get_text_pure} + for mission in obj.mission.all() if mission.language and mission.get_text_pure] if obj.mission else None - add_to_result("v550", [{"_": obj.has_supplement}] if obj.has_supplement else None) - add_to_result("v560", [{"_": obj.is_supplement}] if obj.is_supplement else None) + add_to_result("v940", obj.created) + add_to_result("v941", obj.updated) - if obj.official and obj.official.old_title: - add_to_result("v610", [{"_": old_title.title} for old_title in obj.official.old_title.all()]) - if obj.official and obj.official.new_title: - add_to_result("v710", [{"_": obj.official.new_title.title}]) - - add_to_result("v900", [{"_": annotation.notes} for annotation in obj.annotation.all()] if obj.annotation.exists() else None) - add_to_result("v901", [{"l": mission.language.code2, "_": mission.get_text_pure} - for mission in obj.mission.all() if mission.language and mission.get_text_pure] if obj.mission else None) - - result["v940"] = [{"_": obj.created}] - result["v941"] = [{"_": obj.updated}] - - # Ordena o dicionário por chave - result = dict(sorted(result.items())) return result \ No newline at end of file From c7a28c8618af5e957204dec0d160f1f6c1cc5846 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Sat, 8 Feb 2025 04:23:53 -0300 Subject: [PATCH 11/13] =?UTF-8?q?Realiza=20mudan=C3=A7as=20de=20chamada=20?= =?UTF-8?q?para=20publisher=20e=20medline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- journal/sources/api_article_meta.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py index 761c7d68..9fa80739 100644 --- a/journal/sources/api_article_meta.py +++ b/journal/sources/api_article_meta.py @@ -71,10 +71,10 @@ def add_to_result(key, value): add_to_result("v710", obj.official.new_title.title) if publisher_history: - add_to_result("v310", [{"_": publisher.get_institution_country_name} for publisher in publisher_history if publisher.get_institution_country_name]) - add_to_result("v320", [{"_": publisher.get_instition_state_acronym} for publisher in publisher_history if publisher.get_instition_state_acronym]) - add_to_result("v480", [{"_": publisher.get_institution_name} for publisher in publisher_history if publisher.get_institution_name]) - add_to_result("v490", [{"_": publisher.get_institution_city_name} for publisher in publisher_history]) + add_items("v310", [publisher.get_institution_country_name for publisher in publisher_history]) + add_items("v320", [publisher.get_instition_state_acronym for publisher in publisher_history]) + add_items("v480", [publisher.get_institution_name for publisher in publisher_history]) + add_items("v490", [publisher.get_institution_city_name for publisher in publisher_history]) add_to_result("v330", obj.level_of_publication if obj.level_of_publication else None) add_to_result("v340", obj.alphabet if obj.alphabet else None) @@ -83,9 +83,8 @@ def add_to_result(key, value): add_to_result("v380", obj.frequency if obj.frequency else None) medline_titles = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="medline") - if medline_titles.exists(): - add_items("v420", [medline.identifier for medline in medline_titles]) - add_to_result("v421", [{"_": medline.title} for medline in medline_titles]) + add_items("v420", [medline.identifier for medline in medline_titles]) + add_items("v421", [medline.title for medline in medline_titles]) add_to_result("v430", obj.classification) add_items("v440", [descriptor.value for descriptor in obj.subject_descriptor.all()]) From 7cd61f3c4443596cf0c392175f3a4aafe17d73f7 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Sat, 8 Feb 2025 04:32:28 -0300 Subject: [PATCH 12/13] black --- journal/sources/api_article_meta.py | 127 +++++++++++++++++++++------- 1 file changed, 98 insertions(+), 29 deletions(-) diff --git a/journal/sources/api_article_meta.py b/journal/sources/api_article_meta.py index 9fa80739..96a2c993 100644 --- a/journal/sources/api_article_meta.py +++ b/journal/sources/api_article_meta.py @@ -1,53 +1,89 @@ from journal.models import SciELOJournal, TitleInDatabase from journal.choices import STATUS + def get_articlemeta_format(obj): result = {} - scielo_journal = SciELOJournal.objects.filter(journal=obj, collection__is_active=True).first() + scielo_journal = SciELOJournal.objects.filter( + journal=obj, collection__is_active=True + ).first() publisher_history = obj.publisher_history.all() - + def add_items(key, items): for item in items: add_to_result(key, item) - + def add_to_result(key, value): if value: if key not in result: result[key] = [] result[key].append({"_": value}) - add_to_result("collection", scielo_journal.collection.acron3 if scielo_journal and scielo_journal.collection else None) + add_to_result( + "collection", + ( + scielo_journal.collection.acron3 + if scielo_journal and scielo_journal.collection + else None + ), + ) add_to_result("v5", obj.type_of_literature) add_to_result("v6", obj.treatment_level) add_to_result("v10", obj.center_code) add_to_result("v20", obj.national_code) add_to_result("v30", obj.identification_number) - secs_code = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="secs") + secs_code = TitleInDatabase.objects.filter( + journal=obj, indexed_at__acronym__iexact="secs" + ) add_items("v37", [sc.identifier for sc in secs_code if sc.identifier]) - add_to_result("v50", scielo_journal.status.lower() if scielo_journal.status else None) - add_items("v62", [ch.get_institution_name for ch in obj.copyright_holder_history.all()]) + add_to_result( + "v50", scielo_journal.status.lower() if scielo_journal.status else None + ) + add_items( + "v62", [ch.get_institution_name for ch in obj.copyright_holder_history.all()] + ) add_to_result("v66", obj.ftp) add_to_result("v67", obj.user_subscription) - add_to_result("v68", scielo_journal.journal_acron if scielo_journal and scielo_journal.journal_acron else None) + add_to_result( + "v68", + ( + scielo_journal.journal_acron + if scielo_journal and scielo_journal.journal_acron + else None + ), + ) add_to_result("v69", obj.journal_url) add_to_result("v85", obj.vocabulary.acronym) add_to_result("v110", obj.subtitle) - add_to_result("v117", obj.standard.code if obj.standard and obj.standard.code else None) + add_to_result( + "v117", obj.standard.code if obj.standard and obj.standard.code else None + ) add_to_result("v130", obj.section) - add_items("v140", [sponsor.get_institution_name for sponsor in obj.sponsor_history.all()]) + add_items( + "v140", [sponsor.get_institution_name for sponsor in obj.sponsor_history.all()] + ) add_to_result("v150", obj.short_title) add_to_result("v240", [other_title.title for other_title in obj.other_titles.all()]) - - # Data of the object official + + # Data of the object official if obj.official: add_to_result("v100", obj.title if obj.official.title else None) - add_to_result("v151", obj.official.iso_short_title if obj.official.iso_short_title else None) + add_to_result( + "v151", + obj.official.iso_short_title if obj.official.iso_short_title else None, + ) add_items("v230", [pt.text for pt in obj.official.parallel_titles if pt.text]) - add_to_result("v301", obj.official.initial_year if obj.official.initial_year else None) - add_to_result("v302", obj.official.initial_volume if obj.official.initial_volume else None) - add_to_result("v303", obj.official.initial_number if obj.official.initial_number else None) - + add_to_result( + "v301", obj.official.initial_year if obj.official.initial_year else None + ) + add_to_result( + "v302", obj.official.initial_volume if obj.official.initial_volume else None + ) + add_to_result( + "v303", obj.official.initial_number if obj.official.initial_number else None + ) + year = obj.official.terminate_year month = obj.official.terminate_month @@ -55,8 +91,17 @@ def add_to_result(key, value): add_to_result("v304", year + month) elif year: add_to_result("v304", year) - add_to_result("v305", obj.official.final_volume if obj.official.final_volume else None) - add_to_result("v306", obj.official.final_number if obj.official and obj.official.final_number else None) + add_to_result( + "v305", obj.official.final_volume if obj.official.final_volume else None + ) + add_to_result( + "v306", + ( + obj.official.final_number + if obj.official and obj.official.final_number + else None + ), + ) issns = [] if obj.official.issn_print: @@ -66,23 +111,40 @@ def add_to_result(key, value): result["435"] = issns if obj.official.old_title.all(): - add_items("v610", [old_title.title for old_title in obj.official.old_title.all()]) + add_items( + "v610", [old_title.title for old_title in obj.official.old_title.all()] + ) if obj.official.new_title: add_to_result("v710", obj.official.new_title.title) if publisher_history: - add_items("v310", [publisher.get_institution_country_name for publisher in publisher_history]) - add_items("v320", [publisher.get_instition_state_acronym for publisher in publisher_history]) - add_items("v480", [publisher.get_institution_name for publisher in publisher_history]) - add_items("v490", [publisher.get_institution_city_name for publisher in publisher_history]) + add_items( + "v310", + [publisher.get_institution_country_name for publisher in publisher_history], + ) + add_items( + "v320", + [publisher.get_instition_state_acronym for publisher in publisher_history], + ) + add_items( + "v480", [publisher.get_institution_name for publisher in publisher_history] + ) + add_items( + "v490", + [publisher.get_institution_city_name for publisher in publisher_history], + ) - add_to_result("v330", obj.level_of_publication if obj.level_of_publication else None) + add_to_result( + "v330", obj.level_of_publication if obj.level_of_publication else None + ) add_to_result("v340", obj.alphabet if obj.alphabet else None) add_items("v350", [lang.code2 for lang in obj.text_language.all()]) add_items("v360", [lang.code2 for lang in obj.abstract_language.all()]) add_to_result("v380", obj.frequency if obj.frequency else None) - medline_titles = TitleInDatabase.objects.filter(journal=obj, indexed_at__acronym__iexact="medline") + medline_titles = TitleInDatabase.objects.filter( + journal=obj, indexed_at__acronym__iexact="medline" + ) add_items("v420", [medline.identifier for medline in medline_titles]) add_items("v421", [medline.title for medline in medline_titles]) add_to_result("v430", obj.classification) @@ -95,10 +157,17 @@ def add_to_result(key, value): add_to_result("v560", obj.is_supplement) add_items("v900", [annotation.notes for annotation in obj.annotation.all()]) - result["v901"] = [{"l": mission.language.code2, "_": mission.get_text_pure} - for mission in obj.mission.all() if mission.language and mission.get_text_pure] if obj.mission else None + result["v901"] = ( + [ + {"l": mission.language.code2, "_": mission.get_text_pure} + for mission in obj.mission.all() + if mission.language and mission.get_text_pure + ] + if obj.mission + else None + ) add_to_result("v940", obj.created) add_to_result("v941", obj.updated) - return result \ No newline at end of file + return result From 0413de420f2411362da372b08449ce01ddd8cfa5 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Sun, 9 Feb 2025 22:27:53 -0300 Subject: [PATCH 13/13] Realoca importacao de get_article_meta_format --- journal/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/journal/models.py b/journal/models.py index 47a42c99..c01d7c3e 100755 --- a/journal/models.py +++ b/journal/models.py @@ -52,6 +52,7 @@ from vocabulary.models import Vocabulary from thematic_areas.models import ThematicArea +from .sources.api_article_meta import get_articlemeta_format from . import choices User = get_user_model() @@ -905,7 +906,6 @@ def __str__(self): @property def articlemeta_format(self): - from journal.sources.api_article_meta import get_articlemeta_format return get_articlemeta_format(self) base_form_class = CoreAdminModelForm