Source code for pyxml2pdf.core.parser

""":py:mod:`pyxml2pdf.core.parser` is the interface between xml input and table"""

__all__ = ["Parser"]

import warnings
from typing import List, Optional

from reportlab.platypus.flowables import KeepTogether

from pyxml2pdf.core.events import Event
from pyxml2pdf.tables.builder import TableBuilder


[docs]class Parser: """XML parser to extract all interesting information from xml input :param elements: cells to populate the Parser """ _elements: List[KeepTogether] _table_manager: TableBuilder def __init__(self, elements: Optional[List[KeepTogether]] = []): self._elements = elements self._table_manager = TableBuilder()
[docs] def collect_xml_data(self, events): """Traverse the parsed xml data and gather collected event data The collected xml data then is passed to the table_manager and all arranged data is return. :param List[Event] events: a list of the items from which the texts shall be extracted into a nicely formatted table :returns: list of all table rows containing the relevant event data :rtype: List[KeepTogether] """ if events: for event in events: self._table_manager.distribute_event(Event(event)) subtable_elements = self._table_manager.collect_subtables() self._elements.extend( [ KeepTogether(subtable_element) for subtable_element in subtable_elements ] ) return self._elements else: warnings.warn("There were no items to print.", RuntimeWarning)