Exemple #1
0
        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)
Exemple #2
0
 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)
Exemple #3
0
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))
Exemple #4
0
    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)
Exemple #5
0
 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
Exemple #6
0
 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]
Exemple #7
0
    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)))
Exemple #8
0
    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)
Exemple #9
0
    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
Exemple #10
0
 def handleAthenaOptions(self, options, dict):
     logger.debug('options '+str(options))
     dict['jobOptions'] = []
     if options:
         dict['jobOptions'] = [string.strip(
             self.fixAthenaJobOptions(getText(options[0].childNodes)))]
Exemple #11
0
 def handleAthenaPreconfigOptions(self, preconfigs, dict):
     dict['preconfigJobOptions'] = []
     if preconfigs:
         dict['preconfigJobOptions'] = [string.strip(
             self.fixAthenaJobOptions(getText(preconfigs[0].childNodes)))]
Exemple #12
0
 def handleBatchWallTime(self, walltime, dict):
     if not walltime: return
     dict['suggestedBatchWallTime'] = getText(walltime[0].childNodes)
Exemple #13
0
 def handleQueues(self, queues, dict):
     logger.debug('queues ...'+str(queues))
     if queues:
         dict['suggestedQueue']  =string.strip(getText(queues[0].childNodes))