changeset 120:e6e7a471146a

Support numeric types
author Stefano Rivera <stefano@rivera.za.net>
date Mon, 02 Sep 2013 15:31:19 +0200
parents b75de48a618c
children 7d022648aa4e
files nagslang/tests/test_yamlish.py nagslang/yamlish.py
diffstat 2 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/tests/test_yamlish.py	Mon Sep 02 15:27:51 2013 +0200
+++ b/nagslang/tests/test_yamlish.py	Mon Sep 02 15:31:19 2013 +0200
@@ -86,6 +86,9 @@
     def test_literals(self):
         self.roundtrip({'foo': [True, False, None]})
 
+    def test_numeric(self):
+        self.roundtrip({'foo': [1, 2.0, -1, -2.5]})
+
 
 class TestFromPyYAML(TestRoundTrip):
     def dump_s(self, data):
--- a/nagslang/yamlish.py	Mon Sep 02 15:27:51 2013 +0200
+++ b/nagslang/yamlish.py	Mon Sep 02 15:31:19 2013 +0200
@@ -4,6 +4,7 @@
 lists and dicts can contain:
  * lists, dicts,
  * single line strings,
+ * ints, floats,
  * True, False, and None
 '''
 
@@ -32,7 +33,7 @@
         return '\n'.join(self._dump(data))
 
     def _dump(self, data, indent=0):
-        for type_ in (list, dict, basestring):
+        for type_ in (list, dict, basestring, int, float):
             if isinstance(data, type_):
                 f = getattr(self, '_dump_%s' % type_.__name__)
                 return f(data, indent)
@@ -67,6 +68,12 @@
             data = "'%s'" % data
         return [' ' * indent + data]
 
+    def _dump_int(self, data, indent):
+        return ['%s%i' % (' ' * indent, data)]
+
+    def _dump_float(self, data, indent):
+        return ['%s%f' % (' ' * indent, data)]
+
     def _dump_literal(self, data, indent):
         string = {
             True: 'true',
@@ -179,4 +186,9 @@
             return False
         if value == 'null':
             return None
+        for type_ in (int, float):
+            try:
+                return type_(value)
+            except ValueError:
+                pass
         return value