def getOptionsAndScripts(elem): jobOptionsEls = Evaluate('options_atn', elem) prescriptEls = Evaluate('prescript', elem) jobOptions = [getText(e.childNodes) for e in jobOptionsEls] prescripts = [getText(e.childNodes) for e in prescriptEls] return (jobOptions,prescripts)
def handleDQ2Tag(self, tag): siteTag = tag.getElementsByTagName('dq2site') dq2site = getText(siteTag[0].childNodes) dsTag = tag.getElementsByTagName('dq2dataset') dq2dsName = getText(dsTag[0].childNodes) typeTag = tag.getElementsByTagName('datatype') type = getText(typeTag[0].childNodes) fileTags = tag.getElementsByTagName('dq2file') dq2files = [] for t in fileTags:dq2files.append(getText(t.childNodes)) return (dq2dsName, dq2files, type)
class TryIt: def __init__(self, job, dict): self.job = job self.dict = dict self.error = False self.messages = [] def runFn(self, fn, tag): try: fn(self.job.getElementsByTagName(tag), self.dict) except: self.error = True m = 'Error building descriptor in method %s\nTraceback:%s' % (fn.__name__, exc2string2()) self.messages.append(m) def runXPathFn(self, fn, xpath): try: fn(Evaluate(xpath, self.job), self.dict) except: self.error = True m = 'Error building descriptor in method %s\nTraceback:%s' % (fn.__name__, exc2string2()) self.messages.append(m) def handleSimpleTextTag(self, (tagName, dictKey) ): nodes = self.job.getElementsByTagName(tagName) if nodes: self.dict[dictKey] = string.strip(getText(nodes[0].childNodes))
def handleAthenaDataSets_OldStyle(self, datasets, dict): """ Old dataset declaration: <dataset>/blah/blah</dataset> Old style means dc2 data. """ if not datasets: return logger.debug('Processing ' + str(len(datasets)) + ' old style <dataset> tags') datasetInstanceList = [] datasetType = 'dc2' datasetRepeat = 1 for dsElementNode in datasets: logicalDataSetName = string.strip(getText(dsElementNode.childNodes)) physDataSetName = self.getPhysicalDataset(logicalDataSetName) dsFactory = DataSetFactory(logger) datasetInstance = dsFactory.create(datasetType,physDataSetName,physDataSetName, 'standard') # physical = logical datasetInstanceList.append(datasetInstance) if not dict.has_key('datasets'): dict['datasets'] = {} dict['datasets'].setdefault(datasetType,[]).extend(datasetInstanceList)
def handleAthenaGroups(self, groups, dict): # KLUDGE: Athena added to job group to make it the same as the # name of job group definition version logger.debug('groups '+str(groups)) if groups: groupName = string.strip(getText(groups[0].childNodes)) if not groupName.startswith('Athena'): groupName = 'Athena'+groupName dict['jobGroup'] = groupName
def handleFurtherAthenaOptions(self, furtherOptions, dict): # there can be only one joboptions tag. # these tags allow chaining of athena jobs. Would have been # better had jobOptions been a list from the begining. logger.debug("furtherOptions" +str(furtherOptions)) dict['furtherJobOptions'] = [] if furtherOptions: tags = furtherOptions[0].getElementsByTagName("jobOptionItem") dict['furtherJobOptions'] = [getText(jot.childNodes) for jot in tags]
def handleAthenaDataSet(self, node, dict): datasetType = getElementNodes(node.childNodes)[0].tagName datasetName = getText(node.getElementsByTagName('datasetName')[0].childNodes) datasetRepeat = self.getDatasetRepeat(node) physDataSetName = self.getPhysicalDataset(datasetName) dsFactory = DataSetFactory(logger) dataSetInstance = dsFactory.create(datasetType,physDataSetName,physDataSetName,'standard') # physical = logical [dict.setdefault(datasetType,[]).append(dataSetInstance) for i in range(datasetRepeat)] logger.info('handleAthenaDataset no of data sets %d' % (len(dict)))
def doit(self, node, tagName): print node.nodeName, tagName try: nodes = node.getElementsByTagName(tagName) if not nodes: return node = nodes[0] self.dict[tagName] = getText(node.childNodes) except: m = """Could not retrieve text for tagname %s, ignoring Traceback:\n %s""" % (tagName, exc2string2()) logger.error(m)
def getDatasetRepeat(self,datasetTag): datasetRepeat = 1 # default repeatTags = datasetTag.getElementsByTagName('datasetRepeat') if not repeatTags: return datasetRepeat datasetRepeat = getText(repeatTags[0].childNodes) try: datasetRepeat = int(datasetRepeat) except: msg = 'The tag <datasetRepeat> must take a non-zero positive integer as content. Instead, found: ' + str(datasetRepeat) + '\n' msg += 'This Athena job will now be rejected.\n' logger.error(msg) raise RTTInputError(msg) return datasetRepeat
def handleAthenaOptions(self, options, dict): logger.debug('options '+str(options)) dict['jobOptions'] = [] if options: dict['jobOptions'] = [string.strip( self.fixAthenaJobOptions(getText(options[0].childNodes)))]
def handleAthenaPreconfigOptions(self, preconfigs, dict): dict['preconfigJobOptions'] = [] if preconfigs: dict['preconfigJobOptions'] = [string.strip( self.fixAthenaJobOptions(getText(preconfigs[0].childNodes)))]
def handleBatchWallTime(self, walltime, dict): if not walltime: return dict['suggestedBatchWallTime'] = getText(walltime[0].childNodes)
def handleQueues(self, queues, dict): logger.debug('queues ...'+str(queues)) if queues: dict['suggestedQueue'] =string.strip(getText(queues[0].childNodes))