Mercurial > nagslang
changeset 90:a8d83de5b460
Dump our YAML subset too
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Mon, 02 Sep 2013 02:18:50 +0200 |
parents | 102043902451 |
children | 5c31b4d1851c |
files | nagslang/level_serializer.py nagslang/tests/test_level_serializer.py |
diffstat | 2 files changed, 49 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/nagslang/level_serializer.py Mon Sep 02 00:55:59 2013 +0200 +++ b/nagslang/level_serializer.py Mon Sep 02 02:18:50 2013 +0200 @@ -5,12 +5,27 @@ ''' import re -# TODO: Dump pyyaml -import yaml def dump(data, file_object): - yaml.dump(data, file_object, default_flow_style=False) + file_object.write('\n'.join(_dump(data, 0))) + + +def _dump(obj, indent): + if isinstance(obj, list): + for item in obj: + yield '%s- %s' % (' ' * indent, + '\n'.join(_dump(item, indent + 2)).strip()) + elif isinstance(obj, dict): + for k, v in obj.iteritems(): + if isinstance(v, basestring): + yield '%s%s: %s' % (' ' * indent, k, v) + else: + extra = 0 if isinstance(v, list) else 2 + yield '%s%s:\n%s' % (' ' * indent, k, + '\n'.join(_dump(v, indent + extra))) + elif isinstance(obj, basestring): + yield '%s%s' % (' ' * indent, obj) spaces_re = re.compile(r'^(\s*)(.*)') @@ -55,7 +70,7 @@ stack[-2][1][parent_key] = obj() parent_key = None - while lm and lm.group(2).startswith('-'): + while lm and lm.group(2).startswith('- '): # Nested lists prefix, line = lm.groups() stack.append((indent() + len(prefix), []))
--- a/nagslang/tests/test_level_serializer.py Mon Sep 02 00:55:59 2013 +0200 +++ b/nagslang/tests/test_level_serializer.py Mon Sep 02 02:18:50 2013 +0200 @@ -1,16 +1,27 @@ -from unittest import TestCase +from unittest import TestCase, SkipTest from StringIO import StringIO +try: + import yaml +except ImportError: + yaml = None # pyflakes:ignore + from nagslang.level_serializer import load, dump -class TestSimple(TestCase): +class TestRoundTrip(TestCase): def roundtrip(self, data): f = StringIO() - dump(data, f) + self.dump(data, f) f.seek(0) - #print '\n== Begin ==\n%s== End ==' % f.buf - self.assertEqual(load(f), data) + print '\n=== Begin ===\n%s\n=== End ===' % f.buf.rstrip() + self.assertEqual(self.load(f), data) + + def dump(self, data, f): + dump(data, f) + + def load(self, f): + return load(f) def test_simple_dict(self): self.roundtrip({'foo': 'bar'}) @@ -45,3 +56,17 @@ {'qux': 'quux'}, ], }) + + +class TestFromPyYAML(TestRoundTrip): + def dump(self, data, f): + if yaml is None: + raise SkipTest('yaml module unavailable') + yaml.dump(data, f, default_flow_style=False) + + +class TestToPyYAML(TestRoundTrip): + def load(self, f): + if yaml is None: + raise SkipTest('yaml module unavailable') + return yaml.load(f)