| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | from __future__ import absolute_importfrom __future__ import unicode_literalsimport loggingimport osimport siximport texttablefrom compose.cli import colorsdef get_tty_width():    tty_size = os.popen('stty size 2> /dev/null', 'r').read().split()    if len(tty_size) != 2:        return 0    _, width = tty_size    return int(width)class Formatter(object):    """Format tabular data for printing."""    def table(self, headers, rows):        table = texttable.Texttable(max_width=get_tty_width())        table.set_cols_dtype(['t' for h in headers])        table.add_rows([headers] + rows)        table.set_deco(table.HEADER)        table.set_chars(['-', '|', '+', '-'])        return table.draw()class ConsoleWarningFormatter(logging.Formatter):    """A logging.Formatter which prints WARNING and ERROR messages with    a prefix of the log level colored appropriate for the log level.    """    def get_level_message(self, record):        separator = ': '        if record.levelno == logging.WARNING:            return colors.yellow(record.levelname) + separator        if record.levelno == logging.ERROR:            return colors.red(record.levelname) + separator        return ''    def format(self, record):        if isinstance(record.msg, six.binary_type):            record.msg = record.msg.decode('utf-8')        message = super(ConsoleWarningFormatter, self).format(record)        return '{0}{1}'.format(self.get_level_message(record), message)
 |