コード例 #1
0
def print_dict(dct, dict_property="Property", wrap=0):
    """Print a `dict` as a table of two columns.

    :param dct: `dict` to print
    :param dict_property: name of the first column
    :param wrap: wrapping for the second column
    """
    pt = prettytable.PrettyTable([dict_property, 'Value'], caching=False)
    pt.align = 'l'
    for k, v in dct.iteritems():
        # convert dict to str to check length
        if isinstance(v, dict):
            v = str(v)
        if wrap > 0:
            v = textwrap.fill(str(v), wrap)
        # if value has a newline, add in multiple rows
        # e.g. fault with stacktrace
        if v and isinstance(v, basestring) and r'\n' in v:
            lines = v.strip().split(r'\n')
            col1 = k
            for line in lines:
                pt.add_row([col1, line])
                col1 = ''
        else:
            pt.add_row([k, v])
    print(strutils.safe_encode(pt.get_string()))
コード例 #2
0
def print_list(objs, fields, formatters=None, sortby_index=0,
               mixed_case_fields=None):
    """Print a list or objects as a table, one row per object.

    :param objs: iterable of :class:`Resource`
    :param fields: attributes that correspond to columns, in order
    :param formatters: `dict` of callables for field formatting
    :param sortby_index: index of the field for sorting table rows
    :param mixed_case_fields: fields corresponding to object attributes that
        have mixed case names (e.g., 'serverId')
    """
    formatters = formatters or {}
    mixed_case_fields = mixed_case_fields or []
    if sortby_index is None:
        sortby = None
    else:
        sortby = fields[sortby_index]
    pt = prettytable.PrettyTable(fields, caching=False)
    pt.align = 'l'

    for o in objs:
        row = []
        for field in fields:
            if formatters and field in formatters:
                row.append(formatters[field](o))
            else:
                if field in mixed_case_fields:
                    field_name = field.replace(' ', '_')
                else:
                    field_name = field.lower().replace(' ', '_')
                data = getattr(o, field_name, '')
                row.append(data)
        pt.add_row(row)

    print(strutils.safe_encode(pt.get_string(sortby=sortby)))
コード例 #3
0
def print_dict(obj, dict_property='Property', fields=None, titled=False):
    fields = [_field(f, titled=titled) for f in fields or _get_fields(obj)]

    pt = prettytable.PrettyTable([dict_property, 'Value'], caching=False)
    pt.align = 'l'
    for field in fields:
        pt.add_row([field['display'], _get_field_data(obj, field)])
    print(strutils.safe_encode(pt.get_string()))
コード例 #4
0
def main():
    try:
        if sys.version_info >= (3, 0):
            LibraShell().main(sys.argv[1:])
        else:
            LibraShell().main(map(strutils.safe_decode, sys.argv[1:]))
    except KeyboardInterrupt:
        print("... terminating libra client", file=sys.stderr)
        sys.exit(130)
    except Exception as e:
        logger.debug(e, exc_info=1)
        msg = "ERROR: %s" % e.message

        if hasattr(e, "details"):
            msg = "%s, DETAILS: %s" % (msg, e.details)
        if not isinstance(msg, six.string_types):
            msg = str(msg)
        print("%s" % strutils.safe_encode(msg), file=sys.stderr)
        sys.exit(1)
コード例 #5
0
def print_list(objs, fields=None, sort_by=None, titled=False):
    # If no fields are given use objs[0]
    fields = [_field(f, titled=titled) for f in fields or _get_fields(objs[0])]

    # Set the display names for headers.
    field_names = [f['display'] for f in fields]

    # Sort by column
    if sort_by is None:
        sortby = None
    else:
        sortby = fields[sortby_index]
    pt = prettytable.PrettyTable(field_names, caching=False)
    pt.align = 'l'

    for o in objs:
        row = create_row(o, fields=fields, titled=False)
        pt.add_row(row)

    if objs:
        print(strutils.safe_encode(pt.get_string(sortby=sortby)))