Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion simpleflow/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import swf.querysets

from simpleflow.history import History
from simpleflow.settings import logging_formatter
from simpleflow.settings.logging_formatter import ColorModes
from simpleflow.swf.stats import pretty
from simpleflow.swf import helpers
from simpleflow.swf.process import decider
Expand Down Expand Up @@ -76,11 +78,14 @@ def comma_separated_list(value):
@click.group()
@click.option('--format')
@click.option('--header/--no-header', default=False)
@click.option('--color', type=click.Choice([ColorModes.AUTO, ColorModes.ALWAYS, ColorModes.NEVER]),
default=ColorModes.AUTO)
@click.version_option(version=__version__)
@click.pass_context
def cli(ctx, header, format):
def cli(ctx, header, format, color):
ctx.params['format'] = format
ctx.params['header'] = header
logging_formatter.color_mode = color


def get_workflow_type(domain_name, workflow_class):
Expand Down
35 changes: 33 additions & 2 deletions simpleflow/settings/logging_formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,17 @@
END = '\033[0m'


class ColorModes(object):
AUTO = 'auto'
ALWAYS = 'always'
NEVER = 'never'

color_mode = 'auto'


def colorize(level, message):
# if not in a tty, we're likely redirected or piped
if not sys.stdout.isatty():
if color_mode == ColorModes.NEVER or (color_mode == ColorModes.AUTO and not sys.stdout.isatty()):
return message

# color mappings
Expand Down Expand Up @@ -60,4 +68,27 @@ def format(self, record):
record.isodate = date.isoformat()
record.message = record.msg % record.args
record.coloredlevel = colorize(record.levelname, record.levelname)
return "%(isodate)s %(coloredlevel)s [process=%(processName)s, pid=%(process)s]: %(message)s" % record.__dict__
s = "%(isodate)s %(coloredlevel)s [process=%(processName)s, pid=%(process)s]: %(message)s" % record.__dict__

# C&P from logging.Formatter#format
if record.exc_info:
# Cache the traceback text to avoid converting it multiple times
# (it's constant anyway)
if not record.exc_text:
record.exc_text = self.formatException(record.exc_info)
if record.exc_text:
if s[-1:] != "\n":
s = s + "\n"
try:
s = s + record.exc_text
except UnicodeError:
# Sometimes filenames have non-ASCII chars, which can lead
# to errors when s is Unicode and record.exc_text is str
# See issue 8924.
# We also use replace for when there are multiple
# encodings, e.g. UTF-8 for the filesystem and latin-1
# for a script. See issue 13232.
s = s + record.exc_text.decode(sys.getfilesystemencoding(),
'replace')

return s