def __exit__(self, *err): for level, prepids in self.approvals.iteritems(): print print "approving", len(prepids), "requests to level", level for prepid in sorted(prepids): print " ", prepid print restful().approve("requests", ",".join(prepids), level)
def delete(self): response = "" while response not in ("yes", "no"): response = raw_input("are you sure you want to delete {}? [yes/no]".format(self)) if response == "no": return if self.prepid: restful().approve("requests", self.prepid, 0) restful().deleteA("requests", self.prepid) with cd(here), self.writingdict(): del self.value
def getdictforupdate(self): mcm = restful() req = mcm.get("requests", self.prepid) req["dataset_name"] = self.datasetname req["mcdb_id"] = 0 req["total_events"] = self.nevents req["fragment"] = self.fullfragment req["time_event"] = [(self.timeperevent if self.timeperevent is not None else self.defaulttimeperevent)] req["size_event"] = [self.sizeperevent if self.sizeperevent is not None else 600] req["generators"] = self.generators if self.matchefficiency is not None: req["generator_parameters"][0].update({ "match_efficiency_error": self.matchefficiency.std_dev, "match_efficiency": self.matchefficiency.nominal_value, "filter_efficiency": self.filterefficiency, "filter_efficiency_error": self.filterefficiencyerror, "cross_section": self.xsec, }) req["sequences"][0]["nThreads"] = self.nthreads req["keep_output"][0] = bool(self.keepoutput) req["tags"] = self.tags req["memory"] = self.memory req["validation"].update({ "double_time": self.doublevalidationtime, }) req["extension"] = self.extensionnumber req["notes"] = self.notes return req
def fullinfo(self): if not self.prepid: raise ValueError("Can only call fullinfo once the prepid has been set") result = restful().get("requests", query="prepid="+self.prepid) if not result: raise ValueError("mcm query for prepid="+self.prepid+" returned None!") if len(result) == 0: raise ValueError("mcm query for prepid="+self.prepid+" returned nothing!") if len(result) > 1: raise ValueError("mcm query for prepid="+self.prepid+" returned multiple results!") return result[0]
def optionreset(self): if self.prepid is None: return self.needsupdate = True results = restful().get("restapi/requests/option_reset/"+self.prepid) try: success = bool(results["results"][self.prepid]) except KeyError: success = False if success: self.needsoptionreset = False return success
def getprepid(self): if LSB_JOBID(): return query = "dataset_name={}&extension={}&prepid={}-{}-*".format(self.datasetname, self.extensionnumber, self.pwg, self.campaign) output = restful().get('requests', query=query) prepids = {_["prepid"] for _ in output} prepids -= frozenset(self.badprepid) if not prepids: return None if len(prepids) != 1: raise RuntimeError("Multiple prepids for {} ({})".format(self, self.datasetname, query)) assert len(prepids) == 1, prepids self.prepid = prepids.pop()
def originalfullinfo(self): result = restful().get("requests", query="prepid=" + self.originalprepid) if not result: raise ValueError("mcm query for prepid=" + self.originalprepid + " returned None!") if len(result) == 0: raise ValueError("mcm query for prepid=" + self.originalprepid + " returned nothing!") if len(result) > 1: raise ValueError("mcm query for prepid=" + self.originalprepid + " returned multiple results!") return result[0]
def badprepid(self): with cd(here): result = self.value.get("badprepid", []) #backwards compatibility if isinstance(result, basestring): result = [result] originalresult = result[:] for _ in result[:]: if not LSB_JOBID() and not restful().get("requests", _): result.remove(_) if result != originalresult: self.badprepid = result return result
def getprepid(self): super(ClonedRequest, self).getprepid() if self.prepid: return if LSB_JOBID(): return query = "dataset_name={}&extension={}&prepid={}-{}-*".format( self.originalfullinfo["dataset_name"], self.extensionnumber, self.pwg, self.campaign) output = restful().get('requests', query=query) prepids = {_["prepid"] for _ in output} if not prepids: return None if len(prepids) != 1: raise RuntimeError("Multiple prepids for {} ({})".format( self, self.datasetname, query)) assert len(prepids) == 1, prepids self.prepid = prepids.pop()
def updaterequest(self): mcm = restful() req = self.getdictforupdate() try: answer = mcm.update('requests', req) except pycurl.error as e: # if e[0] == 52 and e[1] == "Empty reply from server": # self.badprepid += [self.prepid] # del self.prepid # return # else: raise if not (answer and answer.get("results")): raise RuntimeError("Failed to modify the request on McM\n{}\n{}".format(self, answer)) self.needsupdate = False self.needsupdateiffailed = False self.resettimeperevent = False
def createrequest(self, clonequeue): if LSB_JOBID(): return "run locally to submit to McM" mcm = restful() req = { "pwg": self.pwg, "member_of_campaign": self.campaign, "mcdb_id": 0, "dataset_name": self.datasetname, "extension": self.extensionnumber, } answer = mcm.put("requests", req) if not (answer and answer.get("results")): raise RuntimeError("Failed to create the request on McM\n{}\n\n{}\n\n{}".format(self, req, answer)) self.getprepid() if self.prepid != answer["prepid"]: raise RuntimeError("Wrong prepid?? {} {}".format(self.prepid, answer["prepid"])) self.updaterequest() return "created request "+self.prepid+" on McM"
def createrequest(self, clonequeue): self.needsupdate = True return clonequeue.add(self, self.pwg, self.newcampaign) if LSB_JOBID(): return "run locally to submit to McM" mcm = restful() clone_req = mcm.get('requests', self.originalprepid) clone_req['member_of_campaign'] = self.campaign answer = mcm.clone(self.originalprepid, clone_req) if not (answer and answer.get("results")): raise RuntimeError( "Failed to create the request on McM\n{}\n{}".format( self, answer)) self.getprepid() if self.prepid != answer["prepid"]: raise RuntimeError("Wrong prepid?? {} {}".format( self.prepid, answer["prepid"])) self.updaterequest() return "cloned request " + self.originalprepid + " as " + self.prepid + " on McM"