userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
tskv.py
1
"""Tools to format messages to different formats."""
2
3
import
datetime
4
import
itertools
5
6
ENTRIES_SEP =
'\t'
7
KV_SEP =
'='
8
9
10
def
dict_to_tskv
(dct, tskv_format='', add_header=True):
11
"""Convert dictionary to string in TSKV format."""
12
return
items_to_tskv
(
13
dct.items(),
14
tskv_format=tskv_format,
15
add_header=add_header,
16
)
17
18
19
def
items_to_tskv
(items, tskv_format='', add_header=True):
20
"""Return items to string in TSKV format."""
21
data_segments = map(_format_pair, items)
22
23
segments: map | itertools.chain
24
if
add_header:
25
segments = itertools.chain(
26
(
'tskv'
, _format_pair((
'tskv_format'
, tskv_format))),
27
data_segments,
28
)
29
else
:
30
segments = data_segments
31
32
return
ENTRIES_SEP.join(segments)
33
34
35
def
join_tskv
(*escaped_strings):
36
"""Join strings in TSKV format."""
37
return
ENTRIES_SEP.join(escaped_strings)
38
39
40
def
_escape(item):
41
if
isinstance(item, datetime.datetime):
42
return
_escape_datetime(item)
43
return
_escape_string(str(item))
44
45
46
def
_escape_datetime(stamp):
47
return
stamp.isoformat()
48
49
50
def
_escape_key(string):
51
return
_escape_string(string).replace(
'='
,
'\\='
)
52
53
54
def
_escape_string(string):
55
if
not
isinstance(string, str):
56
string = str(string)
57
return
(
58
string.replace(
'\\'
,
'\\\\'
)
59
.replace(
'\t'
,
'\\t'
)
60
.replace(
'\r'
,
'\\r'
)
61
.replace(
'\n'
,
'\\n'
)
62
.replace(
'\0'
,
'\\0'
)
63
)
64
65
66
def
_format_pair(value):
67
return
f
'{_escape_key(value[0])}={_escape(value[1])}'
en
testsuite
utils
tskv.py
Generated on
for userver by
Doxygen
1.17.0