Changeset 119:b75de48a618c


Ignore:
Timestamp:
Sep 2, 2013, 1:27:51 PM (7 years ago)
Author:
Stefano Rivera <stefano@…>
Branch:
default
rebase_source:
625f4303302dd890cb7110b360ca16fb9625ca96
Message:

Support boolean and None types

Location:
nagslang
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • nagslang/tests/test_yamlish.py

    r114 r119  
    8080        })
    8181
     82    def test_quoted(self):
     83        # a literal true is True, but 'true' is a string
     84        self.roundtrip({'foo': 'true'})
     85
     86    def test_literals(self):
     87        self.roundtrip({'foo': [True, False, None]})
     88
    8289
    8390class TestFromPyYAML(TestRoundTrip):
  • nagslang/yamlish.py

    r113 r119  
    22Serializer and dumper for a simple, YAMLish format (actually a YAML subset).
    33The top level object is a dict.
    4 lists and dicts can contain lists, dicts, and strings.
     4lists and dicts can contain:
     5 * lists, dicts,
     6 * single line strings,
     7 * True, False, and None
    58'''
    69
     
    3437                f = getattr(self, '_dump_%s' % type_.__name__)
    3538                return f(data, indent)
     39        if data in (True, False, None):
     40            return self._dump_literal(data, indent)
    3641        raise NotImplementedError()
    3742
     
    5964
    6065    def _dump_basestring(self, data, indent):
     66        if data in ('true', 'false', 'null'):
     67            data = "'%s'" % data
    6168        return [' ' * indent + data]
     69
     70    def _dump_literal(self, data, indent):
     71        string = {
     72            True: 'true',
     73            False: 'false',
     74            None: 'null',
     75        }[data]
     76        return [' ' * indent + string]
    6277
    6378
     
    144159                else:
    145160                    assert self._in_list
    146                     self._container.append(line)
     161                    self._container.append(self._parse_value(line))
    147162
    148163            if dm:
    149164                key, value = dm.groups()
     165                assert self._in_dict
    150166                if value:
    151                     assert self._in_dict
    152                     self._container[key] = value
     167                    self._container[key] = self._parse_value(value)
    153168                else:
    154169                    self._parent_key = key
    155170
    156171        return self._stack[0][1]
     172
     173    def _parse_value(self, value):
     174        if value.startswith("'") and value.endswith("'"):
     175            return value[1:-1]
     176        if value == 'true':
     177            return True
     178        if value == 'false':
     179            return False
     180        if value == 'null':
     181            return None
     182        return value
Note: See TracChangeset for help on using the changeset viewer.