Source code for pytablewriter.writer.text._toml

import warnings
from decimal import Decimal
from typing import Any

import typepy

from .._common import import_error_msg_template
from ._common import serialize_dp
from ._text_writer import TextTableWriter


[docs] class TomlTableWriter(TextTableWriter): """ A table writer class for `TOML <https://github.com/toml-lang/toml>`__ data format. :Example: :ref:`example-toml-table-writer` """ FORMAT_NAME = "toml" @property def format_name(self) -> str: return self.FORMAT_NAME @property def support_split_write(self) -> bool: return True def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.is_formatting_float = False self._is_require_table_name = True self._is_require_header = True
[docs] def write_table(self, **kwargs: Any) -> None: """ |write_table| with `TOML <https://github.com/toml-lang/toml>`__ format. :raises pytablewriter.EmptyTableNameError: If the |headers| is empty. :Example: :ref:`example-toml-table-writer` """ try: import toml class TomlTableEncoder(toml.encoder.TomlEncoder): def __init__(self, _dict=dict, preserve=False): # type: ignore super().__init__(_dict=_dict, preserve=preserve) self.dump_funcs[str] = str self.dump_funcs[Decimal] = toml.encoder._dump_float # type: ignore except ImportError: warnings.warn(import_error_msg_template.format("toml")) raise with self._logger: self._verify_property() self._preprocess() body = [] for value_dp_list in self._table_value_dp_matrix: row = {} for header, value in zip( self.headers, [serialize_dp(value_dp) for value_dp in value_dp_list], ): if typepy.is_null_string(value): continue row[header] = value body.append(row) self.stream.write(toml.dumps({self.table_name: body}, encoder=TomlTableEncoder()))