def resolve(self, benchmark): ### Loading.Resolve.Items # For each Item in the Benchmark that has an extends property, resolve # it by using the following steps: if self.extends is None: logger.debug('Extendable not extending: ' + self.id) return # (2) resolve the extended Item, extended = self.get_extended(benchmark) logger.debug('Found extended Extendable: ' + extended.id) extended.resolve(benchmark) # (3) prepend the property sequence from the extended Item to the # extending Item, # (5) remove duplicate properties and apply property overrides, and for name in self.model_map['attributes']: attr_map = self.model_map['attributes'][name] if 'ignore' in attr_map and attr_map['ignore']: continue if 'in' in attr_map: attr_name = attr_map['in'] else: xml_namespace, attr_name = Model.parse_tag(name) attr_name = attr_name.replace('-', '_') self.resolve_property(extended, attr_name) for tag in self.model_map['elements']: xml_namespace, tag_name = Model.parse_tag(tag) if tag.endswith('*'): continue tag_map = self.model_map['elements'][tag] if 'ignore' in tag_map and tag_map['ignore']: continue if 'append' in tag_map: self.resolve_property(extended, tag_map['append']) elif 'map' in tag_map: self.resolve_property(extended, tag_map['map']) else: if 'in' in tag_map: name = tag_map['in'] else: name = tag_name.replace('-', '_') self.resolve_property(extended, name) # (6) remove the extends property. self.extends = None
def resolve(self, benchmark): ### Loading.Resolve.Items # For each Item in the Benchmark that has an extends property, resolve # it by using the following steps: # (1) if the Item is Group, resolve all the enclosed Items, for item_id in self.items: logger.debug('Resolving item: ' + item_id) self.items[item_id].resolve(benchmark) # (2) resolve the extended Item, if self.extends is None: return extended = self.get_extended(benchmark) extended.resolve(benchmark) # (3) prepend the property sequence from the extended Item to the # extending Item, # (5) remove duplicate properties and apply property overrides, and for name in self._model_map['attributes']: attr_map = self._model_map['attributes'][name] if 'in' in attr_map: attr_name = attr_map['in'] else: xmlns, attr_name = Model.parse_tag(name) attr_name = attr_name.replace('-', '_') self.resolve_property(extended, attr_name) for element_def in self._model_map['elements']: if element_def['tag_name'].endswith('*'): continue if 'list' in element_def: self.resolve_property(extended, element_def['list']) elif 'dict' in element_def: self.resolve_property(extended, element_def['dict']) else: if 'in' in element_def: name = element_def['in'] else: name = element_def['tag_name'].replace('-', '_') self.resolve_property(extended, name) # (4) if the Item is a Group, assign values for the id properties of # Items copied from the extended Group, if hasattr(extended, 'items') and len(extended.items) > 0: for ext_item in extended.items: # make a copy of the item and append to our items self.items.append(ext_item.copy()) # (6) remove the extends property. self.extends = None
def resolve(self, benchmark): ### Loading.Resolve.Items # For each Item in the Benchmark that has an extends property, resolve # it by using the following steps: if self.extends is None: logger.debug('Extendable not extending: ' + self.id) return # (2) resolve the extended Item, extended = self.get_extended(benchmark) logger.debug('Found extended Extendable: ' + extended.id) extended.resolve(benchmark) # (3) prepend the property sequence from the extended Item to the # extending Item, # (5) remove duplicate properties and apply property overrides, and for name in self._model_map['attributes']: attr_map = self._model_map['attributes'][name] if 'in' in attr_map: attr_name = attr_map['in'] else: xmlns, attr_name = Model.parse_tag(name) attr_name = attr_name.replace('-', '_') self.resolve_property(extended, attr_name) for element_def in self._model_map['elements']: if element_def['tag_name'].endswith('*'): continue if 'list' in element_def: self.resolve_property(extended, element_def['list']) elif 'dict' in tag_map: self.resolve_property(extended, element_def['dict']) else: if 'in' in element_def: name = element_def['in'] else: name = element_def['tag_name'].replace('-', '_') self.resolve_property(extended, name) # (6) remove the extends property. self.extends = None
def test_parse_tag(): assert Model.parse_tag('{http://jaymes.biz/test}test') == ('http://jaymes.biz/test', 'test') assert Model.parse_tag('test') == (None, 'test')