omdev 0.0.0.dev192__py3-none-any.whl → 0.0.0.dev193__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
omdev/toml/writer.py DELETED
@@ -1,114 +0,0 @@
1
- import dataclasses as dc
2
- import string
3
- import typing as ta
4
-
5
-
6
- class TomlWriter:
7
- @dc.dataclass(frozen=True)
8
- class Literal:
9
- s: str
10
-
11
- def __init__(self, out: ta.TextIO) -> None:
12
- super().__init__()
13
- self._out = out
14
-
15
- self._indent = 0
16
- self._wrote_indent = False
17
-
18
- #
19
-
20
- def _w(self, s: str) -> None:
21
- if not self._wrote_indent:
22
- self._out.write(' ' * self._indent)
23
- self._wrote_indent = True
24
- self._out.write(s)
25
-
26
- def _nl(self) -> None:
27
- self._out.write('\n')
28
- self._wrote_indent = False
29
-
30
- def _needs_quote(self, s: str) -> bool:
31
- return (
32
- not s or
33
- any(c in s for c in '\'"\n') or
34
- s[0] not in string.ascii_letters
35
- )
36
-
37
- def _maybe_quote(self, s: str) -> str:
38
- if self._needs_quote(s):
39
- return repr(s)
40
- else:
41
- return s
42
-
43
- #
44
-
45
- def write_root(self, obj: ta.Mapping) -> None:
46
- for i, (k, v) in enumerate(obj.items()):
47
- if i:
48
- self._nl()
49
- self._w('[')
50
- self._w(self._maybe_quote(k))
51
- self._w(']')
52
- self._nl()
53
- self.write_table_contents(v)
54
-
55
- def write_table_contents(self, obj: ta.Mapping) -> None:
56
- for k, v in obj.items():
57
- self.write_key(k)
58
- self._w(' = ')
59
- self.write_value(v)
60
- self._nl()
61
-
62
- def write_array(self, obj: ta.Sequence) -> None:
63
- self._w('[')
64
- self._nl()
65
- self._indent += 1
66
- for e in obj:
67
- self.write_value(e)
68
- self._w(',')
69
- self._nl()
70
- self._indent -= 1
71
- self._w(']')
72
-
73
- def write_inline_table(self, obj: ta.Mapping) -> None:
74
- self._w('{')
75
- for i, (k, v) in enumerate(obj.items()):
76
- if i:
77
- self._w(', ')
78
- self.write_key(k)
79
- self._w(' = ')
80
- self.write_value(v)
81
- self._w('}')
82
-
83
- def write_inline_array(self, obj: ta.Sequence) -> None:
84
- self._w('[')
85
- for i, e in enumerate(obj):
86
- if i:
87
- self._w(', ')
88
- self.write_value(e)
89
- self._w(']')
90
-
91
- def write_key(self, obj: ta.Any) -> None:
92
- if isinstance(obj, TomlWriter.Literal):
93
- self._w(obj.s)
94
- elif isinstance(obj, str):
95
- self._w(self._maybe_quote(obj.replace('_', '-')))
96
- elif isinstance(obj, int):
97
- self._w(repr(str(obj)))
98
- else:
99
- raise TypeError(obj)
100
-
101
- def write_value(self, obj: ta.Any) -> None:
102
- if isinstance(obj, bool):
103
- self._w(str(obj).lower())
104
- elif isinstance(obj, (str, int, float)):
105
- self._w(repr(obj))
106
- elif isinstance(obj, ta.Mapping):
107
- self.write_inline_table(obj)
108
- elif isinstance(obj, ta.Sequence):
109
- if not obj:
110
- self.write_inline_array(obj)
111
- else:
112
- self.write_array(obj)
113
- else:
114
- raise TypeError(obj)