Statistics
| Branch: | Tag: | Revision:

root / image_creator / output / cli.py @ 4a847a98

History | View | Annotate | Download (3.7 kB)

1 e77e66a9 Nikos Skalkotos
# Copyright 2012 GRNET S.A. All rights reserved.
2 e77e66a9 Nikos Skalkotos
#
3 e77e66a9 Nikos Skalkotos
# Redistribution and use in source and binary forms, with or
4 e77e66a9 Nikos Skalkotos
# without modification, are permitted provided that the following
5 e77e66a9 Nikos Skalkotos
# conditions are met:
6 e77e66a9 Nikos Skalkotos
#
7 e77e66a9 Nikos Skalkotos
#   1. Redistributions of source code must retain the above
8 e77e66a9 Nikos Skalkotos
#      copyright notice, this list of conditions and the following
9 e77e66a9 Nikos Skalkotos
#      disclaimer.
10 e77e66a9 Nikos Skalkotos
#
11 e77e66a9 Nikos Skalkotos
#   2. Redistributions in binary form must reproduce the above
12 e77e66a9 Nikos Skalkotos
#      copyright notice, this list of conditions and the following
13 e77e66a9 Nikos Skalkotos
#      disclaimer in the documentation and/or other materials
14 e77e66a9 Nikos Skalkotos
#      provided with the distribution.
15 e77e66a9 Nikos Skalkotos
#
16 e77e66a9 Nikos Skalkotos
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 e77e66a9 Nikos Skalkotos
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 e77e66a9 Nikos Skalkotos
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 e77e66a9 Nikos Skalkotos
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 e77e66a9 Nikos Skalkotos
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 e77e66a9 Nikos Skalkotos
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 e77e66a9 Nikos Skalkotos
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 e77e66a9 Nikos Skalkotos
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 e77e66a9 Nikos Skalkotos
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 e77e66a9 Nikos Skalkotos
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 e77e66a9 Nikos Skalkotos
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 e77e66a9 Nikos Skalkotos
# POSSIBILITY OF SUCH DAMAGE.
28 e77e66a9 Nikos Skalkotos
#
29 e77e66a9 Nikos Skalkotos
# The views and conclusions contained in the software and
30 e77e66a9 Nikos Skalkotos
# documentation are those of the authors and should not be
31 e77e66a9 Nikos Skalkotos
# interpreted as representing official policies, either expressed
32 e77e66a9 Nikos Skalkotos
# or implied, of GRNET S.A.
33 e77e66a9 Nikos Skalkotos
34 4e58b51b Nikos Skalkotos
from image_creator.output import Output
35 4e58b51b Nikos Skalkotos
36 e77e66a9 Nikos Skalkotos
import sys
37 e77e66a9 Nikos Skalkotos
from colors import red, green, yellow
38 4e58b51b Nikos Skalkotos
from progress.bar import Bar
39 e77e66a9 Nikos Skalkotos
40 e77e66a9 Nikos Skalkotos
41 4e58b51b Nikos Skalkotos
def output(msg='', new_line=True, decorate=lambda x: x):
42 710adfb2 Nikos Skalkotos
    nl = "\n" if new_line else ' '
43 4e58b51b Nikos Skalkotos
    sys.stderr.write(decorate(msg) + nl)
44 e77e66a9 Nikos Skalkotos
45 e77e66a9 Nikos Skalkotos
46 4e58b51b Nikos Skalkotos
def error(msg, new_line=True, colored=True):
47 4e58b51b Nikos Skalkotos
    color = red if colored else lambda x: x
48 4e58b51b Nikos Skalkotos
    output("Error: %s" % msg, new_line, color)
49 e77e66a9 Nikos Skalkotos
50 e77e66a9 Nikos Skalkotos
51 4e58b51b Nikos Skalkotos
def warn(msg, new_line=True, colored=True):
52 4e58b51b Nikos Skalkotos
    color = yellow if colored else lambda x: x
53 4e58b51b Nikos Skalkotos
    output("Warning: %s" % msg, new_line, color)
54 e77e66a9 Nikos Skalkotos
55 e77e66a9 Nikos Skalkotos
56 4e58b51b Nikos Skalkotos
def success(msg, new_line=True, colored=True):
57 4e58b51b Nikos Skalkotos
    color = green if colored else lambda x: x
58 4e58b51b Nikos Skalkotos
    output(msg, new_line, color)
59 4e58b51b Nikos Skalkotos
60 e77e66a9 Nikos Skalkotos
61 4a847a98 Nikos Skalkotos
def clear():
62 4a847a98 Nikos Skalkotos
    #clear the page
