def get_io_spec(spec, skip_fields=None): if skip_fields is None: skip_fields = [] filtered_spec = [param for param in spec if param["name"] not in skip_fields] groups = defaultdict(list) for param in filtered_spec: groups[param.get('group')].append(param) list_of_params = [] for param in groups.get(None, []): list_of_params.append(get_io_desc(param)) for group in groups: if group is None: continue list_of_params.append("{g}:".format(g=group)) for param in groups[group]: list_of_params.append(" "+get_io_desc(param)) if len(skip_fields) > 0: list_of_params.append("<advanced inputs hidden; use --verbose to see more>") if len(list_of_params) == 0: return '-' if get_delimiter() is not None: return ('\n' + get_delimiter()).join(list_of_params) else: return ('\n' + ' '*16).join([fill(param, subsequent_indent=' '*18, width_adjustment=-18) for param in list_of_params])
def get_io_field(io_hash, defaults={}, delim='=', highlight_fields=[]): if io_hash is None: return '-' if len(io_hash) == 0 and len(defaults) == 0: return '-' def highlight_value(key, value): if key in highlight_fields: return YELLOW() + value + ENDC() else: return value if get_delimiter() is not None: return ('\n' + get_delimiter()).join( [(key + delim + highlight_value(key, io_val_to_str(value))) for key, value in io_hash.items()] + [('[' + key + delim + io_val_to_str(value) + ']') for key, value in defaults.items()]) else: return ('\n').join([ fill(key + ' ' + delim + ' ' + highlight_value(key, io_val_to_str(value)), initial_indent=' ' * 16, subsequent_indent=' ' * 17, break_long_words=False) for key, value in io_hash.items() ] + [ fill('[' + key + ' ' + delim + ' ' + io_val_to_str(value) + ']', initial_indent=' ' * 16, subsequent_indent=' ' * 17, break_long_words=False) for key, value in defaults.items() ])[16:]
def get_io_spec(spec, skip_fields=None): if skip_fields is None: skip_fields = [] filtered_spec = [ param for param in spec if param["name"] not in skip_fields ] groups = defaultdict(list) for param in filtered_spec: groups[param.get('group')].append(param) list_of_params = [] for param in groups.get(None, []): list_of_params.append(get_io_desc(param)) for group in groups: if group is None: continue list_of_params.append("{g}:".format(g=group)) for param in groups[group]: list_of_params.append(" " + get_io_desc(param)) if len(skip_fields) > 0: list_of_params.append( "<advanced inputs hidden; use --verbose to see more>") if len(list_of_params) == 0: return '-' if get_delimiter() is not None: return ('\n' + get_delimiter()).join(list_of_params) else: return ('\n' + ' ' * 16).join([ fill(param, subsequent_indent=' ' * 18, width_adjustment=-18) for param in list_of_params ])
def print_field(label, value): if get_delimiter() is not None: sys.stdout.write(label + get_delimiter() + value + '\n') else: sys.stdout.write( label + " " * (16 - len(label)) + fill(value, subsequent_indent=' ' * 16, width_adjustment=-16) + '\n')
def get_find_jobs_string(jobdesc, has_children, single_result=False, show_outputs=True): ''' :param jobdesc: hash of job describe output :param has_children: whether the job has subjobs to be printed :param single_result: whether the job is displayed as a single result or as part of a job tree ''' is_origin_job = jobdesc['parentJob'] is None or single_result result = ("* " if is_origin_job and get_delimiter() is None else "") canonical_job_name = jobdesc['executableName'] + ":" + jobdesc['function'] job_name = jobdesc.get('name', '<no name>') result += BOLD() + BLUE() + job_name + ENDC() if job_name != canonical_job_name and job_name+":main" != canonical_job_name: result += ' (' + canonical_job_name + ')' result += DELIMITER(' (') + JOB_STATES(jobdesc['state']) + DELIMITER(') ') + jobdesc['id'] result += DELIMITER('\n' + (u'│ ' if is_origin_job and has_children else (" " if is_origin_job else ""))) result += jobdesc['launchedBy'][5:] + DELIMITER(' ') result += render_short_timestamp(jobdesc['created']) if jobdesc['state'] in ['done', 'failed', 'terminated', 'waiting_on_output']: # TODO: Remove this check once all jobs are migrated to have these values if 'stoppedRunning' in jobdesc and 'startedRunning' in jobdesc: result += " (runtime {r})".format(r=str(datetime.timedelta(seconds=int(jobdesc['stoppedRunning']-jobdesc['startedRunning'])/1000))) elif jobdesc['state'] == 'running': result += " (running for {rt})".format(rt=datetime.timedelta(seconds=int(time.time()-jobdesc['startedRunning']/1000))) if show_outputs: prefix = DELIMITER('\n' + (u'│ ' if is_origin_job and has_children else (" " if is_origin_job else ""))) if jobdesc.get("output") != None: result += job_output_to_str(jobdesc['output'], prefix=prefix) elif jobdesc['state'] == 'failed' and 'failureReason' in jobdesc: result += prefix + BOLD() + jobdesc['failureReason'] + ENDC() + ": " + fill(jobdesc.get('failureMessage', ''), subsequent_indent=prefix.lstrip('\n')) return result
def get_io_field(io_hash, defaults={}, delim='=', highlight_fields=[]): if io_hash is None: return '-' if len(io_hash) == 0 and len(defaults) == 0: return '-' def highlight_value(key, value): if key in highlight_fields: return YELLOW() + value + ENDC() else: return value if get_delimiter() is not None: return ('\n' + get_delimiter()).join([(key + delim + highlight_value(key, io_val_to_str(value))) for key, value in io_hash.items()] + [('[' + key + delim + io_val_to_str(value) + ']') for key, value in defaults.items()]) else: return ('\n').join([fill(key + ' ' + delim + ' ' + highlight_value(key, io_val_to_str(value)), initial_indent=' '*16, subsequent_indent=' '*17, break_long_words=False) for key, value in io_hash.items()] + [fill('[' + key + ' ' + delim + ' ' + io_val_to_str(value) + ']', initial_indent=' '*16, subsequent_indent=' '*17, break_long_words=False) for key, value in defaults.items()])[16:]
def get_find_jobs_string(jobdesc, has_children, single_result=False, show_outputs=True): ''' :param jobdesc: hash of job describe output :param has_children: whether the job has subjobs to be printed :param single_result: whether the job is displayed as a single result or as part of a job tree ''' is_origin_job = jobdesc['parentJob'] is None or single_result result = ("* " if is_origin_job and get_delimiter() is None else "") canonical_job_name = jobdesc['executableName'] + ":" + jobdesc['function'] job_name = jobdesc.get('name', '<no name>') result += BOLD() + BLUE() + job_name + ENDC() if job_name != canonical_job_name and job_name + ":main" != canonical_job_name: result += ' (' + canonical_job_name + ')' result += DELIMITER(' (') + JOB_STATES( jobdesc['state']) + DELIMITER(') ') + jobdesc['id'] result += DELIMITER('\n' + (u'│ ' if is_origin_job and has_children else (" " if is_origin_job else ""))) result += jobdesc['launchedBy'][5:] + DELIMITER(' ') result += render_short_timestamp(jobdesc['created']) if jobdesc['state'] in [ 'done', 'failed', 'terminated', 'waiting_on_output' ]: # TODO: Remove this check once all jobs are migrated to have these values if 'stoppedRunning' in jobdesc and 'startedRunning' in jobdesc: result += " (runtime {r})".format(r=str( datetime.timedelta(seconds=int(jobdesc['stoppedRunning'] - jobdesc['startedRunning']) / 1000))) elif jobdesc['state'] == 'running': result += " (running for {rt})".format(rt=datetime.timedelta( seconds=int(time.time() - jobdesc['startedRunning'] / 1000))) if show_outputs: prefix = DELIMITER('\n' + (u'│ ' if is_origin_job and has_children else (" " if is_origin_job else ""))) if jobdesc.get("output") != None: result += job_output_to_str(jobdesc['output'], prefix=prefix) elif jobdesc['state'] == 'failed' and 'failureReason' in jobdesc: result += prefix + BOLD() + jobdesc['failureReason'] + ENDC( ) + ": " + fill(jobdesc.get('failureMessage', ''), subsequent_indent=prefix.lstrip('\n')) return result
def print_field(label, value): if get_delimiter() is not None: sys.stdout.write(label + get_delimiter() + value + '\n') else: sys.stdout.write(label + " " * (16-len(label)) + fill(value, subsequent_indent=' '*16, width_adjustment=-16) + '\n')