You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ariatosca.apache.org by mx...@apache.org on 2017/04/24 10:55:26 UTC
[5/9] incubator-ariatosca git commit: stylized the logs
stylized the logs
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/86cb1111
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/86cb1111
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/86cb1111
Branch: refs/heads/ARIA-146-Support-colorful-execution-logging
Commit: 86cb11112a4a42e7b047389c65359dbeef8ba4b2
Parents: 6176589
Author: max-orlov <ma...@gigaspaces.com>
Authored: Fri Apr 21 13:53:34 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Mon Apr 24 11:47:11 2017 +0300
----------------------------------------------------------------------
aria/cli/color.py | 41 ++++++-------
aria/cli/execution_logging.py | 120 ++++++++++++++++++++++---------------
2 files changed, 90 insertions(+), 71 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/86cb1111/aria/cli/color.py
----------------------------------------------------------------------
diff --git a/aria/cli/color.py b/aria/cli/color.py
index 7b20d30..ed71238 100644
--- a/aria/cli/color.py
+++ b/aria/cli/color.py
@@ -16,45 +16,38 @@ from StringIO import StringIO
import colorama
-colorama.init()
-
class StyledString(object):
- fore = colorama.Fore
- back = colorama.Back
- style = colorama.Style
+ FORE = colorama.Fore
+ BACK = colorama.Back
+ STYLE = colorama.Style
- def __init__(self, str_to_stylize, *args, **kwargs):
+ def __init__(self, str_to_stylize, *style_args):
"""
:param str_to_stylize:
- :param args:
+ :param style_args:
:param kwargs:
to_close: specifies if end the format on the current line. default to True
"""
- super(StyledString, self).__init__()
- # TODO: raise proper exception
- if not all(self._is_valid(arg) for arg in args):
- raise Exception("bla bla bla")
- self._str = str_to_stylize
- self._args = args
- self._stylized_str = None
+ colorama.init()
+ self._original_str = str_to_stylize
+ self._args = style_args
+ self._apply_style()
def __str__(self):
- if self._stylized_str is None:
- styling_str = StringIO()
- self._apply_style(styling_str)
- styling_str.write(self._str)
- styling_str.write(self.style.RESET_ALL)
- self.stylized_str = styling_str.getvalue()
+ return self._stylized_str
- return self.stylized_str
+ def _apply_style(self):
+ assert all(self._is_valid(arg) for arg in self._args)
- def _apply_style(self, styling_str):
+ styling_str = StringIO()
for arg in self._args:
styling_str.write(arg)
+ styling_str.write(self._original_str)
+ styling_str.write(self.STYLE.RESET_ALL)
+ self._stylized_str = styling_str.getvalue()
def _is_valid(self, value):
- return any(value in vars(instance).values()
- for instance in (self.fore, self.back, self.style))
+ return any(value in vars(type).values() for type in (self.FORE, self.BACK, self.STYLE))
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/86cb1111/aria/cli/execution_logging.py
----------------------------------------------------------------------
diff --git a/aria/cli/execution_logging.py b/aria/cli/execution_logging.py
index 0743abd..6019b94 100644
--- a/aria/cli/execution_logging.py
+++ b/aria/cli/execution_logging.py
@@ -14,71 +14,94 @@
# limitations under the License.
import os
from StringIO import StringIO
+from functools import partial
from .color import StyledString
from . import logger
from .env import env
+
+LEVEL = 'level'
+TIMESTAMP = 'timestamp'
+MESSAGE = 'message'
+IMPLEMENTATION = 'implementation'
+INPUTS = 'inputs'
+TRACEBACK = 'traceback'
+
+
DEFAULT_FORMATTING = {
logger.NO_VERBOSE: {'message': '{message}'},
logger.LOW_VERBOSE: {
- 'message': '{timestamp} | {level} | {message}',
- 'level': '{level[0]}',
- 'timestamp': '%H:%M:%S',
+ MESSAGE: '{timestamp} | {level} | {message}',
+ LEVEL: '{level[0]}',
+ TIMESTAMP: '%H:%M:%S',
},
logger.MEDIUM_VERBOSE: {
- 'message': '{timestamp} | {level} | {implementation} | {message} ',
- 'level': '{level[0]}',
- 'timestamp': '%H:%M:%S'
+ MESSAGE: '{timestamp} | {level} | {implementation} | {message} ',
+ LEVEL: '{level[0]}',
+ TIMESTAMP: '%H:%M:%S'
},
logger.HIGH_VERBOSE: {
- 'message': '{timestamp} | {level} | {implementation}({inputs}) | {message} ',
- 'level': '{level[0]}',
- 'timestamp': '%H:%M:%S'
+ MESSAGE: '{timestamp} | {level} | {implementation} | {inputs} | {message} ',
+ LEVEL: '{level[0]}',
+ TIMESTAMP: '%H:%M:%S'
},
}
-
-def _style_level(level):
- levels_format = {
- 'info': (StyledString.fore.LIGHTBLUE_EX, ),
- 'debug': (StyledString.fore.LIGHTRED_EX, StyledString.style.DIM),
- 'error': (StyledString.fore.RED, )
+DEFAULT_STYLES = {
+ LEVEL: {
+ 'info': (StyledString.FORE.LIGHTMAGENTA_EX,),
+ 'debug': (StyledString.FORE.LIGHTMAGENTA_EX, StyledString.STYLE.DIM),
+ 'error': (StyledString.FORE.RED, StyledString.STYLE.BRIGHT)
+ },
+ TIMESTAMP: {
+ 'info': (StyledString.FORE.LIGHTMAGENTA_EX,),
+ 'debug': (StyledString.FORE.LIGHTMAGENTA_EX, StyledString.STYLE.DIM),
+ 'error': (StyledString.FORE.RED, StyledString.STYLE.BRIGHT)
+ },
+ MESSAGE: {
+ 'info': (StyledString.FORE.LIGHTBLUE_EX,),
+ 'debug': (StyledString.FORE.LIGHTBLUE_EX, StyledString.STYLE.DIM),
+ 'error': (StyledString.FORE.RED, StyledString.STYLE.BRIGHT),
+ },
+ IMPLEMENTATION: {
+ 'info': (StyledString.FORE.LIGHTBLACK_EX,),
+ 'debug': (StyledString.FORE.LIGHTBLACK_EX, StyledString.STYLE.DIM,),
+ 'error': (StyledString.FORE.RED, StyledString.STYLE.BRIGHT,),
+ },
+ INPUTS: {
+ 'info': (StyledString.FORE.BLUE,),
+ 'debug': (StyledString.FORE.BLUE, StyledString.STYLE.DIM),
+ 'error': (StyledString.FORE.RED, StyledString.STYLE.BRIGHT,),
+ },
+ TRACEBACK: {
+ 'error': (StyledString.FORE.RED, )
}
- return StyledString(level[0], *levels_format.get(level.lower(), []))
+}
-def _style_timestamp(timestamp, level):
- timestamp_format = {
- 'info': (StyledString.fore.LIGHTBLUE_EX, StyledString.style.DIM),
- 'debug': (StyledString.fore.LIGHTBLUE_EX, StyledString.style.DIM),
- 'error': (StyledString.fore.RED,)
- }
- return StyledString(timestamp, *timestamp_format.get(level.lower(), []))
+class _StylizedLogs(object):
+ def __init__(self, styles=None):
+ self._styles = styles or DEFAULT_STYLES
-def _style_msg(msg, level):
- msg_foramts = {
- 'info': (StyledString.fore.LIGHTBLUE_EX, ),
- 'debug': (StyledString.fore.LIGHTBLUE_EX, StyledString.style.DIM),
- 'error': (StyledString.fore.RED, ),
- }
- return StyledString(msg, *msg_foramts.get(level.lower(), []))
+ def set_styles(self, styles):
+ self._styles = styles
+ def unset_styles(self, to_defaults=False):
+ self._styles = DEFAULT_STYLES if to_defaults else {}
-def _style_traceback(traceback):
- return StyledString(traceback, StyledString.fore.RED, StyledString.style.DIM)
+ def __getattr__(self, item):
+ return partial(self._style, style_type=item)
+ def level(self, level):
+ return self._style(level[0], level, LEVEL)
+
+ def _style(self, msg, level, style_type):
+ return StyledString(msg, *self._styles[style_type].get(level.lower(), []))
-def _style_implementation(implementation, level):
- implementation_formats = {
- 'info': (StyledString.style.DIM, StyledString.fore.LIGHTBLACK_EX),
- 'debug': (StyledString.style.DIM, StyledString.fore.LIGHTBLACK_EX),
- 'error': (StyledString.fore.RED, ),
- }
- return StyledString(implementation, *implementation_formats.get(level.lower(), []))
-_style_inputs = _style_implementation
+stylized_log = _StylizedLogs()
def _str(item, formats=None):
@@ -90,35 +113,38 @@ def _str(item, formats=None):
formatting_kwargs = dict(item=item)
# level
- formatting_kwargs['level'] = _style_level(item.level)
+ formatting_kwargs['level'] = stylized_log.level(item.level)
# implementation
if item.task:
+ # operation task
implementation = item.task.implementation
inputs = dict(i.unwrap() for i in item.task.inputs.values())
else:
+ # execution task
implementation = item.execution.workflow_name
inputs = dict(i.unwrap() for i in item.execution.inputs.values())
- formatting_kwargs['implementation'] = _style_implementation(implementation, item.level)
- formatting_kwargs['inputs'] = _style_inputs(inputs, item.level)
+ formatting_kwargs['implementation'] = stylized_log.implementation(implementation, item.level)
+ formatting_kwargs['inputs'] = stylized_log.inputs(inputs, item.level)
# timestamp
if 'timestamp' in formatting:
timestamp = item.created_at.strftime(formatting['timestamp'])
else:
timestamp = item.created_at
- formatting_kwargs['timestamp'] = _style_timestamp(timestamp, item.level)
+ formatting_kwargs['timestamp'] = stylized_log.timestamp(timestamp, item.level)
# message
- formatting_kwargs['message'] = _style_msg(item.msg, item.level)
+ formatting_kwargs['message'] = stylized_log.message(item.msg, item.level)
- msg.write(formatting['message'].format(**formatting_kwargs) + os.linesep)
+ msg.write(formatting['message'].format(**formatting_kwargs))
# Add the exception and the error msg.
if item.traceback and env.logging.verbosity_level >= logger.MEDIUM_VERBOSE:
+ msg.write(os.linesep)
for line in item.traceback.splitlines(True):
- msg.write(_style_traceback('\t' + '|' + line))
+ msg.write(stylized_log.traceback('\t' + '|' + line, item.level))
return msg.getvalue()