63 4a847a98 Nikos Skalkotos
    if sys.stderr.isatty():
64 4a847a98 Nikos Skalkotos
        sys.stderr.write('\033[H\033[2J')
65 4a847a98 Nikos Skalkotos
66 4a847a98 Nikos Skalkotos
67 4e58b51b Nikos Skalkotos
class SilentOutput(Output):
68 4e58b51b Nikos Skalkotos
    pass
69 e77e66a9 Nikos Skalkotos
70 4e58b51b Nikos Skalkotos
71 4e58b51b Nikos Skalkotos
class SimpleOutput(Output):
72 4e58b51b Nikos Skalkotos
    def __init__(self, colored=True):
73 4e58b51b Nikos Skalkotos
        self.colored = colored
74 1ea7fc2e Nikos Skalkotos
75 e77e66a9 Nikos Skalkotos
    def error(self, msg, new_line=True):
76 4e58b51b Nikos Skalkotos
        error(msg, new_line, self.colored)
77 e77e66a9 Nikos Skalkotos
78 e77e66a9 Nikos Skalkotos
    def warn(self, msg, new_line=True):
79 4e58b51b Nikos Skalkotos
        warn(msg, new_line, self.colored)
80 e77e66a9 Nikos Skalkotos
81 e77e66a9 Nikos Skalkotos
    def success(self, msg, new_line=True):
82 4e58b51b Nikos Skalkotos
        success(msg, new_line, self.colored)
83 e77e66a9 Nikos Skalkotos
84 e77e66a9 Nikos Skalkotos
    def output(self, msg='', new_line=True):
85 e77e66a9 Nikos Skalkotos
        output(msg, new_line)
86 e77e66a9 Nikos Skalkotos
87 4a847a98 Nikos Skalkotos
    def clear(self):
88 4a847a98 Nikos Skalkotos
        clear()
89 4a847a98 Nikos Skalkotos
90 e77e66a9 Nikos Skalkotos
91 4e58b51b Nikos Skalkotos
class OutputWthProgress(SimpleOutput):
92 1ea7fc2e Nikos Skalkotos
    class _Progress(Bar):
93 e77e66a9 Nikos Skalkotos
        MESSAGE_LENGTH = 30
94 e77e66a9 Nikos Skalkotos
95 e77e66a9 Nikos Skalkotos
        template = {
96 e77e66a9 Nikos Skalkotos
            'default': '%(index)d/%(max)d',
97 e77e66a9 Nikos Skalkotos
            'percent': '%(percent)d%%',
98 e77e66a9 Nikos Skalkotos
            'b': '%(index)d/%(max)d B',
99 e77e66a9 Nikos Skalkotos
            'kb': '%(index)d/%(max)d KB',
100 e77e66a9 Nikos Skalkotos
            'mb': '%(index)d/%(max)d MB'
101 e77e66a9 Nikos Skalkotos
        }
102 e77e66a9 Nikos Skalkotos
103 96171db1 Nikos Skalkotos
        def __init__(self, size, title, bar_type='default'):
104 4e58b51b Nikos Skalkotos
            super(OutputWthProgress._Progress, self).__init__()
105 e77e66a9 Nikos Skalkotos
            self.title = title
106 e77e66a9 Nikos Skalkotos
            self.fill = '#'
107 e77e66a9 Nikos Skalkotos
            self.bar_prefix = ' ['
108 e77e66a9 Nikos Skalkotos
            self.bar_suffix = '] '
109 e77e66a9 Nikos Skalkotos
            self.message = ("%s:" % self.title).ljust(self.MESSAGE_LENGTH)
110 e77e66a9 Nikos Skalkotos
            self.suffix = self.template[bar_type]
111 96171db1 Nikos Skalkotos
            self.max = size
112 96171db1 Nikos Skalkotos
113 96171db1 Nikos Skalkotos
            # print empty progress bar workaround
114 96171db1 Nikos Skalkotos
            self.goto(1)
115 e77e66a9 Nikos Skalkotos
116 e77e66a9 Nikos Skalkotos
        def success(self, result):
117 710adfb2 Nikos Skalkotos
            self.output.output("\r%s...\033[K" % self.title, False)
118 1ea7fc2e Nikos Skalkotos
            self.output.success(result)
119 e77e66a9 Nikos Skalkotos
120 e77e66a9 Nikos Skalkotos
121 e77e66a9 Nikos Skalkotos
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :