Adiciona às coleções a classificação quanto ao pertencimento à rede (Rede SciELO, temática ou independente) - #1482
Merged
robertatakenaka merged 14 commits intoSep 29, 2026
Conversation
Permite distinguir coleções da Rede SciELO, temáticas e independentes. Detalhes de implementação: - Adiciona NETWORK_CLASSIFICATION com as opções scielonetwork, thematic e independent - Corrige a ausência de quebra de linha no final do arquivo
Uma coleção pode ter mais de uma classificação ao mesmo tempo. Por isso o campo aceita múltiplos valores, e o admin os apresenta como checkboxes. Detalhes de implementação: - Cria ChoiceArrayField, um ArrayField cujo formfield é TypedMultipleChoiceField com CheckboxSelectMultiple, sem usar o SimpleArrayField padrão - Adiciona Collection.network_classification (ArrayField de CharField, opcional) - Inclui o campo no painel de edição, no dicionário de dados da coleção e no carregamento via collection_data - create_or_update aceita network_classification (padrão None) e grava None quando a lista vem vazia - Protege a iteração de names contra valor None
Detalhes de implementação: - Inclui network_classification nos campos de CollectionSerializer
Detalhes de implementação: - Inclui network_classification em list_display de CollectionAdmin
A classificação de rede passa a ter um único valor por coleção, e não mais uma lista. Os dados de origem (ArticleMeta) continuam a fornecer uma lista; nesse caso, somente o primeiro valor é armazenado. Detalhes de implementação: - Substitui ChoiceArrayField por CharField com choices NETWORK_CLASSIFICATION - Remove a classe ChoiceArrayField e os imports de forms e ArrayField - create_or_update converte a lista recebida em seu primeiro elemento, ou None quando a lista está vazia
Detalhes de implementação: - Regenera 0008_collection_network_classification com CharField no lugar de ChoiceArrayField - Remove a dependência da migration em collection.models
A classificação de rede passa a aceitar múltiplos valores, refletindo o que o ArticleMeta já informa como lista, em vez de descartar tudo além do primeiro valor. No admin, as opções são apresentadas como checkboxes. Detalhes de implementação: - Adiciona ChoiceArrayField, subclasse de ArrayField cujo formfield usa TypedMultipleChoiceField com CheckboxSelectMultiple, em vez de SimpleArrayField (texto separado por vírgula) - Collection.network_classification passa de CharField para ChoiceArrayField de CharField com choices NETWORK_CLASSIFICATION - FieldPanel de network_classification usa widget CheckboxSelectMultiple - create_or_update: valor str é convertido em lista de um elemento; lista vazia é armazenada como None
…rk_classification.py
Adiciona uma consulta que reúne as coleções de periódicos classificadas exclusivamente como pertencentes à Rede SciELO, excluindo as temáticas e as independentes. Detalhes de implementação: - Adiciona o classmethod Collection.get_national_journal_collections - Filtra collection_type="journals" e network_classification=["scielonetwork"] - A comparação é por igualdade exata do array, portanto coleções com scielonetwork combinado a outra classificação ficam de fora
| from . import choices | ||
|
|
||
|
|
||
| class ChoiceArrayField(ArrayField): |
Collaborator
There was a problem hiding this comment.
class MultipleChoiceArrayField(ArrayField): deixa mais explícita a finalidade
Collaborator
|
Unificar as migraçõs 0008 e 0009 |
Renomeada a classe ChoiceArrayField para MultipleChoiceArrayField no arquivo de modelos do app collection, adequando a nomenclatura e atualizando as importações internas. - Alterado o nome da classe de para em para descrever melhor o componente. - Ajustada a importação de no modelo para utilizar o caminho explícito . - Atualizado o campo do model para utilizar a nova classe .
Removido o arquivo de migração individual antigo da classificação de rede da coleção para unificação do histórico de banco de dados. - Excluído o arquivo collection/migrations/0008_collection_network_classification.py. - Eliminada a adição isolada do campo network_classification em formato simples para substituição por migração unificada.
Removido o arquivo de migração de alteração do campo network_classification para ArrayField. - Excluído o arquivo collection/migrations/0009_alter_collection_network_classification.py. - Removidas as instruções SQL customizadas (SeparateDatabaseAndState e RunSQL) que convertiam o tipo de coluna de texto simples para vetor no PostgreSQL.
…nd status fields Adicionada a nova migração consolidada para o campo network_classification com suporte a ArrayField e ajustes no platform_status. - Criado o arquivo collection/migrations/0008_collection_network_classification_and_more.py. - Incluídas as operações de alteração do campo platform_status e adição do campo network_classification. - Configurada a definição do novo campo utilizando a classe MultipleChoiceArrayField atualizada.
samuelveigarangel
approved these changes
Sep 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que esse PR faz?
Fale sobre o propósito do pull request, como por exemplo: quais problemas ele soluciona ou quais features ele adiciona.
Adiciona às coleções a classificação quanto ao pertencimento à rede (Rede SciELO, temática ou independente). Uma coleção pode ter mais de uma classificação. O campo é editável no admin Wagtail por meio de checkboxes, aparece na listagem de coleções e é exposto na API v1.
Também torna a carga de coleções mais robusta:
create_or_updatepassa a aceitarnamesausente (None) sem falhar.Onde a revisão poderia começar?
Indique o caminho do arquivo e o arquivo onde o revisor deve iniciar a leitura do código.
collection/choices.py: novas opçõesNETWORK_CLASSIFICATIONcollection/models.py:ChoiceArrayFielde o campoCollection.network_classificationcollection/migrations/: migration do novo campocollection/api/v1/serializers.pyecollection/wagtail_hooks.py: exposição na API e no adminComo este poderia ser testado manualmente?
Estabeleça os passos necessários para que a funcionalidade seja testada manualmente pelo revisor.
python manage.py migrate collectionnetwork_classificationno retornonetwork_classificationnos dados de origem e confirmar que ambas as situações funcionamAlgum cenário de contexto que queira dar?
Indique um contexto onde as modificações se fazem necessárias ou passe informações que contextualizam o revisor a fim de facilitar o entendimento da funcionalidade.
Até agora não havia no cadastro de coleções nenhuma forma de distinguir coleções da Rede SciELO, coleções temáticas e coleções independentes. Como uma coleção pode se enquadrar em mais de uma categoria, o campo foi modelado como
ArrayFielddo PostgreSQL.O
ArrayFieldpadrão do Django usaSimpleArrayFieldno formulário, um campo de texto com valores separados por vírgula, o que é inadequado para edição no admin. Por isso foi criadoChoiceArrayField, que sobrescreveformfieldpara usarTypedMultipleChoiceFieldcomCheckboxSelectMultiple, restringindo os valores às opções definidas.Na listagem do admin, o valor é exibido como lista dos códigos armazenados, sem os rótulos traduzidos.
Screenshots
Quando aplicável e se fizer possível, adicione screenshots que remetem à situação gráfica do problema que o pull request resolve.
N/A
Quais são os tickets relevantes?
Indique uma issue à qual o pull request faz relacionamento.
#1481
Referências
Indique as referências utilizadas para a elaboração do pull request.
Segurança da informação (NSI.04)
Este PR manipula dados sensíveis ou pessoais (LGPD)?
Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?
Este PR introduz, atualiza ou remove dependências de terceiros?
Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?
Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?
Este PR expõe novos endpoints, telas ou serviços?
Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?