Refactor: criar packtools/sps/validation/models/ separando modelos exclusivos de validação#1180
Refactor: criar packtools/sps/validation/models/ separando modelos exclusivos de validação#1180
Conversation
Create packtools/sps/validation/models/ directory and migrate 15 classes that are only used by validation code from models/ and models/v2/: New files in validation/models/: - app_group.py (XmlAppGroup) - accessibility_data.py (XMLAccessibilityData) - article_data_availability.py (DataAvailability) - author_notes.py (XMLAuthorNotes) - fig.py (ArticleFigs) - fn.py (XMLFns) - formula.py (ArticleFormulas) - graphic.py (XmlGraphic) - media.py (XmlMedias) - peer_review.py (PeerReview, CustomMeta) - supplementary_material.py (XmlSupplementaryMaterials) - tablewrap.py (ArticleTableWrappers) - abstract.py (XMLAbstracts, from v2) - article_toc_sections.py (ArticleTocSections, from v2) - article_xref.py (XMLCrossReference, from v2) Original model files retain only a module-level __getattr__ that emits DeprecationWarning and re-exports the class from its new location, preserving backward compatibility for external code. All validation/ imports updated to use the new validation/models/ locations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
- Remove unused XmlGraphic import from validation/supplementary_material.py - Remove duplicate 'import warnings as _warnings' from models/accessibility_data.py Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
|
@copilot por favor continue, o PR não está completo são 27 issues no total |
Analisei todos os 27 pares. Aqui está o resumo: 15 pares com migração realizada (arquivos criados em 12 pares sem migração necessária (modelos de dados puros):
Todos os 27 sub-issues foram analisados e o critério de separação foi aplicado em cada par. |
There was a problem hiding this comment.
Instrução para revisão e correção de impacto
Revise as alterações deste PR e verifique se algum dos modelos de dados listados abaixo foi modificado, movido ou removido. Para cada modelo afetado, corrija o problema dentro do packtools de forma que os consumidores listados não precisem de nenhuma alteração.
Contexto
Este PR realiza uma refatoração interna do packtools com o objetivo de separar modelos exclusivos de validação para a pasta packtools/sps/validation/models/. No entanto, os modelos listados mais adiante e encontrados em packtools/sps/models/ não devem ter sua interface pública alterada, pois são consumidos diretamente por aplicações externas.
Ação esperada
- Identifique quais arquivos em
packtools/sps/models/foram modificados neste PR - Cruze esses arquivos com a lista de consumidores abaixo
- Para cada modelo alterado que apareça na lista, corrija o problema dentro do
packtools
garantindo que:- os caminhos de import permaneçam os mesmos
- as classes, atributos e métodos públicos permaneçam acessíveis
- os arquivos das aplicações externas (
scms-upload,core) não sejam modificados
- Se nenhum modelo da lista foi alterado, confirme explicitamente que os consumidores não
são impactados
Consumidores identificados
scieloorg/scms-upload
| Arquivo | Modelos importados do packtools |
|---|---|
article/controller.py |
ArticleIds |
package/models.py |
ArticleAssets (v2) |
publication/utils/document.py |
XMLAbstracts (v2), ArticleAndSubArticles, ArticleContribs, DoiWithLang, ArticleIds, ArticleRenditions, ArticleTitles, ArticleTocSections, ArticleMetaIssue, KwdGroup, RelatedItems |
proc/source_core_api.py |
ISSN, Title, ArticleDates, ArticleMetaIssue |
upload/utils/package_utils.py |
ArticleAssets, Authors, ArticleRenditions, ArticleTitles |
article/models.py |
ArticleTitles, ArticleTocSections |
migration/controller.py |
ArticleAndSubArticles, ArticleAssets (v2) |
upload/test_controller.py |
ISSN, Title, ArticleMetaIssue, ArticleDates |
scieloorg/core
| Arquivo | Modelos importados do packtools |
|---|---|
article/sources/xmlsps.py |
ArticleAbstract, ArticleAndSubArticles, ArticleContribs, XMLContribs, DataAvailability, DoiWithLang, ArticleIds, ArticleLicense, ArticleTitles, ArticleDates, ArticleMetaIssue, FundingGroup, ISSN, Title, ArticleKeywords, ArticleTocSections (v2), RelatedArticles (v2) |
Formato de saída esperado
Para cada modelo corrigido:
Modelo afetado: <nome do modelo>
Arquivo modificado no PR: <caminho no packtools>
Correção aplicada: <descrição da correção — ex: re-export via __init__.py, alias de compatibilidade etc.>
Consumidores preservados:
- <aplicação> / <arquivo>
Se nenhum modelo da lista foi alterado:
Nenhum modelo consumido externamente foi alterado neste PR.
Consumidores não impactados.
|
@copilot atenda a seguinte demanda #1180 (review) |
Revisão completa dos impactos nos consumidores externos realizada. Resultados: Modelos do PR que estão na lista de consumidores:
Todos os outros modelos listados na tabela de consumidores ( O mecanismo de compatibilidade usa
Nenhum arquivo dos consumidores externos precisa ser alterado.
Os stubs de retrocompatibilidade já estão implementados para todos os modelos que impactam os consumidores externos. Veja o detalhe completo no comentário de revisão acima. Nenhum arquivo de |
Separação estrutural entre modelos de dados puros (
sps/models/) e modelos cuja existência se justifica exclusivamente pela camada de validação (sps/validation/models/). Nenhum comportamento foi alterado.O que esse PR faz?
Cria o pacote
packtools/sps/validation/models/e migra para ele as classes que existem apenas para suportar validação — tipicamente wrappers que constroem dicts estruturados com chaves comotitle,response,expected_value,got_value,advice, etc.Todos os 27 pares foram analisados segundo o critério: "O dado/comportamento teria valor fora do contexto de validação?"
Migrados para
validation/models/(15 módulos criados):abstract.pyXMLAbstractsmodels/v2/abstract.pyarticle_toc_sections.pyArticleTocSectionsmodels/v2/article_toc_sections.pyarticle_xref.pyXMLCrossReferencemodels/v2/article_xref.pyaccessibility_data.pyXMLAccessibilityDatamodels/accessibility_data.pyapp_group.pyXmlAppGroupmodels/app_group.pyarticle_data_availability.pyDataAvailabilitymodels/article_data_availability.pyauthor_notes.pyXMLAuthorNotesmodels/author_notes.pyfig.pyArticleFigsmodels/fig.pyfn.pyArticleFnsmodels/fn.pyformula.pyArticleFormulasmodels/formula.pygraphic.pyXmlGraphicmodels/graphic.pymedia.pyXmlMediasmodels/media.pypeer_review.pyPeerReviewValidationDatamodels/peer_review.pysupplementary_material.pyXmlSupplementaryMaterialsmodels/supplementary_material.pytablewrap.pyArticleTableWrappersmodels/tablewrap.py12 pares analisados sem migração necessária — todos os modelos são extratores de dados genéricos com valor fora do contexto de validação:
#1154 aff—FulltextAffiliationstambém é usado porarticle_contribs.py#1155 article_assets— sem arquivo de validação correspondente;ArticleAssets/Assetsão de uso geral#1158 related_articles—FulltextRelatedArticlesé modelo de dados genérico#1161 article_and_subarticles—Fulltext/ArticleAndSubArticlessão base para todo o sistema#1162 article_contribs—TextContribs/XMLContribssão extratores gerais#1164 article_license—ArticleLicense/Licensesão extratores gerais#1166 dates—Date/FulltextDates/XMLDatessão extratores gerais#1170 front_articlemeta_issue—ArticleMetaIssueé extrator de dados puro#1171 funding_group—FundingGroupé extrator de dados geral#1173 journal_meta—ISSN/Acronym/Title/Publisher/JournalIDsão modelos puros#1176 references—Reference/XMLReferencessão extratores gerais#1179 visual_resource_base—VisualResourceBase/XmlVisualResourcesão classes base usadas por múltiplos modelos visuaisRetrocompatibilidade e impacto em consumidores externos: os arquivos de modelo originais mantêm stubs
__getattr__(PEP 562, Python 3.7+) que reexportam as classes migradas e emitemDeprecationWarning, evitando quebra de importações existentes. Este mecanismo é acionado tanto porfrom module import namequanto pormodule.name, garantindo que aplicações externas (scms-upload,core) não precisem de nenhuma alteração.Os três modelos migrados que são consumidos por aplicações externas têm stubs em seus caminhos originais:
XMLAbstractspacktools.sps.models.v2.abstractscms-upload,coreArticleTocSectionspacktools.sps.models.v2.article_toc_sectionsscms-upload,coreDataAvailabilitypacktools.sps.models.article_data_availabilitycoreTodos os demais modelos listados na tabela de consumidores externos (
ArticleIds,ArticleAssets,ArticleContribs,ArticleAndSubArticles,ISSN,Title,ArticleDates,ArticleMetaIssue,FundingGroup,ArticleLicense,XMLContribs,ArticleKeywords,RelatedArticles, etc.) não foram modificados neste PR.Onde a revisão poderia começar?
packtools/sps/validation/models/— ler__init__.pye qualquer módulo migrado (ex:abstract.py,formula.py) para verificar o critério de separação aplicado. Em seguida, conferir o stub de retrocompatibilidade empacktools/sps/models/v2/abstract.py.Como este poderia ser testado manualmente?
Algum cenário de contexto que queira dar?
Os 97 falhas de teste observadas na suite são pré-existentes — confirmadas na mesma quantidade antes e depois das mudanças deste PR. Nenhuma regressão foi introduzida.
Os arquivos em
models/v2/têm precedência sobremodels/de nível superior; por isso os correlatos de nível superior não foram alterados.Para os 12 pares sem migração, o critério aplicado foi: a classe também é importada ou utilizada em código não relacionado à validação (ex:
Fulltexté base para todo o sistema;FundingGroupé usado em processamento geral de pacotes), ou não existe arquivo de validação correspondente. Nesses casos, mover a classe criaria dependência circular ou quebraria o princípio de mínimo acoplamento.Screenshots
N/A
Quais são tickets relevantes?
Sub-issues atendidos: #1153, #1154, #1155, #1156, #1157, #1158, #1159, #1160, #1161, #1162, #1163, #1164, #1165, #1166, #1167, #1168, #1169, #1170, #1171, #1172, #1173, #1174, #1175, #1176, #1177, #1178, #1179
Referências
Original prompt
Contexto
Esta PR resolve a epic #1146 e seus 27 sub-issues (#1153 a #1179), implementando a separação clara entre modelos de dados puros e modelos exclusivos de validação no pacote
packtools.Objetivo
Criar a pasta
packtools/sps/validation/models/para abrigar os modelos cuja existência se justifica exclusivamente pelas necessidades da camada de validação. Os modelos puros de extração/estruturação do XML permanecem empacktools/sps/models/.Arquitetura esperada
Critério de separação
Para cada par (modelo de dados + arquivo de validação), avalie cada classe/método/atributo do modelo segundo o critério:
Exemplos típicos do que deve migrar para
validation/models/:dataagregada formatada especificamente para regras de validaçãoObservação importante sobre
models/v2/A pasta
packtools/sps/models/v2/contém modelos atualizados que substituem seus correlatos do nível acima. Apenas use os modelos dev2/quando existir correlato nessa pasta. Os arquivos no nível superiorpacktools/sps/models/devem ser mantidos sem alteração quando houver correlato emv2/, pois outras aplicações dependem deles.Arquivos em
models/v2/(têm precedência):abstract.py,aff.py,article_assets.py,article_toc_sections.py,article_xref.py,related_articles.pyPares a refatorar (27 sub-issues)
Pares com modelo em
models/v2/(issues #1153–#1158)packtools/sps/models/v2/abstract.pypacktools/sps/validation/article_abstract.pypacktools/sps/models/v2/aff.pypacktools/sps/validation/aff.pypacktools/sps/models/v2/article_assets.pypacktools/sps/models/v2/article_toc_sections.pypacktools/sps/validation/article_toc_sections.pypacktools/sps/models/v2/article_xref.pypacktools/sps/validation/article_xref.pypacktools/sps/models/v2/related_articles.pypacktools/sps/validation/related_articles.pyPares com modelo em
models/(issues #1159–#1179)packtools/sps/models/accessibility_data.pypacktools/sps/validation/accessibility_data.pypacktools/sps/models/app_group.pypacktools/sps/validation/app_group.pypacktools/sps/models/article_and_subarticles.pypacktools/sps/validation/article_and_subarticles.pypacktools/sps/models/article_contribs.pypacktools/sps/validation/article_contribs.pypacktools/sps/models/article_data_availability.pypacktools/sps/validation/article_data_availability.pypacktools/sps/models/article_license.pypacktools/sps/validation/article_license.pypacktools/sps/models/author_notes.pypacktools/sps/validation/author_notes.pypacktools/sps/models/dates.pypacktools/sps/validation/dates.pypacktools/sps/models/fig.pypacktools/sps/validation/fig.pypacktools/sps/models/fn.pypacktools/sps/validation/fn.pypacktools/sps/models/formula.pypacktools/sps/validation/formula.pypacktools/sps/models/front_articlemeta_issue.pypacktools/sps/validation/front_articlemeta_issue.pypacktools/sps/models/funding_group.pypacktools/sps/validation/funding_group.pypacktools/sps/models/graphic.pypacktools/sps/validation/graphic.pypacktools/sps/models/journal_meta.pypacktools/sps/validation/journal_meta.pypacktools/sps/models/media.pypacktools/sps/validation/media.pypacktools/sps/models/peer_review.pypacktools/sps/validation/peer_review.pypacktools/sps/models/references.pypacktools/sps/validation/references.pypacktools/sps/models/supplementary_material.pypacktools/sps/validation/supplementary_material.pypacktools/sps/models/tablewrap.pypacktools/sps/validation/tablewrap.pypacktools/sps/models/visual_resource_base.py...This pull request was created from Copilot chat.