예제 #1
0
	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
예제 #2
0
파일: check.py 프로젝트: aip/NodeSoftware
	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
예제 #3
0
    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