From 32bb1d5ade9faa694c8972a1175dae51bc01e0bd Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 2 Jun 2026 20:51:01 -0300 Subject: [PATCH 01/11] Remove env collection --- config/settings/base.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index a2ebbb9..86762af 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -315,10 +315,6 @@ # Core API CORE_API_DOMAIN = env("CORE_API_DOMAIN", default="https://core.scielo.org") -CORE_COLLECTION_API_ENDPOINT = env( - "CORE_COLLECTION_API_ENDPOINT", - default="/api/v2/pid/collection/", -) CORE_JOURNAL_API_ENDPOINT = env( "CORE_JOURNAL_API_ENDPOINT", default="/api/v2/pid/journal/", @@ -331,7 +327,6 @@ "CORE_ISSUE_FROM_DATE_CREATED", default="2019-01-01", ) -CORE_COLLECTION_API_URL = f"{CORE_API_DOMAIN}{CORE_COLLECTION_API_ENDPOINT}" CORE_JOURNAL_API_URL = f"{CORE_API_DOMAIN}{CORE_JOURNAL_API_ENDPOINT}" #Aumento en el límite de campos From d2370fcbc9f8b2948cf3148979e434c6a953388c Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 2 Jun 2026 20:51:12 -0300 Subject: [PATCH 02/11] Remove modelo collection --- markup_doc/models.py | 45 -------------------------------------------- 1 file changed, 45 deletions(-) diff --git a/markup_doc/models.py b/markup_doc/models.py index bddbc37..d26a48d 100644 --- a/markup_doc/models.py +++ b/markup_doc/models.py @@ -276,40 +276,6 @@ class Meta: label = _("Ref Paragraph") -class CollectionValuesModel(models.Model): - acron = models.CharField(max_length=10, unique=True) - name = models.CharField(max_length=255) - - autocomplete_search_field = "acron" - - def autocomplete_label(self): - return str(self) - - def __str__(self): - return f"{self.acron.upper()} - {self.name}" - - -class CollectionModel(models.Model): - collection = models.ForeignKey( - CollectionValuesModel, null=True, blank=True, on_delete=models.SET_NULL - ) - - autocomplete_search_field = "collection.acron" - - def autocomplete_label(self): - return str(self) - - panels = [ - AutocompletePanel("collection"), - ] - - def __str__(self): - if not self.collection: - return "" - acron = self.collection.acron or "" - return f"{acron.upper()} - {acron}" - - class JournalModel(models.Model): title = models.TextField(_("Title"), null=True, blank=True) short_title = models.TextField(_("Short Title"), null=True, blank=True) @@ -400,14 +366,6 @@ def generate_issue_folder(self): ) -def get_default_collection_acron(): - try: - obj = CollectionModel.objects.select_related("collection").first() - return obj.collection.acron if obj and obj.collection else "" - except Exception: - return "" - - class ArticleDocxMarkup(CommonControlField, ClusterableModel): title = models.TextField(_("Document Title"), null=True, blank=True) file = models.FileField( @@ -434,7 +392,6 @@ class ArticleDocxMarkup(CommonControlField, ClusterableModel): default=ProcessStatus.PROCESSING, ) - collection = models.CharField(max_length=10, default=get_default_collection_acron) journal = models.ForeignKey( JournalModel, null=True, blank=True, on_delete=models.SET_NULL ) @@ -516,7 +473,6 @@ class ArticleDocxMarkup(CommonControlField, ClusterableModel): panels = [ FieldPanel("title"), FieldPanel("file"), - FieldPanel("collection"), AutocompletePanel("journal"), AutocompletePanel("issue"), ] @@ -606,7 +562,6 @@ class MarkupXML(ArticleDocxMarkup): ] panels_details = [ - FieldPanel("collection"), AutocompletePanel("journal"), FieldPanel("journal_title"), FieldPanel("short_title"), From d6e7cac4ca47fa23977b969ced09e025b7e326a4 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 2 Jun 2026 20:51:20 -0300 Subject: [PATCH 03/11] Remove task collection --- markup_doc/sync_api.py | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/markup_doc/sync_api.py b/markup_doc/sync_api.py index c31738d..cf1f8d1 100644 --- a/markup_doc/sync_api.py +++ b/markup_doc/sync_api.py @@ -7,7 +7,7 @@ from core.models import CoreSyncState from core.utils.requester import fetch_data as fetch from core.utils.sync_state import finalize_core_sync_state, track_max_from_item -from markup_doc.models import CollectionModel, CollectionValuesModel, Issue, JournalModel +from markup_doc.models import Issue, JournalModel logger = logging.getLogger(__name__) @@ -25,31 +25,6 @@ def _iter_api_pages(url, resource_name): url = data.get("next") -def sync_collection_from_api(): - url = settings.CORE_COLLECTION_API_URL - all_results = [] - - while url: - logger.info("Syncing collections page: %s", url) - data = fetch( - url, headers={"Accept": "application/json"}, json=True, timeout=(10, 60) - ) - all_results.extend(data["results"]) - url = data["next"] - - logger.info("Deleting existing collection data before sync") - CollectionModel.objects.all().delete() - CollectionValuesModel.objects.all().delete() - - for item in all_results: - acron = item.get("acron3") - name = item.get("main_name", "").strip() - if acron and name: - CollectionValuesModel.objects.update_or_create( - acron=acron, defaults={"name": name} - ) - - def _build_journal_from_api_item(item): title = item.get("title", None) short_title = item.get("short_title", None) @@ -94,7 +69,6 @@ def build_api_url_core(domain, endpoint, params): def sync_journals_from_api( - collection_acron=None, issn_scielo=None, from_date_updated=None, ): @@ -105,8 +79,6 @@ def sync_journals_from_api( ) params = {"from_date_updated": from_date_updated} - if collection_acron: - params["collection"] = collection_acron if issn_scielo: params["issn_scielo"] = issn_scielo From 13dab41c435d632dbe736ecd03e86bb6a7c67ddc Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 2 Jun 2026 20:51:32 -0300 Subject: [PATCH 04/11] Remove param collection --- markup_doc/tasks.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/markup_doc/tasks.py b/markup_doc/tasks.py index 130c16d..ac74b53 100644 --- a/markup_doc/tasks.py +++ b/markup_doc/tasks.py @@ -85,12 +85,10 @@ def clean_labels(text): @celery_app.task() def task_sync_journals_from_api( user_id=None, - collection_acron=None, issn_scielo=None, from_date_updated=None, ): sync_journals_from_api( - collection_acron=collection_acron, issn_scielo=issn_scielo, from_date_updated=from_date_updated, ) From 8050057b93d79f71c3fef78011b5922d91281e1d Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 2 Jun 2026 20:52:11 -0300 Subject: [PATCH 05/11] Remove view admin collection --- .../0005_remove_collection_models.py | 22 ++++++++++ markup_doc/static/js/xref-button.js | 2 +- markup_doc/wagtail_hooks.py | 43 +------------------ 3 files changed, 24 insertions(+), 43 deletions(-) create mode 100644 markup_doc/migrations/0005_remove_collection_models.py diff --git a/markup_doc/migrations/0005_remove_collection_models.py b/markup_doc/migrations/0005_remove_collection_models.py new file mode 100644 index 0000000..ebe7741 --- /dev/null +++ b/markup_doc/migrations/0005_remove_collection_models.py @@ -0,0 +1,22 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("markup_doc", "0004_articledocxmarkup_xref_status"), + ("markup_doc", "0003_remove_articledocxmarkup_dateiso_and_more"), + ] + + operations = [ + migrations.RemoveField( + model_name="articledocxmarkup", + name="collection", + ), + migrations.DeleteModel( + name="CollectionModel", + ), + migrations.DeleteModel( + name="CollectionValuesModel", + ), + ] diff --git a/markup_doc/static/js/xref-button.js b/markup_doc/static/js/xref-button.js index 2b64935..b92646f 100644 --- a/markup_doc/static/js/xref-button.js +++ b/markup_doc/static/js/xref-button.js @@ -179,7 +179,7 @@ document.addEventListener("DOMContentLoaded", function () { if ( path.indexOf('markupxml/edit') == -1 ){ return false; } - var ids = ['collection', 'journal_title', 'short_title', 'title_nlm', 'acronym', 'issn', 'pissn', 'eissn', 'pubname'] + var ids = ['journal_title', 'short_title', 'title_nlm', 'acronym', 'issn', 'pissn', 'eissn', 'pubname'] $.each(ids, function(i, val){ const collectionField = document.querySelector('#id_'+val); if (collectionField) { diff --git a/markup_doc/wagtail_hooks.py b/markup_doc/wagtail_hooks.py index 2b8d965..7d8f27f 100644 --- a/markup_doc/wagtail_hooks.py +++ b/markup_doc/wagtail_hooks.py @@ -23,7 +23,6 @@ from markup_doc import views from markup_doc.models import ( - CollectionModel, Issue, JournalModel, MarkupXML, @@ -31,7 +30,6 @@ ProcessStatus, UploadDocx, ) -from markup_doc.sync_api import sync_collection_from_api from markup_doc.tasks import get_labels, task_sync_journals_from_api, update_xml from xml_manager.wagtail_hooks import ( @@ -71,9 +69,6 @@ def xref_js(): class ArticleDocxCreateView(CreateView): def dispatch(self, request, *args, **kwargs): - if not CollectionModel.objects.exists(): - messages.warning(request, "Debes seleccionar primero una colección.") - return HttpResponseRedirect(self.get_success_url()) if not JournalModel.objects.exists(): messages.warning( request, "Espera un momento, aún no existen elementos en Journal." @@ -136,36 +131,6 @@ class MarkupXMLViewSet(SnippetViewSet): search_fields = ("title",) -class CollectionModelCreateView(CreateView): - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - sync_collection_from_api() - return context - - def form_valid(self, form): - form.instance.save() - task_sync_journals_from_api.delay() - return HttpResponseRedirect(self.get_success_url()) - - -class CollectionModelViewSet(SnippetViewSet): - model = CollectionModel - add_view_class = CollectionModelCreateView - menu_label = _("Coleção") - menu_icon = "folder-inverse" - add_to_admin_menu = False - exclude_from_explorer = False - list_per_page = 20 - list_display = ("collection",) - - -class JournalModelCreateView(CreateView): - def get_context_data(self, **kwargs): - context = super().get_context_data(**kwargs) - task_sync_journals_from_api - return context - - class JournalModelViewSet(SnippetViewSet): model = JournalModel menu_label = _("Periódicos") @@ -179,17 +144,12 @@ def index_view(self, request): response = super().index_view(request) if isinstance(response, TemplateResponse): - if not CollectionModel.objects.exists(): - messages.warning(request, "Debes seleccionar primero una colección.") - response.context_data["can_add"] = False - response.context_data["can_add_snippet"] = False - return response - if not JournalModel.objects.exists(): messages.warning( request, "Sincronizando journals desde la API, espera unos momentos…", ) + task_sync_journals_from_api.delay() response.context_data["can_add"] = False response.context_data["can_add_snippet"] = False return response @@ -239,7 +199,6 @@ class ScieloSnippetViewSetGroup(SnippetViewSetGroup): menu_icon = "folder-open-inverse" menu_order = get_menu_order("scielo") items = ( - CollectionModelViewSet, JournalModelViewSet, ) From 4ebecceff74590fd3f430af200e0e13eff786c2c Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Tue, 2 Jun 2026 20:56:27 -0300 Subject: [PATCH 06/11] remove ref function --- markup_doc/migrations/0001_initial.py | 1 - 1 file changed, 1 deletion(-) diff --git a/markup_doc/migrations/0001_initial.py b/markup_doc/migrations/0001_initial.py index 74340ef..505b753 100644 --- a/markup_doc/migrations/0001_initial.py +++ b/markup_doc/migrations/0001_initial.py @@ -145,7 +145,6 @@ class Migration(migrations.Migration): ( "collection", models.CharField( - default=markup_doc.models.get_default_collection_acron, max_length=10, ), ), From e605d72352e3fc23b974d61c5f76e7c1fc4f6c8d Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 3 Jun 2026 11:15:37 -0300 Subject: [PATCH 07/11] add rest_framework in THIRD_PARTY_APPS --- config/settings/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/config/settings/base.py b/config/settings/base.py index 86762af..b072cf9 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -70,6 +70,7 @@ ] THIRD_PARTY_APPS = [ + "rest_framework", "compressor", "wagtailautocomplete", ] From 7737907aa438088f39cf8c3a1a46b85510ce0203 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 3 Jun 2026 11:15:55 -0300 Subject: [PATCH 08/11] Fix name estatus to status --- reference/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/models.py b/reference/models.py index 404c9e5..684a045 100755 --- a/reference/models.py +++ b/reference/models.py @@ -21,7 +21,7 @@ class ReferenceStatus(models.IntegerChoices): class Reference(CommonControlField, ClusterableModel): mixed_citation = models.TextField(_("Mixed Citation"), null=False, blank=True) - estatus = models.IntegerField( + status = models.IntegerField( _("Reference status"), choices=ReferenceStatus.choices, blank=True, From 3f8b3c75f59ba10f46da3ecc567689a728f682c0 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 3 Jun 2026 11:16:50 -0300 Subject: [PATCH 09/11] Black --- config/api_router.py | 7 +++---- markup_doc/api/v1/views.py | 22 ++++++++++------------ reference/api/v1/views.py | 30 ++++++++++++------------------ 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/config/api_router.py b/config/api_router.py index 2889ac1..7f2efaa 100644 --- a/config/api_router.py +++ b/config/api_router.py @@ -1,8 +1,7 @@ from django.conf import settings -from rest_framework.routers import DefaultRouter, SimpleRouter - -from reference.api.v1.views import ReferenceViewSet from markup_doc.api.v1.views import ArticleViewSet +from reference.api.v1.views import ReferenceViewSet +from rest_framework.routers import DefaultRouter, SimpleRouter if settings.DEBUG: router = DefaultRouter() @@ -12,4 +11,4 @@ router.register("reference", ReferenceViewSet, basename="reference") router.register("first_block", ArticleViewSet, basename="first_block") -urlpatterns = router.urls \ No newline at end of file +urlpatterns = router.urls diff --git a/markup_doc/api/v1/views.py b/markup_doc/api/v1/views.py index 66938bf..fa8a76f 100755 --- a/markup_doc/api/v1/views.py +++ b/markup_doc/api/v1/views.py @@ -1,16 +1,16 @@ -from django.shortcuts import render +import json + from django.http import JsonResponse +from rest_framework.mixins import CreateModelMixin from rest_framework.permissions import IsAuthenticated from rest_framework.viewsets import GenericViewSet -from rest_framework.mixins import CreateModelMixin -from rest_framework.response import Response + from markup_doc.api.v1.serializers import ArticleDocxSerializer from markup_doc.marker import mark_article -import json - # Create your views here. + class ArticleViewSet( GenericViewSet, # generic view functionality CreateModelMixin, # handles POSTs @@ -27,17 +27,15 @@ def create(self, request, *args, **kwargs): def api_article(self, request): try: data = json.loads(request.body) - post_text = data.get('text') # Obtiene el parámetro - post_metadata = data.get('metadata') # Obtiene el parámetro + post_text = data.get("text") # Obtiene el parámetro + post_metadata = data.get("metadata") # Obtiene el parámetro resp_data = mark_article(post_text, post_metadata) response_data = { - 'message': resp_data, + "message": resp_data, } except json.JSONDecodeError: - response_data = { - 'error': 'Error processing' - } + response_data = {"error": "Error processing"} - return JsonResponse(response_data) \ No newline at end of file + return JsonResponse(response_data) diff --git a/reference/api/v1/views.py b/reference/api/v1/views.py index 20334a6..67ef4fd 100755 --- a/reference/api/v1/views.py +++ b/reference/api/v1/views.py @@ -1,18 +1,14 @@ -from django.shortcuts import render +import json + from django.http import JsonResponse +from rest_framework.mixins import CreateModelMixin from rest_framework.permissions import IsAuthenticated from rest_framework.viewsets import GenericViewSet -from rest_framework.mixins import CreateModelMixin -from rest_framework.response import Response + from reference.api.v1.serializers import ReferenceSerializer -from reference.marker import mark_references from reference.data_utils import get_reference +from reference.models import Reference, ReferenceStatus -import json - -from reference.models import Reference, ElementCitation, ReferenceStatus - -# Create your views here. class ReferenceViewSet( GenericViewSet, # generic view functionality @@ -31,8 +27,8 @@ def create(self, request, *args, **kwargs): def api_reference(self, request): try: data = json.loads(request.body) - post_reference = data.get('reference') # Obtiene el parámetro - post_type = data.get('type') # Obtiene el parámetro + post_reference = data.get("reference") # Obtiene el parámetro + post_type = data.get("type") # Obtiene el parámetro try: reference = Reference.objects.get(mixed_citation=post_reference) @@ -46,18 +42,16 @@ def api_reference(self, request): get_reference(new_reference.id) reference = Reference.objects.get(mixed_citation=post_reference) - - if post_type == 'xml': + + if post_type == "xml": reference_data = reference.element_citation.first().marked_xml else: reference_data = reference.element_citation.first().marked response_data = { - 'message': f'reference: {reference_data}', + "message": f"reference: {reference_data}", } except json.JSONDecodeError: - response_data = { - 'error': 'Error processing' - } + response_data = {"error": "Error processing"} - return JsonResponse(response_data) \ No newline at end of file + return JsonResponse(response_data) From 3313f5c1e4f9de475da614695169a3b718ff8d90 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 3 Jun 2026 11:18:20 -0300 Subject: [PATCH 10/11] Remove comentarios --- markup_doc/api/v1/views.py | 10 ++++------ reference/api/v1/views.py | 9 ++++----- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/markup_doc/api/v1/views.py b/markup_doc/api/v1/views.py index fa8a76f..bc33d8e 100755 --- a/markup_doc/api/v1/views.py +++ b/markup_doc/api/v1/views.py @@ -8,12 +8,10 @@ from markup_doc.api.v1.serializers import ArticleDocxSerializer from markup_doc.marker import mark_article -# Create your views here. - class ArticleViewSet( - GenericViewSet, # generic view functionality - CreateModelMixin, # handles POSTs + GenericViewSet, + CreateModelMixin ): serializer_class = ArticleDocxSerializer permission_classes = [IsAuthenticated] @@ -27,8 +25,8 @@ def create(self, request, *args, **kwargs): def api_article(self, request): try: data = json.loads(request.body) - post_text = data.get("text") # Obtiene el parámetro - post_metadata = data.get("metadata") # Obtiene el parámetro + post_text = data.get("text") + post_metadata = data.get("metadata") resp_data = mark_article(post_text, post_metadata) diff --git a/reference/api/v1/views.py b/reference/api/v1/views.py index 67ef4fd..8f3afff 100755 --- a/reference/api/v1/views.py +++ b/reference/api/v1/views.py @@ -11,8 +11,8 @@ class ReferenceViewSet( - GenericViewSet, # generic view functionality - CreateModelMixin, # handles POSTs + GenericViewSet, + CreateModelMixin ): serializer_class = ReferenceSerializer permission_classes = [IsAuthenticated] @@ -21,14 +21,13 @@ class ReferenceViewSet( ] def create(self, request, *args, **kwargs): - # Redirigir a la función api_reference() return self.api_reference(request) def api_reference(self, request): try: data = json.loads(request.body) - post_reference = data.get("reference") # Obtiene el parámetro - post_type = data.get("type") # Obtiene el parámetro + post_reference = data.get("reference") + post_type = data.get("type") try: reference = Reference.objects.get(mixed_citation=post_reference) From 953319d21f9b8963e0db4bc2a3ed9cba8dd2fab6 Mon Sep 17 00:00:00 2001 From: Samuel Veiga Rangel Date: Wed, 3 Jun 2026 11:18:52 -0300 Subject: [PATCH 11/11] Remove comentario --- reference/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reference/models.py b/reference/models.py index 684a045..afa3f0d 100755 --- a/reference/models.py +++ b/reference/models.py @@ -47,11 +47,11 @@ class ElementCitation(Orderable): marked_xml = models.TextField(_("Marked XML"), blank=True) score = models.IntegerField( - null=True, + null=True, blank=True, validators=[ - MinValueValidator(1), # Mínimo 1 - MaxValueValidator(10) # Máximo 10 + MinValueValidator(1), + MaxValueValidator(10) ], help_text=_("Rating from 1 to 10") )