예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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