123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from __future__ import absolute_import
- from __future__ import unicode_literals
- import logging
- import os
- import six
- import texttable
- from compose.cli import colors
- def 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)
|