""" Budget Parser """ from collections import namedtuple from .exceptions import BudgetParserError EXPECTED_TABLE_HEADERS = [ "Nr.", "Projekt", "Laufzeit", "BA", "Budget", "Ausgaben", "Rest", ] ExcelRow = namedtuple("ExcelRow", ["row", "data"]) BudgetData = namedtuple( "BudgetData", [ "row", "number", "project_name", "period", "project", "budget", "expenses", "rest", ], ) def _check_table_header(xl_row): fields = [c.strip() for c in xl_row.data[:7]] print(fields) print(EXPECTED_TABLE_HEADERS) if fields != EXPECTED_TABLE_HEADERS: raise BudgetParserError(f"unexpected headers: '{xl_row.data}'") def _skip_empty_lines(rows): for xl_row in rows: first_cell = xl_row.data[0] if first_cell is None: continue if isinstance(first_cell, str) and first_cell.strip() == "": continue yield xl_row def _parse_data_table(rows): for xl_row in _skip_empty_lines(rows): yield BudgetData(xl_row.row, *xl_row.data[:7]) def parse_budget_data(xls_sheet): """ parses the budget data """ rows = (ExcelRow(i, v) for i, v in enumerate(xls_sheet.values, start=1)) _check_table_header(next(rows)) return list(_parse_data_table(rows))