def set_value(self, item, value, subgroup=None, ignore_type=False): """ Override the entry_id set_value function with some special cases for this class """ val = None if item == "JOB_WALLCLOCK_TIME": #Most systems use %H:%M:%S format for wallclock but LSF #uses %H:%M this code corrects the value passed in to be #the correct format - if we find we have more exceptions #than this we may need to generalize this further walltime_format = self.get_value("walltime_format", subgroup=None) if walltime_format is not None and walltime_format.count(":") != value.count(":"): # pylint: disable=maybe-no-member if value.count(":") == 1: t_spec = "%H:%M" elif value.count(":") == 2: t_spec = "%H:%M:%S" else: expect(False, "could not interpret format for wallclock time {}".format(value)) value = format_time(walltime_format, t_spec, value) # allow the user to set item for all jobs if subgroup is not provided if subgroup is None: nodes = self.get_nodes("entry", {"id":item}) for node in nodes: self._set_value(node, value, vid=item, ignore_type=ignore_type) val = value else: group = self.get_optional_node("group", {"id":subgroup}) if group is not None: node = self.get_optional_node("entry", {"id":item}, root=group) if node is not None: val = self._set_value(node, value, vid=item, ignore_type=ignore_type) return val
def set_value(self, item, value, subgroup=None, ignore_type=False): """ Override the entry_id set_value function with some special cases for this class """ val = None if item == "JOB_WALLCLOCK_TIME": #Most systems use %H:%M:%S format for wallclock but LSF #uses %H:%M this code corrects the value passed in to be #the correct format - if we find we have more exceptions #than this we may need to generalize this further walltime_format = self.get_value("walltime_format", subgroup=None) if walltime_format is not None and walltime_format.count(":") != value.count(":"): # pylint: disable=maybe-no-member if value.count(":") == 1: t_spec = "%H:%M" elif value.count(":") == 2: t_spec = "%H:%M:%S" else: expect(False, "could not interpret format for wallclock time {}".format(value)) value = format_time(walltime_format, t_spec, value) # allow the user to set item for all jobs if subgroup is not provided if subgroup is None: nodes = self.get_children("entry", {"id":item}) for node in nodes: self._set_value(node, value, vid=item, ignore_type=ignore_type) val = value else: group = self.get_optional_child("group", {"id":subgroup}) if group is not None: node = self.get_optional_child("entry", {"id":item}, root=group) if node is not None: val = self._set_value(node, value, vid=item, ignore_type=ignore_type) return val
if walltime is None: # Figure out walltime if specs is None: # Queue is unknown, use specs from default queue walltime = self.get(self.get_default_queue(), "walltimemax") else: walltime = specs[3] walltime = self._default_walltime if walltime is None else walltime # last-chance fallback walltime_format = self.get_value("walltime_format") if walltime_format: seconds = convert_to_seconds(walltime) full_bab_time = convert_to_babylonian_time(seconds) walltime = format_time(walltime_format, "%H:%M:%S", full_bab_time) env_workflow.set_value("JOB_QUEUE", self.text(queue), subgroup=job, ignore_type=specs is None) env_workflow.set_value("JOB_WALLCLOCK_TIME", walltime, subgroup=job) logger.debug("Job {} queue {} walltime {}".format( job, self.text(queue), walltime)) def _match_attribs(self, attribs, case, queue): # check for matches with case-vars for attrib in attribs: if attrib in ["default", "prefix"]: