Changeset 58


Ignore:
Timestamp:
02/25/06 11:08:26 (9 years ago)
Author:
xi
Message:

Ready for the initial release.

Location:
branches/pyyaml3000
Files:
50 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/pyyaml3000/lib/yaml/constructor.py

    r57 r58  
    9393                    raise ConstructorError("while constructing a mapping", node.start_marker, 
    9494                            "found duplicate merge key", key_node.start_marker) 
    95                     value_node = node.value[key_node] 
    96                     if isinstance(value_node, MappingNode): 
    97                         merge = [self.construct_mapping(value_node)] 
    98                     elif isinstance(value_node, SequenceNode): 
    99                         merge = [] 
    100                         for subnode in value_node.value: 
    101                             if not isinstance(subnode, MappingNode): 
    102                                 raise ConstructorError("while constructing a mapping", 
    103                                         node.start_marker, 
    104                                         "expected a mapping for merging, but found %s" 
    105                                         % subnode.id, subnode.start_marker) 
    106                             merge.append(self.construct_mapping(subnode)) 
    107                         merge.reverse() 
    108                     else: 
    109                         raise ConstructorError("while constructing a mapping", node.start_marker, 
    110                                 "expected a mapping or list of mappings for merging, but found %s" 
    111                                 % value_node.id, value_node.start_marker) 
     95                value_node = node.value[key_node] 
     96                if isinstance(value_node, MappingNode): 
     97                    merge = [self.construct_mapping(value_node)] 
     98                elif isinstance(value_node, SequenceNode): 
     99                    merge = [] 
     100                    for subnode in value_node.value: 
     101                        if not isinstance(subnode, MappingNode): 
     102                            raise ConstructorError("while constructing a mapping", 
     103                                    node.start_marker, 
     104                                    "expected a mapping for merging, but found %s" 
     105                                    % subnode.id, subnode.start_marker) 
     106                        merge.append(self.construct_mapping(subnode)) 
     107                    merge.reverse() 
     108                else: 
     109                    raise ConstructorError("while constructing a mapping", node.start_marker, 
     110                            "expected a mapping or list of mappings for merging, but found %s" 
     111                            % value_node.id, value_node.start_marker) 
    112112            elif key_node.tag == u'tag:yaml.org,2002:value': 
    113113                if '=' in mapping: 
     
    212212        sign = +1 
    213213        if value[0] == '-': 
    214             value = -1 
     214            sign = -1 
    215215        if value[0] in '+-': 
    216216            value = value[1:] 
     
    237237        except (binascii.Error, UnicodeEncodeError), exc: 
    238238            raise ConstructorError(None, None, 
    239                     "failed to decode base64 data: %s" % exc, node.start_mark)  
     239                    "failed to decode base64 data: %s" % exc, node.start_marker)  
    240240 
    241241    timestamp_regexp = re.compile( 
     
    243243                -(?P<month>[0-9][0-9]?) 
    244244                -(?P<day>[0-9][0-9]?) 
    245                 (?:[Tt]|[ \t]+) 
     245                (?:(?:[Tt]|[ \t]+) 
    246246                (?P<hour>[0-9][0-9]?) 
    247247                :(?P<minute>[0-9][0-9]) 
     
    249249                (?:\.(?P<fraction>[0-9]*))? 
    250250                (?:[ \t]*(?:Z|(?P<tz_hour>[-+][0-9][0-9]?) 
    251                 (?::(?P<tz_minute>[0-9][0-9])?)))?$''', re.X), 
     251                (?::(?P<tz_minute>[0-9][0-9])?)?))?)?$''', re.X) 
    252252 
    253253    def construct_yaml_timestamp(self, node): 
    254254        value = self.construct_scalar(node) 
    255         match = self.timestamp_expr.match(node.value) 
     255        match = self.timestamp_regexp.match(node.value) 
    256256        values = match.groupdict() 
    257257        for key in values: 
     
    261261                values[key] = 0 
    262262        fraction = values['fraction'] 
    263         if micro: 
     263        if fraction: 
    264264            while 10*fraction < 1000000: 
    265265                fraction *= 10 
     
    282282                        "expected a mapping of length 1, but found %s" % subnode.id, 
    283283                        subnode.start_marker) 
    284                 if len(subnode.value) != 1: 
    285                     raise ConstructorError("while constructing an ordered map", node.start_marker, 
    286                             "expected a single mapping item, but found %d items" % len(subnode.value), 
    287                             subnode.start_marker) 
    288                 key_node = subnode.value.keys()[0] 
    289                 key = self.construct_object(key_node) 
    290                 value = self.construct_object(subnode.value[key_node]) 
    291                 omap.append((key, value)) 
     284            if len(subnode.value) != 1: 
     285                raise ConstructorError("while constructing an ordered map", node.start_marker, 
     286                        "expected a single mapping item, but found %d items" % len(subnode.value), 
     287                        subnode.start_marker) 
     288            key_node = subnode.value.keys()[0] 
     289            key = self.construct_object(key_node) 
     290            value = self.construct_object(subnode.value[key_node]) 
     291            omap.append((key, value)) 
     292        return omap 
    292293 
    293294    def construct_yaml_pairs(self, node): 
     
    296297            raise ConstructorError("while constructing pairs", node.start_marker, 
    297298                    "expected a sequence, but found %s" % node.id, node.start_marker) 
    298         omap = [] 
     299        pairs = [] 
    299300        for subnode in node.value: 
    300301            if not isinstance(subnode, MappingNode): 
     
    302303                        "expected a mapping of length 1, but found %s" % subnode.id, 
    303304                        subnode.start_marker) 
    304                 if len(subnode.value) != 1: 
    305                     raise ConstructorError("while constructing pairs", node.start_marker, 
    306                             "expected a single mapping item, but found %d items" % len(subnode.value), 
    307                             subnode.start_marker) 
    308                 key_node = subnode.value.keys()[0] 
    309                 key = self.construct_object(key_node) 
    310                 value = self.construct_object(subnode.value[key_node]) 
    311                 omap.append((key, value)) 
     305            if len(subnode.value) != 1: 
     306                raise ConstructorError("while constructing pairs", node.start_marker, 
     307                        "expected a single mapping item, but found %d items" % len(subnode.value), 
     308                        subnode.start_marker) 
     309            key_node = subnode.value.keys()[0] 
     310            key = self.construct_object(key_node) 
     311            value = self.construct_object(subnode.value[key_node]) 
     312            pairs.append((key, value)) 
     313        return pairs 
    312314 
    313315    def construct_yaml_set(self, node): 
     
    350352 
    351353Constructor.add_constructor( 
    352         u'tag:yaml.org,2002:timestamp', 
    353         Constructor.construct_yaml_timestamp) 
     354        u'tag:yaml.org,2002:binary', 
     355        Constructor.construct_yaml_binary) 
     356 
     357if datetime_available: 
     358    Constructor.add_constructor( 
     359            u'tag:yaml.org,2002:timestamp', 
     360            Constructor.construct_yaml_timestamp) 
    354361 
    355362Constructor.add_constructor( 
     
    385392        super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds) 
    386393        if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None: 
    387             cls.yaml_constructor_class.add_constructor(cls.yaml_tag, cls.from_yaml) 
     394            cls.yaml_constructor.add_constructor(cls.yaml_tag, cls.from_yaml) 
    388395 
    389396class YAMLObject(object): 
     
    391398    __metaclass__ = YAMLObjectMetaclass 
    392399 
    393     yaml_constructor_class = Constructor 
     400    yaml_constructor = Constructor 
    394401 
    395402    yaml_tag = None 
  • branches/pyyaml3000/tests/test_errors.py

    r53 r58  
    22import test_appliance 
    33 
    4 from yaml.error import YAMLError 
    5 from yaml.reader import * 
    6 from yaml.scanner import * 
    7 from yaml.parser import * 
    8 from yaml.composer import * 
    9 from yaml.resolver import * 
     4from yaml import * 
    105 
    116class TestErrors(test_appliance.TestAppliance): 
     
    2621            composer = Composer(parser) 
    2722            resolver = Resolver(composer) 
    28             return list(composer) 
     23            constructor = Constructor(resolver) 
     24            return list(constructor) 
    2925        except YAMLError, exc: 
    3026        #except ScannerError, exc: 
     
    4238            composer = Composer(parser) 
    4339            resolver = Resolver(composer) 
    44             return list(composer) 
    45         except YAMLError, exc: 
     40            constructor = Constructor(resolver) 
     41            return list(constructor) 
     42        #except YAMLError, exc: 
    4643        #except ScannerError, exc: 
    4744        #except ParserError, exc: 
    4845        #except ComposerError, exc: 
    49             #print '.'*70 
    50             #print "%s:" % filename 
    51             #print "%s:" % exc.__class__.__name__, exc 
     46        except ConstructorError, exc: 
     47            print '.'*70 
     48            print "%s:" % filename 
     49            print "%s:" % exc.__class__.__name__, exc 
    5250            raise 
    5351 
  • branches/pyyaml3000/tests/test_yaml.py

    r55 r58  
    99from test_errors import * 
    1010from test_detector import * 
     11from test_constructor import * 
    1112from test_syck import * 
    1213 
Note: See TracChangeset for help on using the changeset viewer.