From 386029ed647ca7fd0209506285f02365c347eef9 Mon Sep 17 00:00:00 2001 From: Anthon van der Neut Date: Fri, 28 Aug 2015 08:03:59 +0200 Subject: - main problem in moving stuff from yaml/py to yaml was that parser.py clashes with built-in parser module (CPython, C-module) which is inlucded from pkg_resources/__init__.py - no C compile yet --- configobjwalker.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 configobjwalker.py (limited to 'configobjwalker.py') diff --git a/configobjwalker.py b/configobjwalker.py new file mode 100644 index 0000000..576adcd --- /dev/null +++ b/configobjwalker.py @@ -0,0 +1,65 @@ + + +def configobj_walker(cfg): + """ + walks over a ConfigObj (INI file with comments) generating + corresponding YAML output (including comments + """ + from configobj import ConfigObj + assert isinstance(cfg, ConfigObj) + for c in cfg.initial_comment: + if c.strip(): + yield c + for s in _walk_section(cfg): + if s.strip(): + yield s + for c in cfg.final_comment: + if c.strip(): + yield c + + +def _walk_section(s, level=0): + from configobj import Section + assert isinstance(s, Section) + indent = u' ' * level + for name in s.scalars: + for c in s.comments[name]: + yield indent + c.strip() + x = s[name] + if u'\n' in x: + i = indent + u' ' + x = u'|\n' + i + x.strip().replace(u'\n', u'\n' + i) + elif ':' in x: + x = u"'" + x.replace(u"'", u"''") + u"'" + line = u'{0}{1}: {2}'.format(indent, name, x) + c = s.inline_comments[name] + if c: + line += u' ' + c + yield line + for name in s.sections: + for c in s.comments[name]: + yield indent + c.strip() + line = u'{0}{1}:'.format(indent, name) + c = s.inline_comments[name] + if c: + line += u' ' + c + yield line + for val in _walk_section(s[name], level=level+1): + yield val + +##def config_obj_2_rt_yaml(cfg): +## from .comments import CommentedMap, CommentedSeq +## from configobj import ConfigObj +## assert isinstance(cfg, ConfigObj) +## #for c in cfg.initial_comment: +## # if c.strip(): +## # pass +## cm = CommentedMap() +## for name in s.sections: +## cm[name] = d = CommentedMap() +## +## +## #for c in cfg.final_comment: +## # if c.strip(): +## # yield c +## return cm -- cgit v1.2.1