def do(self, name, schema): schema.update(self.baseSchema) schema['RequestName'] = name schema['CouchDBName'] = 'reqmgr_config_cache' schema['ProdConfigCacheID'] = '0582a460e28d54ce6b8f1a14845be0da' maker = retrieveRequestMaker(name) request = maker(schema)
def makeRequest(kwargs, couchUrl, couchDB): logging.info(kwargs) """ Handles the submission of requests """ # make sure no extra spaces snuck in for k, v in kwargs.iteritems(): if isinstance(v, str): kwargs[k] = v.strip() maker = retrieveRequestMaker(kwargs["RequestType"]) schema = maker.newSchema() schema.update(kwargs) currentTime = time.strftime('%y%m%d_%H%M%S', time.localtime(time.time())) requestString = schema.get('RequestString', "") if requestString != "": schema['RequestName'] = "%s_%s_%s" % ( schema['Requestor'], requestString, currentTime) else: schema['RequestName'] = "%s_%s" % (schema['Requestor'], currentTime) schema["Campaign"] = kwargs.get("Campaign", "") if 'Scenario' in kwargs and 'ProdConfigCacheID' in kwargs: # Use input mode to delete the unused one inputMode = kwargs['inputMode'] inputValues = {'scenario':'Scenario', 'couchDB':'ProdConfigCacheID'} for n, v in inputValues.iteritems(): if n != inputMode: schema[v] = "" if kwargs.has_key("InputDataset"): schema["InputDatasets"] = [kwargs["InputDataset"]] if kwargs.has_key("FilterEfficiency"): kwargs["FilterEfficiency"] = float(kwargs["FilterEfficiency"]) skimNumber = 1 # a list of dictionaries schema["SkimConfigs"] = [] while kwargs.has_key("SkimName%s" % skimNumber): d = {} d["SkimName"] = kwargs["SkimName%s" % skimNumber] d["SkimInput"] = kwargs["SkimInput%s" % skimNumber] d["Scenario"] = kwargs["Scenario"] if kwargs.get("Skim%sConfigCacheID" % skimNumber, None) != None: d["ConfigCacheID"] = kwargs["Skim%sConfigCacheID" % skimNumber] schema["SkimConfigs"].append(d) skimNumber += 1 if kwargs.has_key("DataPileup") or kwargs.has_key("MCPileup"): schema["PileupConfig"] = {} if kwargs.has_key("DataPileup") and kwargs["DataPileup"] != "": schema["PileupConfig"]["data"] = [kwargs["DataPileup"]] if kwargs.has_key("MCPileup") and kwargs["MCPileup"] != "": schema["PileupConfig"]["mc"] = [kwargs["MCPileup"]] for runlist in ["RunWhitelist", "RunBlacklist"]: if runlist in kwargs: schema[runlist] = parseRunList(kwargs[runlist]) for blocklist in ["BlockWhitelist", "BlockBlacklist"]: if blocklist in kwargs: schema[blocklist] = parseBlockList(kwargs[blocklist]) validate(schema) request = maker(schema) helper = WMWorkloadHelper(request['WorkflowSpec']) helper.setCampaign(schema["Campaign"]) helper.setRunWhitelist(schema["RunWhitelist"]) # can't save Request object directly, because it makes it hard to retrieve the _rev metadata = {} metadata.update(request) # don't want to JSONify the whole workflow del metadata['WorkflowSpec'] workloadUrl = helper.saveCouch(couchUrl, couchDB, metadata=metadata) request['RequestWorkflow'] = removePasswordFromUrl(workloadUrl) CheckIn.checkIn(request) return request