Skip to content

Commit

Permalink
Refactor: table wrap validation (#765)
Browse files Browse the repository at this point in the history
* Adiciona níveis de erro para 'table-wrap'

* Remove código obsoleto

* Adiciona classe

* Adiciona construtor com tratamento de exceções para cada parâmetro

* Adiciona função de validação

* Verifica se não há tabelas no artigo

* Valida cada tabela encontrada

* Remove código obsoleto

* Adiciona classe para validação de cada tabela individualmente

* Adiciona construtor com tratamento de exceção para 'data'

* Adiciona função para validar os atributos individualmente

* Adiciona validação de atributos

* Atualiza importações

* Adiciona teste para ausência de tabela

* Adiciona teste para validação de 'id'

* Adiciona teste para validação de 'label'

* Adiciona teste para a validação de 'caption'

* Corrige chave do dicionário

* Adiciona 'title'

* Adapta teste

* Corrige para o uso de lxml

* Adiciona 'table' e 'graphic'

* Complementa os dados

* Simplifica os exemplos de teste e adiciona 'table' e 'graphic'

* Individualiza as chamadas para as validações

* Individualiza as validações

* Complementa 'tablewrap.json'

* Adapta e adiciona testes

* Aplica formatação (black)

* Atualiza importações

* Remove funções obsoletas

* Adiciona 'table_wrap_foot'

* Corrige retorno da função

* Atualiza 'data'

* Adiciona exemplo mais real

* Corrige nome dos atributos

* Adequa nome de atributo

* Adequa nome de atributo

* Adequa nome de atributo

* Adiciona exemplo mais real

* Adequa nome de atributo

* Modifica para lista de 'footnotes'

* Modifica validação de 'alternatives'

* Adequa testes de validação
  • Loading branch information
Rossi-Luciano authored Dec 27, 2024
1 parent ccbca8d commit 74db305
Show file tree
Hide file tree
Showing 5 changed files with 874 additions and 843 deletions.
78 changes: 48 additions & 30 deletions packtools/sps/models/tablewrap.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import xml.etree.ElementTree as ET
from packtools.sps.utils.xml_utils import put_parent_context, node_plain_text, tostring
import lxml.etree as ET

from packtools.sps.utils.xml_utils import put_parent_context, node_plain_text, tostring, process_subtags


class TableWrap:
Expand All @@ -13,7 +14,12 @@ def __str__(self):
return tostring(self.element, xml_declaration=False)

def xml(self, pretty_print=True):
return tostring(node=self.element, doctype=None, pretty_print=pretty_print, xml_declaration=False)
return tostring(
node=self.element,
doctype=None,
pretty_print=pretty_print,
xml_declaration=False,
)

@property
def table_wrap_id(self):
Expand All @@ -27,38 +33,48 @@ def label(self):
def caption(self):
caption_element = self.element.find(".//caption")
if caption_element is not None:
return ET.tostring(caption_element, encoding='unicode', method='text').strip()
return ET.tostring(
caption_element, encoding="unicode", method="text"
).strip()
return ""

@property
def footnote(self):
footnote_element = self.element.find('.//table-wrap-foot')
if footnote_element is not None:
return node_plain_text(footnote_element)
return ""
def table_wrap_foot(self):
table_wrap_foot_elem = self.element.find(".//table-wrap-foot")
if table_wrap_foot_elem is None:
return []

fns = []
for fn_elem in table_wrap_foot_elem.findall(".//fn"):
fns.append(
{
"text": node_plain_text(fn_elem),
"id": fn_elem.get("id"),
"label": fn_elem.findtext(".//label"),
}
)
return fns

@property
def footnote_id(self):
footnote_element = self.element.find('.//table-wrap-foot')
if footnote_element is not None:
fn_element = footnote_element.find('.//fn')
if fn_element is not None:
return fn_element.get("id")
return None
def alternative_elements(self):
alternative_elements = self.element.find(".//alternatives")
if alternative_elements is not None:
return [child.tag for child in alternative_elements]
return []

@property
def footnote_label(self):
footnote_element = self.element.find('.//table-wrap-foot')
if footnote_element is not None:
return footnote_element.findtext('.//fn//label')
def table(self):
table = self.element.find(".//table")
if table is not None:
return tostring(table, xml_declaration=False)
return None

@property
def alternative_elements(self):
alternative_elements = self.element.find('.//alternatives')
if alternative_elements is not None:
return [child.tag for child in alternative_elements]
return []
def graphic(self):
graphic = self.element.find(".//graphic")
if graphic is not None:
return graphic.get("{http://www.w3.org/1999/xlink}href")
return None

@property
def data(self):
Expand All @@ -67,10 +83,10 @@ def data(self):
"table_wrap_id": self.table_wrap_id,
"label": self.label,
"caption": self.caption,
"footnote": self.footnote,
"footnote_id": self.footnote_id,
"footnote_label": self.footnote_label,
"alternative_elements": self.alternative_elements
"footnotes": self.table_wrap_foot,
"alternative_elements": self.alternative_elements,
"table": self.table,
"graphic": self.graphic,
}


Expand Down Expand Up @@ -98,7 +114,9 @@ def table_wrappers(self):

for table in self.node.xpath(path):
data = TableWrap(table).data
yield put_parent_context(data, self.lang, self.article_type, self.parent, self.parent_id)
yield put_parent_context(
data, self.lang, self.article_type, self.parent, self.parent_id
)


class ArticleTableWrappers:
Expand Down
Loading

0 comments on commit 74db305

Please sign in to comment.