Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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]
Ejemplo n.º 5
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
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
 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]
Ejemplo n.º 8
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
Ejemplo n.º 9
0
 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()
Ejemplo n.º 10
0
  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
Ejemplo n.º 11
0
 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"
Ejemplo n.º 12
0
    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"