mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 09:53:32 +01:00
Add StringTree and friends
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
16ce7abd93
commit
214c222002
3 changed files with 193 additions and 0 deletions
39
tools/python/jwutils/stree/serdes.py
Normal file
39
tools/python/jwutils/stree/serdes.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
from StringTree import *
|
||||
from jwutils.log import *
|
||||
|
||||
def parse(s): # export
|
||||
slog(DEBUG, "parsing", s)
|
||||
root = StringTree('', content='root')
|
||||
sec = ''
|
||||
for line in s.splitlines():
|
||||
slog(DEBUG, "line=", line)
|
||||
line = line.strip()
|
||||
if not len(line):
|
||||
continue
|
||||
if line[0] == '[':
|
||||
if line[-1] == ']':
|
||||
sec = line[1:-1]
|
||||
elif line[-1] == '[':
|
||||
if len(sec):
|
||||
sec += '.'
|
||||
sec += line[1:-1]
|
||||
else:
|
||||
raise Exception("failed to parse section line", line)
|
||||
if root.get(sec) is None:
|
||||
root.add(sec)
|
||||
continue
|
||||
elif line[0] == ']':
|
||||
assert(len(sec) > 0)
|
||||
sec = '.'.join(sec.split('.')[0:-1])
|
||||
continue
|
||||
assignment = line.split('=')
|
||||
if len(assignment) != 2:
|
||||
raise Exception("failed to parse assignment", line)
|
||||
slog(DEBUG, "sec=", sec, "assignment=", assignment)
|
||||
root.add(sec + '.' + cleanup_string(assignment[0]), quote(assignment[1]))
|
||||
return root
|
||||
|
||||
def read(path): # export
|
||||
with open(path, 'r') as infile:
|
||||
s = infile.read()
|
||||
return parse(s)
|
||||
Loading…
Add table
Add a link
Reference in a new issue