Implement --colorize option
authorEd Bartosh <eduard.bartosh@intel.com>
Wed, 2 Apr 2014 12:32:34 +0000 (15:32 +0300)
committerEd Bartosh <eduard.bartosh@intel.com>
Mon, 7 Apr 2014 13:17:33 +0000 (16:17 +0300)
For now only status is colorized in repa list output. More colorized
pieces will come if users request them.

Fixes: #1765

Change-Id: Ic0517aaa03f443d4e661018a9638712a9afa514b
Signed-off-by: Ed Bartosh <eduard.bartosh@intel.com>
repa.1
repa/list.py
repa/main.py

diff --git a/repa.1 b/repa.1
index e01a530..b0b6aa5 100644 (file)
--- a/repa.1
+++ b/repa.1
@@ -73,6 +73,11 @@ Config section to use
 Target OBS project.
 .RE
 
+.PP
+.B \-c, \-\-colorize
+.RS 2
+Turn on colorized output
+.RE
 
 .\" ===========================================================================
 .\" Commands descriptions
@@ -311,13 +316,16 @@ processes = 20
 .RS 2
 project = Tizen:IVI
 .RE
+.RS 2
+color = off
+.RE
 
 .RS 2
 Mandatory options: apiurl, apiuser, apipasswd and project
 .RE
 
 .RS 2
-Some options (project, processes) can be overridden by commandline options (--project, --processes)
+Some options (project, processes, colorize) can be overridden by commandline options (--project, --processes, --colorize)
 .RE
 
 .SH BUGS
index f3db2b9..fcb55b9 100755 (executable)
@@ -32,12 +32,11 @@ Get list of submissions.
 import sys
 import json
 
-from repa.common import OBS_PROJECT_PREFIX
+from repa.common import OBS_PROJECT_PREFIX, Colorizer
 from repa.obs import OBS
 from repa.main import sub_main
 
-
-def get_status(meta, build_results=None):
+def get_status(meta, colorizer, build_results=None):
     """Get overall status by analyzing package and image build status."""
     if build_results:
         codes = set()
@@ -47,26 +46,28 @@ def get_status(meta, build_results=None):
             for pkginfo in target['packages']:
                 codes.add(pkginfo[1])
 
-        statuses = [('broken', 'broken source'),
-                    ('unresolvable', 'unresolvable packages'),
-                    ('failed', 'package build failed'),
-                    ('building', 'package building')]
-        for pkgstatus, status in statuses:
+        statuses = [('broken', ('red', 'broken source')),
+                    ('unresolvable', ('red', 'unresolvable packages')),
+                    ('failed', ('red', 'package build failed')),
+                    ('building', ('blue', 'package building'))]
+        for pkgstatus, (color, status) in statuses:
             if pkgstatus in codes:
-                return status
+                return getattr(colorizer, color)(status)
 
     if 'images' in meta:
         for img in meta['images']:
-            statuses = [('failed', 'image build failed'),
-                        ('building', 'image building')]
-            for imgstatus, status in statuses:
+            statuses = [('failed', ('red', 'image build failed')),
+                        ('building', ('blue', 'image building'))]
+            for imgstatus, (color, status) in statuses:
                 if img['status'] == imgstatus:
-                    return status
-    return 'ready'
+                    return getattr(colorizer, color)(status)
+
+    return colorizer.green('ready')
 
 
-def list_submissions(obs, target, processes):
+def list_submissions(obs, target, processes, is_colorize=False):
     """List submissions and groups."""
+    colorizer = Colorizer(is_colorize)
     # submissions
     groups = []
     for project, desc, build_results in \
@@ -78,13 +79,13 @@ def list_submissions(obs, target, processes):
             continue
         projects = [project.split('/')[-1] for project in meta['projects']]
         print '%-37s %-22s %s' % (meta['git_tag'], \
-              get_status(meta, build_results), ','.join(projects))
+              get_status(meta, colorizer, build_results), ','.join(projects))
 
     # groups
     if groups:
         print
         for meta in groups:
-            print '%-37s %-22s' % (meta['name'], get_status(meta))
+            print '%-37s %-22s' % (meta['name'], get_status(meta, colorizer))
 
 
 class List(object):
@@ -108,7 +109,8 @@ class List(object):
     def run(argv):
         """Command line entry point. Called from [sub_]main"""
         obs = OBS(argv.apiurl, argv.apiuser, argv.apipasswd)
-        return list_submissions(obs, argv.project, argv.processes)
+        return list_submissions(obs, argv.project, argv.processes,
+                                argv.colorize)
 
 
 if __name__ == '__main__':
index 4517777..b701389 100755 (executable)
@@ -61,6 +61,9 @@ def parse_args(argv):
                         help='config section to use')
     parser.add_argument('-p', '--project', help='target project',
                         default=config.get('project'))
+    parser.add_argument('-c', '--colorize', action='store_true',
+                        help='colorize the output',
+                        default=config.get('colorize', '').lower() == 'on')
 
     subparsers = parser.add_subparsers(help='sub-command help')
     for entry in pkg_resources.iter_entry_points(group='repa_commands'):