-
-
Notifications
You must be signed in to change notification settings - Fork 42
/
_function.py
88 lines (64 loc) · 2.44 KB
/
_function.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"""
.. codeauthor:: Tsuyoshi Hombashi <tsuyoshi.hombashi@gmail.com>
"""
from enum import Enum
from typing import Optional, Type
import dataproperty
from pathvalidate import replace_symbol
from tabledata._core import TableData
def quote_datetime_formatter(value) -> str:
return f'"{value.strftime(dataproperty.DefaultValue.DATETIME_FORMAT):s}"'
def dateutil_datetime_formatter(value) -> str:
return 'dateutil.parser.parse("{:s}")'.format(
value.strftime(dataproperty.DefaultValue.DATETIME_FORMAT)
)
def dumps_tabledata(value: TableData, format_name: str = "rst_grid_table", **kwargs) -> str:
"""
:param tabledata.TableData value: Tabular data to dump.
:param str format_name:
Dumped format name of tabular data.
Available formats are described in
:py:meth:`~pytablewriter.TableWriterFactory.create_from_format_name`
:Example:
.. code:: python
>>> dumps_tabledata(value)
.. table:: sample_data
====== ====== ======
attr_a attr_b attr_c
====== ====== ======
1 4.0 a
2 2.1 bb
3 120.9 ccc
====== ====== ======
"""
from ._factory import TableWriterFactory
if not value:
raise TypeError("value must be a tabledata.TableData instance")
writer = TableWriterFactory.create_from_format_name(format_name)
for attr_name, attr_value in kwargs.items():
setattr(writer, attr_name, attr_value)
writer.from_tabledata(value)
return writer.dumps()
def dump_tabledata(value, format_name="rst_grid_table", **kwargs):
# depreated: alias to dumps_tabledata()
return dumps_tabledata(value, format_name, **kwargs)
def normalize_enum(
value, enum_class: Type[Enum], validate: bool = True, default: Optional[Enum] = None
):
if value is None:
return default
if isinstance(value, enum_class):
return value
try:
return enum_class[replace_symbol(value.strip(), "_").upper()]
except AttributeError:
if validate:
raise TypeError(f"value must be a {enum_class} or a str: actual={type(value)}")
except KeyError:
if validate:
raise ValueError(
"invalid valid found: expected={}, actual={}".format(
"/".join(item.name for item in enum_class), value
)
)
return value