Changeset 131:568476db7115 for nagslang
- Timestamp:
- Sep 2, 2013, 3:43:45 PM (7 years ago)
- Branch:
- default
- rebase_source:
- 513891382d16b7e9129c3c82f5bfa9906d4be96b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
nagslang/yamlish.py
r130 r131 7 7 * ints, floats, 8 8 * True, False, and None 9 dict keys can only be strings. 9 10 ''' 10 11 … … 31 32 class Dumper(object): 32 33 def dump(self, data): 33 return '\n'.join(self._dump(data)) 34 35 def _dump(self, data, indent=0): 34 return '\n'.join(self._dump_block(data)) 35 36 def _dump_block(self, data, indent=0): 37 for type_ in (list, dict): 38 if isinstance(data, type_): 39 f = getattr(self, '_dump_%s_block' % type_.__name__) 40 return f(data, indent) 41 raise NotImplementedError() 42 43 def _dump_inline(self, data): 44 if data in (True, False, None): 45 return self._dump_literal(data) 36 46 for type_ in (list, dict, basestring, int, float): 37 47 if isinstance(data, type_): 38 48 f = getattr(self, '_dump_%s' % type_.__name__) 39 return f(data, indent) 40 if data in (True, False, None): 41 return self._dump_literal(data, indent) 49 return f(data) 42 50 raise NotImplementedError() 43 51 44 def _dump_list (self, data, indent):52 def _dump_list_block(self, data, indent): 45 53 output = [] 46 54 for item in data: 47 dumped = self._dump(item, indent + 2) 48 dumped[0] = '%s- %s' % (' ' * indent, dumped[0][indent + 2:]) 49 output += dumped 55 if self._inlineable(item): 56 output.append('%s- %s' % (' ' * indent, 57 self._dump_inline(item))) 58 else: 59 dumped = self._dump_block(item, indent + 2) 60 dumped[0] = '%s- %s' % (' ' * indent, dumped[0][indent + 2:]) 61 output += dumped 50 62 return output 51 63 52 def _dump_dict (self, data, indent):64 def _dump_dict_block(self, data, indent): 53 65 output = [] 54 66 for k, v in sorted(data.iteritems()): 55 67 output.append('%s%s:' % (' ' * indent, k)) 56 if isinstance(v, dict): 57 output += self._dump(v, indent + 2) 68 if self._inlineable(v): 69 output[-1] += ' ' + self._dump_inline(v) 70 elif isinstance(v, dict): 71 output += self._dump_block(v, indent + 2) 58 72 elif isinstance(v, list): 59 output += self._dump (v, indent)73 output += self._dump_block(v, indent) 60 74 else: 61 value = self._dump(v) 62 assert len(value) == 1 63 output[-1] += ' %s' % value[0] 75 raise NotImplementedError() 64 76 return output 65 77 66 def _dump_basestring(self, data, indent): 78 def _inlineable(self, data): 79 if isinstance(data, list): 80 return all(not isinstance(item, (list, dict)) for item in data) 81 elif isinstance(data, dict): 82 return all(not isinstance(item, (list, dict)) 83 for item in data.itervalues()) 84 else: 85 return True 86 87 def _dump_list(self, data): 88 return '[%s]' % ', '.join(self._dump_inline(item) for item in data) 89 90 def _dump_dict(self, data): 91 return '{%s}' % ', '.join( 92 '%s: %s' % (self._dump_inline(key), self._dump_inline(value)) 93 for key, value in data.iteritems()) 94 95 def _dump_basestring(self, data): 67 96 if data in ('true', 'false', 'null'): 68 data ="'%s'" % data69 elif "'" in data:70 data ="'%s'" % data.replace("'", "''")71 elif data == '':72 data ="''"73 return [' ' * indent + data]74 75 def _dump_int(self, data , indent):76 return ['%s%i' % (' ' * indent, data)]77 78 def _dump_float(self, data , indent):79 return ['%s%f' % (' ' * indent, data)]80 81 def _dump_literal(self, data , indent):82 string ={97 return "'%s'" % data 98 if "'" in data: 99 return "'%s'" % data.replace("'", "''") 100 if data == '': 101 return "''" 102 return data 103 104 def _dump_int(self, data): 105 return str(data) 106 107 def _dump_float(self, data): 108 return str(data) 109 110 def _dump_literal(self, data): 111 return { 83 112 True: 'true', 84 113 False: 'false', 85 114 None: 'null', 86 115 }[data] 87 return [' ' * indent + string]88 116 89 117 … … 214 242 return output 215 243 if value.startswith('!!'): 216 raise NotImplemented ()244 raise NotImplementedError() 217 245 if value == 'true': 218 246 return True
Note: See TracChangeset
for help on using the changeset viewer.