Changeset 8 for trunk/lib/syck/parsers.py
- Timestamp:
- 07/19/05 15:14:45 (8 years ago)
- File:
-
- 1 edited
-
trunk/lib/syck/parsers.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/syck/parsers.py
r7 r8 1 1 2 import _syck, re, datetime 2 import _syck, re, datetime, sets 3 4 __all__ = ['error', 'GenericParser', 'Parser'] 5 6 error = _syck.error 3 7 4 8 class GenericParser: … … 26 30 yield value 27 31 32 class Merge: 33 pass 34 35 class Default: 36 pass 37 28 38 class Parser(GenericParser): 29 39 … … 39 49 r')?') 40 50 51 merge_key = Merge() 52 default_key = Default() 53 41 54 def __init__(self): 42 55 self.tags = {} 43 self.add_scalar_builtin_types() 44 self.add_collection_builtin_types() 56 self.add_builtin_types() 45 57 46 def add_ scalar_builtin_types(self):58 def add_builtin_types(self): 47 59 self.add_builtin_type('null', lambda node: None) 48 60 self.add_builtin_type('bool#yes', lambda node: True) … … 63 75 self.add_builtin_type('timestamp#spaced', self.transfer_timestamp) 64 76 self.add_builtin_type('timestamp', self.transfer_timestamp) 65 66 def add_collection_builtin_types(self): 67 pass 77 self.add_builtin_type('merge', self.transfer_merge) 78 self.add_builtin_type('default', self.transfer_default) 79 self.add_builtin_type('omap', self.transfer_omap) 80 self.add_builtin_type('pairs', self.transfer_pairs) 81 self.add_builtin_type('set', self.transfer_set) 68 82 69 83 def add_type(self, type_tag, transfer): … … 83 97 84 98 def resolve(self, node): 99 if node.kind == 'map' and self.merge_key in node.value: 100 self.merge_maps(node) 85 101 if node.type_id in self.tags: 86 102 return self.tags[node.type_id](node) … … 123 139 values['hour'], values['minute'], values['second'], micro) 124 140 diff = datetime.timedelta(hours=values['zhour'], minutes=values['zminute']) 125 print "DIFF =", diff126 141 return stamp-diff 127 142 143 def transfer_merge(self, node): 144 return self.merge_key 145 146 def transfer_default(self, node): 147 return self.default_key 148 149 def merge_maps(self, node): 150 maps = node.value[self.merge_key] 151 del node.value[self.merge_key] 152 if not isinstance(maps, list): 153 maps = [maps] 154 maps.reverse() 155 maps.append(node.value.copy()) 156 for item in maps: 157 node.value.update(item) 158 159 def transfer_omap(self, node): 160 omap = [] 161 for mapping in node.value: 162 for key in mapping: 163 omap.append((key, mapping[key])) 164 return omap 165 166 def transfer_pairs(self, node): # Same as transfer_omap. 167 pairs = [] 168 for mapping in node.value: 169 for key in mapping: 170 pairs.append((key, mapping[key])) 171 return pairs 172 173 def transfer_set(self, node): 174 return sets.Set(node.value) 175
Note: See TracChangeset
for help on using the changeset viewer.
