"""
Cement Tabulate extension module.
**Note** This extension has an external dependency on ``tabulate``. Cement
explicitly does **not** include external dependencies for optional
extensions.
* In Cement ``>=3.0.8`` you must include ``cement[tabulate]`` in your
applications dependencies.
* In Cement ``<3.0.8`` you must include ``tabulate`` in your applications
dependencies.
"""
from tabulate import tabulate
from ..core import output
from ..utils.misc import minimal_logger
LOG = minimal_logger(__name__)
[docs]
class TabulateOutputHandler(output.OutputHandler):
"""
This class implements the :ref:`Output <cement.core.output>` Handler
interface. It provides tabularized text output using the
`Tabulate <https://pypi.python.org/pypi/tabulate>`_ module. Please
see the developer documentation on
:cement:`Output Handling <dev/output>`.
"""
[docs]
def render(self, data, **kw):
"""
Take a data dictionary and render it into a table. Additional
keyword arguments are passed directly to ``tabulate.tabulate``.
Args:
data_dict (dict): The data dictionary to render.
Returns:
str: The rendered template text
"""
headers = kw.get('headers', self._meta.headers)
out = tabulate(data, headers,
tablefmt=kw.get('tablefmt', self._meta.format),
stralign=kw.get(
'stralign', self._meta.string_alignment),
numalign=kw.get(
'numalign', self._meta.numeric_alignment),
missingval=kw.get(
'missingval', self._meta.missing_value),
floatfmt=kw.get('floatfmt', self._meta.float_format),
)
out = out + '\n'
if self._meta.padding is True:
out = '\n' + out + '\n'
return out
def load(app):
app.handler.register(TabulateOutputHandler)