Descrição
Em packtools/sps/formats/pubmed.py, a função xml_pubmed_citations adiciona um elemento <ArticleIdList/> vazio para referências (<ref>) que não possuem IDs (PMID/PMCID/DOI), quando o esperado é não adicionar o elemento nesse caso.
Causa
def xml_pubmed_citations(xml_pubmed, xml_tree):
...
for ref in refs:
ref_el = ET.Element("Reference")
citation = ET.Element("Citation")
citation.text = ref.get("mixed_citation")
ref_el.append(citation)
ids = ref.get("citation_ids")
if ids is not None:
ref_el.append(add_element_citation_id(ids))
xml.append(ref_el)
Quando a referência não possui IDs, ref.get("citation_ids") retorna {} (dict vazio), não None. Como a checagem é if ids is not None, o código entra no if e chama add_element_citation_id({}), que retorna um <ArticleIdList/> sem filhos — gerando <Reference><Citation>...</Citation><ArticleIdList/></Reference> em vez de <Reference><Citation>...</Citation></Reference>.
Como reproduzir
.venv/bin/python -m pytest tests/sps/formats/test_pubmed.py::PipelinePubmed::test_xml_pubmed_citations_without_article_list_id -q
AssertionError: '<Art[173 chars]ion><ArticleIdList/></Reference>...' != '<Art[173 chars]ion></Reference>...'
Sugestão de correção
Trocar if ids is not None: por if ids: (checagem de truthiness), para não criar <ArticleIdList> quando o dicionário de IDs estiver vazio.
Contexto
Identificado durante revisão/execução da suíte tests/sps/formats (conversor SciELO → PubMed).
Descrição
Em
packtools/sps/formats/pubmed.py, a funçãoxml_pubmed_citationsadiciona um elemento<ArticleIdList/>vazio para referências (<ref>) que não possuem IDs (PMID/PMCID/DOI), quando o esperado é não adicionar o elemento nesse caso.Causa
Quando a referência não possui IDs,
ref.get("citation_ids")retorna{}(dict vazio), nãoNone. Como a checagem éif ids is not None, o código entra noife chamaadd_element_citation_id({}), que retorna um<ArticleIdList/>sem filhos — gerando<Reference><Citation>...</Citation><ArticleIdList/></Reference>em vez de<Reference><Citation>...</Citation></Reference>.Como reproduzir
Sugestão de correção
Trocar
if ids is not None:porif ids:(checagem de truthiness), para não criar<ArticleIdList>quando o dicionário de IDs estiver vazio.Contexto
Identificado durante revisão/execução da suíte
tests/sps/formats(conversor SciELO → PubMed).