def parseApplicationElement(self, node): if node.localName == "ApplicationName": applicationName = XMLUtils.getElementTextContents(node) elif node.localName == "POSIXApplication": for posixNode in node.childNodes: if node.nodeType == Node.ELEMENT_NODE and node.namespaceURI == JSDL_POSIX_NS and not node.localName == None: self.parsePosixApplicationElement(posixNode)
def parseDataStagingElement(self, node, dataStagingElement): if node.localName == "FileName": fileName = XMLUtils.getElementTextContents(node) dataStagingElement.setFileName(fileName) elif node.localName == "DeleteOnTermination": deleteOnTermination = XMLUtils.getElementTextContents(node) dataStagingElement.setDeleteOnTermination(deleteOnTermination) elif node.localName == "CreationFlag": creationFlag = XMLUtils.getElementTextContents(node) dataStagingElement.setCreationFlag(creationFlag) elif node.localName == "Source": srcUriElement = node.getElementsByTagNameNS(JSDL_NS, "URI") srcUri = XMLUtils.getElementTextContents(srcUriElement[0]) dataStagingElement.setSource(srcUri) elif node.localName == "Target": targetUriElement = node.getElementsByTagNameNS(JSDL_NS, "URI") targetUri = XMLUtils.getElementTextContents(targetUriElement[0]) dataStagingElement.setTarget(targetUri)
def _parseJsdl(self, fileName): doc = minidom.parse(fileName) jobDef = doc.documentElement jobDesc = jobDef.getElementsByTagNameNS(JSDL_NS, "JobDescription")[0] # Application element app = jobDesc.getElementsByTagNameNS(JSDL_NS, "Application")[0] self.applicationName = XMLUtils.getSingletonTextContents(app, JSDL_NS, "ApplicationName") self.applicationVersion = XMLUtils.getSingletonTextContents(app, JSDL_NS, "ApplicationVersion") jobId = jobDesc.getElementsByTagNameNS(JSDL_NS, "JobIdentification") if jobId.length > 0: self.jobName = XMLUtils.getSingletonTextContents(jobId[0], JSDL_NS, "JobName") # POSIXApplication element posix = app.getElementsByTagNameNS(JSDL_POSIX_NS, "POSIXApplication") if posix.length > 0: for node in posix[0].childNodes: if node.nodeType != Node.ELEMENT_NODE or node.namespaceURI != JSDL_POSIX_NS: continue data = XMLUtils.getElementTextContents(node) if node.localName == 'Argument': self.arguments.append(data) elif node.localName == 'Executable': self.executableName = data #platformUtils.formatCygwinPath(data) else: self.posixConstraints[node.localName] = data # Resources element resources = jobDesc.getElementsByTagNameNS(JSDL_NS, "Resources") if resources.length > 0: for node in resources[0].childNodes: if node.nodeType == Node.ELEMENT_NODE and node.namespaceURI == JSDL_NS: self._parseResourcesElement(node) # DataStaging element dataStaging = jobDesc.getElementsByTagNameNS(JSDL_NS, "DataStaging") if dataStaging.length > 0: dsIndex = 0 for ds in dataStaging: dataStagingElement = DataStagingElement() for node in ds.childNodes: if node.nodeType == Node.ELEMENT_NODE and node.namespaceURI == JSDL_NS: self.parseDataStagingElement(node, dataStagingElement) self.dataStaging.append(dataStagingElement) dsIndex = dsIndex + 1 # Application element application = jobDesc.getElementsByTagNameNS(JSDL_NS, "Application") for node in application[0].childNodes: if node.nodeType == Node.ELEMENT_NODE: self.parseApplicationElement(node)
def _parseRangeElement(self, rangeElement): lower = None upper = None for node in rangeElement.childNodes: if node.nodeType != Node.ELEMENT_NODE or node.namespaceURI != JSDL_NS: continue if node.localName == "LowerBoundedRange": val = float(XMLUtils.getElementTextContents(node)) lower = _min(val, lower) elif node.localName == "UpperBoundedRange": val = float(XMLUtils.getElementTextContents(node)) upper = max([val, upper]) elif node.localName == "Exact": val = float(XMLUtils.getElementTextContents(node)) lower = _min(val, lower) upper = max([val, upper]) elif node.localName == "Range": val = float(XMLUtils.getSingletonTextContents(node, JSDL_NS, "LowerBound")) lower = _min(val, lower) val = float(XMLUtils.getSingletonTextContents(node, JSDL_NS, "UpperBound")) upper = max([val, upper]) return {"lower": lower, "upper": upper}
def parsePosixApplicationElement(self, node): if node.localName == "Executable": execName = XMLUtils.getElementTextContents(node) elif node.localName == "Argument": argument = XMLUtils.getElementTextContents(node) elif node.localName == "Input": argument = XMLUtils.getElementTextContents(node) elif node.localName == "Output": argument = XMLUtils.getElementTextContents(node) elif node.localName == "Error": argument = XMLUtils.getElementTextContents(node) elif node.localName == "Environment": envVariableValue = XMLUtils.getElementTextContents(node) envVariableName = node.getAttribute('name')
def _parseResourcesElement(self, node): if node.localName == "FileSystem": node = node.getElementsByTagNameNS(JSDL_NS, "DiskSpace")[0] if node.localName == "CPUArchitecture": self.cpuArchitecture = XMLUtils.getSingletonTextContents(node, JSDL_NS, "CPUArchitectureName") elif node.localName == "OperatingSystem": osType = XMLUtils.getSingletonElement(node, JSDL_NS, "OperatingSystemType") self.operatingSystem = XMLUtils.getSingletonTextContents(osType, JSDL_NS, "OperatingSystemName") elif node.localName == "CandidateHost": hostNames = node.getElementsByTagNameNS(JSDL_NS, "HostName") for hostName in hostNames: self.candidateHosts.append(XMLUtils.getElementTextContents(hostName)) elif node.localName in SUPPORTED_RANGE_RESOURCES: name = node.localName value = self._parseRangeElement(node) self.rangeResources[name] = { "lower": value["lower"], "upper": value["upper"] }