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)