jw-python/tools/python/jwutils/stree/serdes.py

39 lines
1.2 KiB
Python
Raw Normal View History

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)