This repository has been archived by the owner on Mar 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
118 lines (99 loc) · 2.48 KB
/
utils.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import re
import pytest
import pdb
def unindent(block, ignore_first_line=False):
lines = str(block).split('\n')
if ignore_first_line:
del lines[0]
for line in lines:
if not line:
# skip empty line
continue
# look at first non-empty line to see how much indentation to trim
ws = re.match(r'\s*', line).group(0)
break
if ws:
lines = list(map(lambda x: x.replace(ws, '', 1), lines))
if lines[-1].isspace() or not lines[-1]:
del lines[-1]
final_eol = '\n'
else:
final_eol = ''
return '\n'.join(lines) + final_eol
#---------------------------------------------------------------------------------------------------
testdata = [("""
dictitems:
current_settings: !!python/object/new:{0}.ConfVar
dictitems:
log: true
log_file: my.log
log_level: 5
default_settings: !!python/object/new:{0}.ConfVar
dictitems:
log: false
log_level: 1
""", """
dictitems:
current_settings: !!python/object/new:{0}.ConfVar
dictitems:
log: true
log_file: my.log
log_level: 5
default_settings: !!python/object/new:{0}.ConfVar
dictitems:
log: false
log_level: 1
""", False), ("""
dictitems:
log_level: 5""", """
dictitems:
log_level: 5""", 0), (
"""
dictitems:
log_level: 5
""",
"""
dictitems:
log_level: 5
""", False),
("""
log=True
log_level=5
log_file='my.log'
""",
"""log=True
log_level=5
log_file='my.log'
"""
, True),
("""
log=True
log_level=5
log_file='my.log'
""",
"""log=True
log_level=5
log_file='my.log'
"""
, True)
]
#---------------------------------------------------------------------------------------------------
@pytest.mark.parametrize("data_in, data_out, check_line", testdata)
def test_unindent_block(data_in, data_out, check_line):
if check_line == 0:
assert str(unindent(data_in)) == data_out
else:
assert str(unindent(data_in, check_line)) == data_out
#-- MAIN ------------------------------------------------------------------------------------------
if __name__ == "__main__":
data_in = """
log=True
log_level=5
log_file='my.log'
"""
data_out= """log=True
log_level=5
log_file='my.log'
"""
ret = unindent(data_in, True)
assert str(data_out) == ret