diff --git a/conservancy_beancount/reports/core.py b/conservancy_beancount/reports/core.py index 35201fb58d20940cad0d08679e87996ab6b4b534..3c5fb371519aafd9703b4efed8b3c8b4afd1c926 100644 --- a/conservancy_beancount/reports/core.py +++ b/conservancy_beancount/reports/core.py @@ -1342,6 +1342,12 @@ class BaseODS(BaseSpreadsheet[RT, ST], metaclass=abc.ABCMeta): self.sheet.addElement(row) return row + def row_count(self, sheet: Optional[odf.table.Table]=None) -> int: + if sheet is None: + sheet = self.sheet + TableRow = odf.table.TableRow + return sum(1 for cell in sheet.childNodes if cell.isInstanceOf(TableRow)) + def balance_cell(self, balance: Balance, **attrs: Any) -> odf.table.TableCell: balance = balance.clean_copy() or balance balance_currency_count = len(balance) diff --git a/tests/test_reports_spreadsheet.py b/tests/test_reports_spreadsheet.py index c80b17035b4f03c86d09ece2d0287851d0d494ec..a5b0c4d25b33ae11d4d5e3c3cd0023b8f57ffa41 100644 --- a/tests/test_reports_spreadsheet.py +++ b/tests/test_reports_spreadsheet.py @@ -526,6 +526,15 @@ def test_ods_writer_add_row_empty(ods_writer): assert row.firstChild is None assert row.getAttribute('stylename') == 'blank' +@pytest.mark.parametrize('col_count', range(3)) +def test_ods_writer_row_count(ods_writer, col_count): + for _ in range(col_count): + ods_writer.sheet.addElement(odf.table.TableColumn()) + assert ods_writer.row_count() == 0 + for expected in range(1, 4): + ods_writer.sheet.addElement(odf.table.TableRow()) + assert ods_writer.row_count() == expected + def test_ods_writer_balance_cell_empty(ods_writer): balance = core.Balance() cell = ods_writer.balance_cell(balance)