def getRules(self, without=None, only=None): if not only: only = {} if not without: without = {} if not self.rules: tree = XSDTree.makeOne("verification.xsd") if not tree: return self.rules root = tree.getroot() prefix = root.prefix verificationTypes = tree.xpath('//' + prefix + ':complexType[contains(@name, "Verification")]', namespaces = {prefix: XSD_NS}) for verificationType in verificationTypes: name = verificationType.get('name') name = name[0].upper() + name[1:-len('Verification')] self._setDomains(prefix, verificationType, name) ruleNodes = tree.xpath('//' + prefix + ':element[contains(@name, "Rule")]', namespaces = {prefix: XSD_NS}) for ruleNode in ruleNodes: mathNodes = ruleNode.xpath('.//math:math', namespaces={"math":MATHML_NS}) if mathNodes: mathDoc = MathDOM() mathDoc._etree = etree.XML(etree.tostring(mathNodes[0]), parser=mathDoc._parser) if mathDoc is None: raise NoMathMLException("The 'math' construction has errors") self.rules[ruleNode.get('name')] = {'domains': self.domains[ruleNode.get('name')] if self.domains.has_key(ruleNode.get('name')) else [], 'forInChIList': mathNodes[0].getparent().get('forInChIList'), 'math': mathDoc} rules = {} for rule in self.rules: rules[rule] = self.rules[rule].copy() for fakeRule in without: if fakeRule in rules: del rules[fakeRule] for fakeRule in only: if not (fakeRule in rules) and "copy" in only[fakeRule] and only[fakeRule]["copy"] in rules: rules[fakeRule] = rules[only[fakeRule]["copy"]] rules[fakeRule].update(only[fakeRule]) if only: for rule in self.rules: if not rule in only: del rules[rule] return rules
def getRules(self): if not self.rules: tree = XSDTree.makeOne(VERIFICATION_FILE_ABS_PATH) if not tree: return self.rules root = tree.getroot() prefix = root.prefix verificationTypes = tree.xpath('//' + prefix + ':complexType[contains(@name, "Verification")]', namespaces = {prefix: XSD_NS}) for verificationType in verificationTypes: name = verificationType.get('name') name = name[0].upper() + name[1:-len('Verification')] self._setDomains(prefix, verificationType, name) ruleNodes = tree.xpath('//' + prefix + ':element[contains(@name, "Rule")]', namespaces = {prefix: XSD_NS}) for ruleNode in ruleNodes: mathNodes = ruleNode.xpath('.//math:math', namespaces = {"math": MATHML_NS}) if mathNodes: mathDoc = MathDOM() mathDoc._etree = etree.XML(etree.tostring(mathNodes[0]), parser = mathDoc._parser) if mathDoc._etree is None: raise NoMathMLException("The 'math' construction has errors") self.rules.add(Rule(ruleNode.get('name'), mathDoc, mathNodes[0].getparent().get('forInChIList'), self._domains[ruleNode.get('name')] if self._domains.has_key(ruleNode.get('name')) else [])) rules = set() for rule in self.rules: rules.add(rule.copy()) for rule in self.addRules: rules.add(rule) for rule in self.delRules: if rule in rules: rules.remove(rule) for rule in self.useRules: rules.add(rule) if self.useRules: for rule in self.rules: if not rule in self.useRules: if rule in rules: rules.remove(rule) return rules
def getRules(self): if not self.rules: tree = XSDTree.makeOne(VERIFICATION_FILE_PATH) if not tree: return self.rules root = tree.getroot() prefix = root.prefix verificationTypes = tree.xpath( '//' + prefix + ':complexType[contains(@name, "Verification")]', namespaces={prefix: XSD_NS}) for verificationType in verificationTypes: name = verificationType.get('name') name = name[0].upper() + name[1:-len('Verification')] self._setDomains(prefix, verificationType, name) ruleNodes = tree.xpath('//' + prefix + ':element[contains(@name, "Rule")]', namespaces={prefix: XSD_NS}) for ruleNode in ruleNodes: mathNodes = ruleNode.xpath('.//math:math', namespaces={"math": MATHML_NS}) if mathNodes: mathDoc = MathDOM() mathDoc._etree = etree.XML(etree.tostring(mathNodes[0]), parser=mathDoc._parser) if mathDoc._etree is None: raise NoMathMLException( "The 'math' construction has errors") self.rules.add( Rule( ruleNode.get('name'), mathDoc, mathNodes[0].getparent().get('forInChIList'), self._domains[ruleNode.get('name')] if self._domains.has_key( ruleNode.get('name')) else [])) rules = set() for rule in self.rules: rules.add(rule.copy()) for rule in self.addRules: rules.add(rule) for rule in self.delRules: if rule in rules: rules.remove(rule) for rule in self.useRules: rules.add(rule) if self.useRules: for rule in self.rules: if not rule in self.useRules: if rule in rules: rules.remove(rule) return rules