def format_families(families, colorize=True, verbose=True): if not families: s = "No algorithm families found." return s else: table = [] table.append([ 'Family name', 'interface', 'pattern', '# found', 'valid', 'filename', 'description', ]) for family in families: assert isinstance(family, EasyAlgoFamily) row = [] row.append(family.family_name) row.append(family.interface) row.append(family.instances_pattern) if not family.instances: row.append('\n(none)') else: n_valid = len( [_ for _ in family.instances.values() if _.valid]) n_invalid = len(family.instances) - n_valid ss = '%s' % len(family.instances) if n_invalid: ss += dtu.make_red(' (%d invalid)' % n_invalid) row.append(ss) if family.valid: ss = 'yes' else: ss = 'no: ' + family.error_if_invalid row.append(ss) row.append(dtu.friendly_path(family.filename)) if (not family.valid) and colorize: row = dtu.make_row_red(row) row.append(family.description.strip()) table.append(row) if not verbose: dtu.remove_table_field(table, 'filename') s = "Found %d algorithm families:\n\n" % len(families) s += dtu.indent(dtu.format_table_plus(table, colspacing=4), ' ') return s
def test_table(): table = get_test_table() r1 = dtu.format_table_plus(table) table[1] = dtu.make_row_red(table[1]) r2 = dtu.format_table_plus(table) #print r1 #print r2 r2e = dtu.remove_escapes(r2) #print r2e assert r1 == r2e
def format_logs(logs): if not logs: s = "No logs found." return s else: s = "Found %d logs.\n" % len(logs) table = [] table.append([ '#', 'Log name', 'map', 'description', 'date', 'length', 'vehicle name', 'filename', 'valid', 'topics' ]) for i, (_, log) in enumerate(logs.items()): row = [] row.append(i) row.append(log.log_name) row.append(log.map_name) row.append(log.description) row.append(log.date) if log.length is not None: l = '%5.1f s' % log.length else: l = '(none)' row.append(l) row.append(log.vehicle) if log.filename is None: row.append('not local') else: row.append(friendly_path(log.filename)) if log.valid: s = 'Yes.' else: s = log.error_if_invalid row.append(s) if log.bag_info is not None: info = yaml.dump(log.bag_info['topics']) else: info = '(none)' if not log.valid: row = make_row_red(row) row.append(info) table.append(row) remove_table_field(table, 'filename') remove_table_field(table, 'topics') remove_table_field(table, 'description') remove_table_field(table, 'map') s += indent(format_table_plus(table, colspacing=4), '| ') return s
def get_logs_description_table(logs, color=True): table = [] table.append([ '#', 'Log name', 'rc', 'description', 'bag size', 'hash bag', 'date', 'length', 'vehicle name', 'filename', 'valid', 'topics' ]) for i, (_, log) in enumerate(logs.items()): row = [] row.append(i) row.append(log.log_name) row.append(len(log.resources)) # row.append(log.map_name) row.append(log.description) dtr = DTR.from_yaml(log.resources['bag']) bag_size_mb = '%8.1f MB' % (dtr.size / (1024.0 * 1024)) row.append(bag_size_mb) row.append('%s %s \n%s' % (dtr.name, bag_size_mb, dtr.hash['sha1'])) row.append(log.date) if log.length is not None: l = '%5.1f s' % log.length else: l = '(none)' row.append(l) row.append(log.vehicle) try: filename = get_local_bag_file(log) row.append(dtu.friendly_path(filename)) except NotAvailableLocally: row.append('not local') if log.valid: sr = 'Yes.' else: sr = log.error_if_invalid row.append(sr) if log.bag_info is not None: info = yaml.dump(log.bag_info['topics']) else: info = '(none)' if color and not log.valid: row = dtu.make_row_red(row) row.append(info) table.append(row) return table