From 915c221f6f062815fc008ce089f8f1cd51fc4e81 Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sat, 28 Oct 2023 20:03:01 -0500 Subject: [PATCH] ex38 --- tableformat.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tableformat.py b/tableformat.py index af3a9b7..c47f153 100644 --- a/tableformat.py +++ b/tableformat.py @@ -49,7 +49,20 @@ class HTMLTableFormatter(TableFormatter): return self._printer(rowdata, "td") -def create_formatter(name): +class ColumnFormatMixin: + formats = [] + + def row(self, rowdata): + rowdata = [(fmt % d) for fmt, d in zip(self.formats, rowdata)] + super().row(rowdata) + + +class UpperHeadersMixin: + def headings(self, headers): + super().headings([h.upper() for h in headers]) + + +def create_formatter(name, column_formats=None, upper_headers=False): formatters = { "text": TextTableFormatter, "csv": CSVTableFormatter, @@ -58,6 +71,18 @@ def create_formatter(name): formatter = formatters.get(name, None) if not name: raise ValueError(f'formatter named "{name}" not implemented') + if upper_headers: + + class _UpperFormatter(UpperHeadersMixin, formatter): + pass + + formatter = _UpperFormatter + if column_formats: + + class _ColumnFormatter(ColumnFormatMixin, formatter): + formats = column_formats + + formatter = _ColumnFormatter return formatter()