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/20 17:18:15 UTC

incubator-ariatosca git commit: wip2

Repository: incubator-ariatosca
Updated Branches:
  refs/heads/ARIA-146-Support-colorful-execution-logging 3a7657431 -> ca1baab67


wip2


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/ca1baab6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/ca1baab6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/ca1baab6

Branch: refs/heads/ARIA-146-Support-colorful-execution-logging
Commit: ca1baab678aa40057eacf5d08a5a83c89074b830
Parents: 3a76574
Author: max-orlov <ma...@gigaspaces.com>
Authored: Thu Apr 20 20:18:11 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Thu Apr 20 20:18:11 2017 +0300

----------------------------------------------------------------------
 aria/cli/color.py             | 20 ++++++---
 aria/cli/execution_logging.py | 92 +++++++++++++++++++++++++++++---------
 2 files changed, 86 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/ca1baab6/aria/cli/color.py
----------------------------------------------------------------------
diff --git a/aria/cli/color.py b/aria/cli/color.py
index 54ee4bf..7b20d30 100644
--- a/aria/cli/color.py
+++ b/aria/cli/color.py
@@ -19,32 +19,42 @@ import colorama
 colorama.init()
 
 
-class StyledString(str):
+class StyledString(object):
 
     fore = colorama.Fore
     back = colorama.Back
     style = colorama.Style
 
-    def __init__(self, str_, *args):
+    def __init__(self, str_to_stylize, *args, **kwargs):
+        """
+        
+        :param str_to_stylize: 
+        :param 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_
+        self._str = str_to_stylize
         self._args = args
         self._stylized_str = None
 
     def __str__(self):
         if self._stylized_str is None:
             styling_str = StringIO()
-            for arg in self._args:
-                styling_str.write(arg)
+            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
 
+    def _apply_style(self, styling_str):
+        for arg in self._args:
+            styling_str.write(arg)
+
     def _is_valid(self, value):
         return any(value in vars(instance).values()
                    for instance in (self.fore, self.back, self.style))

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/ca1baab6/aria/cli/execution_logging.py
----------------------------------------------------------------------
diff --git a/aria/cli/execution_logging.py b/aria/cli/execution_logging.py
index 17e396d..0743abd 100644
--- a/aria/cli/execution_logging.py
+++ b/aria/cli/execution_logging.py
@@ -12,7 +12,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
+import os
 from StringIO import StringIO
 
 from .color import StyledString
@@ -20,22 +20,67 @@ from . import logger
 from .env import env
 
 DEFAULT_FORMATTING = {
-    logger.NO_VERBOSE: {'message': '{item.msg}'},
+    logger.NO_VERBOSE: {'message': '{message}'},
     logger.LOW_VERBOSE: {
-        'message': '{timestamp} | {level} | {item.msg}',
+        'message': '{timestamp} | {level} | {message}',
+        'level': '{level[0]}',
         'timestamp': '%H:%M:%S',
     },
     logger.MEDIUM_VERBOSE: {
-        'message': '{timestamp} | {level} | {implementation} | {item.msg} ',
+        'message': '{timestamp} | {level} | {implementation} | {message} ',
+        'level': '{level[0]}',
         'timestamp': '%H:%M:%S'
     },
     logger.HIGH_VERBOSE: {
-        'message': '{timestamp} | {level} | {implementation}({inputs}) | {item.msg} ',
+        '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, )
+    }
+    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(), []))
+
+
+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 _style_traceback(traceback):
+    return StyledString(traceback, StyledString.fore.RED, StyledString.style.DIM)
+
+
+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
+
+
 def _str(item, formats=None):
     # If no formats are passed we revert to the default formats (per level)
     formats = formats or {}
@@ -44,33 +89,36 @@ def _str(item, formats=None):
     msg = StringIO()
     formatting_kwargs = dict(item=item)
 
-    # region level styling
-
-    levels_format = {
-        'debug': (StyledString.back.LIGHTRED_EX,)
-    }
-    formatting_kwargs['level'] = StyledString(item.level[0], *levels_format.get(item.level.lower(), []))
-
-    # endregion level styling
+    # level
+    formatting_kwargs['level'] = _style_level(item.level)
 
+    # implementation
     if item.task:
-        formatting_kwargs['implementation'] = item.task.implementation
-        formatting_kwargs['inputs'] = dict(i.unwrap() for i in item.task.inputs.values())
+        implementation = item.task.implementation
+        inputs = dict(i.unwrap() for i in item.task.inputs.values())
     else:
-        formatting_kwargs['implementation'] = item.execution.workflow_name
-        formatting_kwargs['inputs'] = dict(i.unwrap() for i in item.execution.inputs.values())
+        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)
 
+    # timestamp
     if 'timestamp' in formatting:
-        formatting_kwargs['timestamp'] = item.created_at.strftime(formatting['timestamp'])
+        timestamp = item.created_at.strftime(formatting['timestamp'])
     else:
-        formatting_kwargs['timestamp'] = item.created_at
+        timestamp = item.created_at
+    formatting_kwargs['timestamp'] = _style_timestamp(timestamp, item.level)
 
-    msg.write(formatting['message'].format(**formatting_kwargs))
+    # message
+    formatting_kwargs['message'] = _style_msg(item.msg, item.level)
+
+    msg.write(formatting['message'].format(**formatting_kwargs) + os.linesep)
 
     # Add the exception and the error msg.
     if item.traceback and env.logging.verbosity_level >= logger.MEDIUM_VERBOSE:
         for line in item.traceback.splitlines(True):
-            msg.write('\t' + '|' + line)
+            msg.write(_style_traceback('\t' + '|' + line))
 
     return msg.getvalue()
 
@@ -85,3 +133,5 @@ def log_list(iterator):
         log(item)
         any_logs = True
     return any_logs
+
+