-
- relaxng_doc = etree.parse(schema)
- relaxng = etree.RelaxNG(relaxng_doc)
- if not relaxng(self.xml):
- error = relaxng.error_log.last_error
- message = "%s (line %s)" % (error.message, error.line)
- raise InvalidRSpec(message)
- return True
-
-
- def __str__(self):
- return self.toxml()
-
- def toxml(self):
- return self.header + etree.tostring(self.xml, pretty_print=True)
-
+ if filter is None:
+ filter = {}
+ if element_type not in self.elements:
+ msg = "Unable to search for element {} in rspec, expath expression not found."\
+ .format(element_type)
+ raise InvalidRSpecElement(element_type, extra=msg)
+ rspec_element = self.get_rspec_element(element_type)
+ xpath = rspec_element.path + XpathFilter.xpath(filter)
+ return self.xml.xpath(xpath)
+
+ def merge(self, in_rspec):
+ self.version.merge(in_rspec)
+
+ def filter(self, filter):
+ if 'component_manager_id' in filter:
+ nodes = self.version.get_nodes()
+ for node in nodes:
+ if 'component_manager_id' not in node.attrib or \
+ node.attrib['component_manager_id'] != filter['component_manager_id']:
+ parent = node.getparent()
+ parent.remove(node.element)
+
+ def toxml(self, header=True):
+ if header:
+ return self.header + self.xml.toxml()
+ else:
+ return self.xml.toxml()
+