def format_enc_publishers(enc, descriptions): table = [] table.append([ 'name', 'type', 'topic', 'options', 'description', ]) for p in enc.publishers.values(): if p.desc: desc = dtu.wrap_line_length(p.desc, 80) else: desc = '(none)' options = [] if p.queue_size is not None: options.append('queue_size = %s ' % p.queue_size) if p.latch is not None: options.append('latch = %s' % p.latch) options = '\n'.join(options) table.append([p.name, p.type.__name__, p.topic, options, desc]) if not descriptions: dtu.remove_table_field(table, 'description') return dtu.format_table_plus(table, 2)
def format_enc_subscriptions(enc, descriptions): table = [] table.append([ 'name', 'type', 'topic', 'options', 'process', 'description', ]) for p in enc.subscriptions.values(): if p.desc: desc = wrap_line_length(p.desc, 80) else: desc = '(none)' options = [] if p.queue_size is not None: options.append('queue_size = %s' % p.queue_size) if p.latch is not None: options.append('latch = %s ' % p.latch) if p.timeout is not None: options.append('timeout = %s ' % p.timeout) options = '\n'.join(options) table.append( [p.name, p.type.__name__, p.topic, options, p.process, desc]) if not descriptions: remove_table_field(table, 'description') return format_table_plus(table, 2)
def format_enc_parameters(enc, descriptions): table = [] table.append([ 'name', 'type', 'default', 'description', ]) for p in enc.parameters.values(): if p.desc: desc = dtu.wrap_line_length(p.desc, 80) else: desc = '(none)' if p.has_default: default = p.default else: default = '(none)' if p.type is None: t = '(n/a)' else: t = p.type.__name__ table.append([p.name, t, default, desc]) if not descriptions: dtu.remove_table_field(table, 'description') return dtu.format_table_plus(table, 2)
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 format_logs(logs): if not logs: s = "No logs found." return s else: s = "Found %d logs.\n" % len(logs) table = get_logs_description_table(logs) dtu.remove_table_field(table, 'filename') dtu.remove_table_field(table, 'topics') dtu.remove_table_field(table, 'description') dtu.remove_table_field(table, 'hash bag') s += dtu.indent(dtu.format_table_plus(table, colspacing=4), '| ') counts = defaultdict(lambda: set()) for l in logs.values(): for rname, dtr_yaml in l.resources.items(): counts[rname].add(dtr_yaml['name']) s += '\n\nCount of resources: ' rsort = sorted(counts, key=lambda _: -len(counts[_])) for rname in rsort: rcount = len(counts[rname]) s += '\n %3d %s' % (rcount, rname) if rcount <= 3: s += ' ' + ' '.join(counts[rname]) return s
def user_config_summary(): db = get_config_db() def apply_to_lines(f, x): return "\n".join(f(_) for _ in x.split('\n')) def red(s): red_ = lambda _: termcolor.colored(_, 'red') return apply_to_lines(red_, s) red = lambda x: x table = [] table.append([ 'package name', 'node name', 'config_name', 'effective', 'extends', 'valid', 'error', 'description', 'filename', ]) for c in db.configs: assert isinstance(c, ConfigInfo) d = dtu.truncate_string_right(c.description.replace('\n', ' '), 40) date = c.date_effective.strftime('%Y-%m-%d') if c.valid is None: valid = '?' valid_error = '' else: valid = 'yes' if c.valid else red('no') valid_error = '' if c.valid else red(c.error_if_invalid) table.append([ c.package_name, c.node_name, c.config_name, date, c.extends, valid, valid_error, d, dtu.friendly_path(c.filename) ]) dtu.remove_table_field(table, 'filename') s = dtu.format_table_plus(table, colspacing=4) return s
def format_instances(family, colorize, verbose=False): if not family.instances: s = ('No instances files found for family "%s" (pattern = %s).\n\n' % (family.family_name, family.instances_pattern)) return s else: s = ('Found %d instances of algorithm family "%s":\n' % (len(family.instances), family.family_name)) table = [] table.append([ 'Instance name', 'constructor', 'parameters', 'description', 'filename' ]) for _ in family.instances.values(): row = [] name = _.instance_name if (not _.valid) and colorize: name = dtu.make_red(name) row.append(name) row.append(_.constructor) row.append(dtu.yaml_dump_pretty(_.parameters)) row.append(_.description) row.append(dtu.friendly_path(_.filename)) table.append(row) if not verbose: dtu.remove_table_field(table, 'filename') dtu.remove_table_field(table, 'description') s += dtu.indent(dtu.format_table_plus(table, colspacing=4), '| ') for _ in family.instances.values(): if not _.valid: msg = _.error_if_invalid s += dtu.make_red('\n' + dtu.indent(msg, '', _.instance_name + ': ')) return s
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