Skip to content

validate_secs e validate_lists lançam TypeError para elementos sem atributos obrigatórios #1227

Description

@Rossi-Luciano

Descrição do problema

As funções validate_secs e validate_lists lançam TypeError: 'NoneType' object is not iterable quando processam, respectivamente, um elemento <sec> sem <title> e um elemento <list> sem o atributo list-type. Em vez de retornar um resultado de validação estruturado (com response: WARNING/ERROR/CRITICAL), a exceção é propagada e capturada pelo orquestrador de validação como uma exception, não como um issue.

Passos para reproduzir o problema

  1. Instale o packtools 4.16.5
  2. Crie um XML SPS mínimo contendo <sec> sem <title>:
<?xml version="1.0" encoding="UTF-8"?>
<article xmlns:xlink="http://www.w3.org/1999/xlink"
         article-type="research-article" xml:lang="pt" dtd-version="1.1">
  <front>
    <journal-meta>
      <journal-id journal-id-type="nlm-ta">Rev Test</journal-id>
      <journal-title-group>
        <journal-title>Revista de Teste</journal-title>
        <abbrev-journal-title abbrev-type="publisher">Rev. Teste</abbrev-journal-title>
      </journal-title-group>
      <issn pub-type="epub">1234-5678</issn>
      <publisher><publisher-name>Publisher</publisher-name></publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.1234/test.2023.001</article-id>
      <title-group><article-title>Test</article-title></title-group>
      <pub-date publication-format="electronic" date-type="pub">
        <year>2023</year><month>01</month><day>01</day>
      </pub-date>
      <volume>1</volume><elocation-id>e001</elocation-id>
    </article-meta>
  </front>
  <body><sec><p>Texto sem título.</p></sec></body>
  <back/>
</article>
  1. Execute a validação:
from lxml import etree
from packtools.sps.validation.xml_validations import validate_secs

xmltree = etree.fromstring(xml_bytes)
list(validate_secs(xmltree, {}))
  1. Observe o erro: TypeError: 'NoneType' object is not iterable

Para reproduzir com validate_lists, substitua <sec> por <list> (sem list-type) na seção <body>.

Comportamento esperado

As funções validate_secs e validate_lists devem retornar um resultado de validação estruturado indicando o problema (ex: response: "ERROR", title: "missing title" para <sec>), sem lançar exceção. O tratamento de atributos ou filhos ausentes deve ser feito internamente com um fallback seguro (ex: verificar if title is None antes de iterar).

Screenshots ou vídeos

N/A

Anexos

XMLs mínimos de reprodução estão descritos na seção Passos para reproduzir acima.

Ambiente utilizado

  • packtools 4.16.5
  • Python 3.12.3
  • Linux (Ubuntu 22.04)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions