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)