Statistics
| Branch: | Tag: | Revision:

root / image_creator / output.py @ 710adfb2

History | View | Annotate | Download (5 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 e77e66a9 Nikos Skalkotos
import sys
35 e77e66a9 Nikos Skalkotos
from progress.bar import Bar
36 e77e66a9 Nikos Skalkotos
from colors import red, green, yellow
37 e77e66a9 Nikos Skalkotos
38 e77e66a9 Nikos Skalkotos
39 46544c32 Nikos Skalkotos
def error(msg, new_line=True, color=True):
40 710adfb2 Nikos Skalkotos
    nl = "\n" if new_line else ' '
41 46544c32 Nikos Skalkotos
    if color:
42 46544c32 Nikos Skalkotos
        sys.stderr.write(red('Error: %s' % msg) + nl)
43 46544c32 Nikos Skalkotos
    else:
44 46544c32 Nikos Skalkotos
        sys.stderr.write('Error: %s' % msg + nl)
45 e77e66a9 Nikos Skalkotos
46 e77e66a9 Nikos Skalkotos
47 46544c32 Nikos Skalkotos
def warn(msg, new_line=True, color=True):
48 710adfb2 Nikos Skalkotos
    nl = "\n" if new_line else ' '
49 46544c32 Nikos Skalkotos
    if color:
50 46544c32 Nikos Skalkotos
        sys.stderr.write(yellow("Warning: %s" % msg) + nl)
51 46544c32 Nikos Skalkotos
    else:
52 46544c32 Nikos Skalkotos
        sys.stderr.write("Warning: %s" % msg + nl)
53 e77e66a9 Nikos Skalkotos
54 e77e66a9 Nikos Skalkotos
55 46544c32 Nikos Skalkotos
def success(msg, new_line=True, color=True):
56 710adfb2 Nikos Skalkotos
    nl = "\n" if new_line else ' '
57 46544c32 Nikos Skalkotos
    if color:
58 46544c32 Nikos Skalkotos
        sys.stdout.write(green(msg) + nl)
59 46544c32 Nikos Skalkotos
    else:
60 46544c32 Nikos Skalkotos
        sys.stdout.write(msg + nl)
61 e77e66a9 Nikos Skalkotos
    if not nl:
62 e77e66a9 Nikos Skalkotos
        sys.stdout.flush()
63 e77e66a9 Nikos Skalkotos
64 e77e66a9 Nikos Skalkotos
65 e77e66a9 Nikos Skalkotos
def output(msg='', new_line=True):
66 710adfb2 Nikos Skalkotos
    nl = "\n" if new_line else ' '
67 e77e66a9 Nikos Skalkotos
    sys.stdout.write(msg + nl)
68 e77e66a9 Nikos Skalkotos
    if not nl:
69 e77e66a9 Nikos Skalkotos
        sys.stdout.flush()
70 e77e66a9 Nikos Skalkotos
71 e77e66a9 Nikos Skalkotos
72 e77e66a9 Nikos Skalkotos
class Output(object):
73 1ea7fc2e Nikos Skalkotos
74 e77e66a9 Nikos Skalkotos
    def error(self, msg, new_line=True):
75 46544c32 Nikos Skalkotos
        error(msg, new_line, False)
76 e77e66a9 Nikos Skalkotos
77 e77e66a9 Nikos Skalkotos
    def warn(self, msg, new_line=True):
78 46544c32 Nikos Skalkotos
        warn(msg, new_line, False)
79 e77e66a9 Nikos Skalkotos
80 e77e66a9 Nikos Skalkotos
    def success(self, msg, new_line=True):
81 46544c32 Nikos Skalkotos
        success(msg, new_line, False)
82 e77e66a9 Nikos Skalkotos
83 e77e66a9 Nikos Skalkotos
    def output(self, msg='', new_line=True):
84 e77e66a9 Nikos Skalkotos
        output(msg, new_line)
85 e77e66a9 Nikos Skalkotos
86 1ea7fc2e Nikos Skalkotos
    def _get_progress(self):
87 1ea7fc2e Nikos Skalkotos
        progress = self._Progress
88 1ea7fc2e Nikos Skalkotos
        progress.output = self
89 1ea7fc2e Nikos Skalkotos
        return progress
90 1ea7fc2e Nikos Skalkotos
91 1ea7fc2e Nikos Skalkotos
    Progress = property(_get_progress)
92 1ea7fc2e Nikos Skalkotos
93 1ea7fc2e Nikos Skalkotos
    class _Progress(object):
94 96171db1 Nikos Skalkotos
        def __init__(self, size, title, bar_type='default'):
95 1ea7fc2e Nikos Skalkotos
            self.output.output("%s..." % title, False)
96 96171db1 Nikos Skalkotos
            self.size = size
97 e77e66a9 Nikos Skalkotos
98 e77e66a9 Nikos Skalkotos
        def goto(self, dest):
99 e77e66a9 Nikos Skalkotos
            pass
100 e77e66a9 Nikos Skalkotos
101 e77e66a9 Nikos Skalkotos
        def next(self):
102 e77e66a9 Nikos Skalkotos
            pass
103 e77e66a9 Nikos Skalkotos
104 e77e66a9 Nikos Skalkotos
        def success(self, result):
105 1ea7fc2e Nikos Skalkotos
            self.output.success(result)
106 e77e66a9 Nikos Skalkotos
107 08f26796 Nikos Skalkotos
    def progress_generator(self, message):
108 e77e66a9 Nikos Skalkotos
        def generator(n):
109 08f26796 Nikos Skalkotos
            progressbar = self.Progress(message, 'default')
110 08f26796 Nikos Skalkotos
            progressbar.max = n
111 e77e66a9 Nikos Skalkotos
112 e77e66a9 Nikos Skalkotos
            for _ in range(n):
113 e77e66a9 Nikos Skalkotos
                yield
114 e77e66a9 Nikos Skalkotos
                progressbar.next()
115 e77e66a9 Nikos Skalkotos
116 e77e66a9 Nikos Skalkotos
            progressbar.success('done')
117 e77e66a9 Nikos Skalkotos
            yield
118 e77e66a9 Nikos Skalkotos
        return generator
119 e77e66a9 Nikos Skalkotos
120 e77e66a9 Nikos Skalkotos
121 46544c32 Nikos Skalkotos
class Output_wth_colors(Output):
122 46544c32 Nikos Skalkotos
    def error(self, msg, new_line=True):
123 46544c32 Nikos Skalkotos
        error(msg, new_line)
124 46544c32 Nikos Skalkotos
125 46544c32 Nikos Skalkotos
    def warn(self, msg, new_line=True):
126 46544c32 Nikos Skalkotos
        warn(msg, new_line)
127 46544c32 Nikos Skalkotos
128 46544c32 Nikos Skalkotos
    def success(self, msg, new_line=True):
129 46544c32 Nikos Skalkotos
        success(msg, new_line)
130 46544c32 Nikos Skalkotos
131 46544c32 Nikos Skalkotos
132 46544c32 Nikos Skalkotos
class Output_wth_progress(Output_wth_colors):
133 1ea7fc2e Nikos Skalkotos
    class _Progress(Bar):
134 e77e66a9 Nikos Skalkotos
        MESSAGE_LENGTH = 30
135 e77e66a9 Nikos Skalkotos
136 e77e66a9 Nikos Skalkotos
        template = {
137 e77e66a9 Nikos Skalkotos
            'default': '%(index)d/%(max)d',
138 e77e66a9 Nikos Skalkotos
            'percent': '%(percent)d%%',
139 e77e66a9 Nikos Skalkotos
            'b': '%(index)d/%(max)d B',
140 e77e66a9 Nikos Skalkotos
            'kb': '%(index)d/%(max)d KB',
141 e77e66a9 Nikos Skalkotos
            'mb': '%(index)d/%(max)d MB'
142 e77e66a9 Nikos Skalkotos
        }
143 e77e66a9 Nikos Skalkotos
144 96171db1 Nikos Skalkotos
        def __init__(self, size, title, bar_type='default'):
145 1ea7fc2e Nikos Skalkotos
            super(Output_wth_progress._Progress, self).__init__()
146 e77e66a9 Nikos Skalkotos
            self.title = title
147 e77e66a9 Nikos Skalkotos
            self.fill = '#'
148 e77e66a9 Nikos Skalkotos
            self.bar_prefix = ' ['
149 e77e66a9 Nikos Skalkotos
            self.bar_suffix = '] '
150 e77e66a9 Nikos Skalkotos
            self.message = ("%s:" % self.title).ljust(self.MESSAGE_LENGTH)
151 e77e66a9 Nikos Skalkotos
            self.suffix = self.template[bar_type]
152 96171db1 Nikos Skalkotos
            self.max = size
153 96171db1 Nikos Skalkotos
154 96171db1 Nikos Skalkotos
            # print empty progress bar workaround
155 96171db1 Nikos Skalkotos
            self.goto(1)
156 e77e66a9 Nikos Skalkotos
157 e77e66a9 Nikos Skalkotos
        def success(self, result):
158 710adfb2 Nikos Skalkotos
            self.output.output("\r%s...\033[K" % self.title, False)
159 1ea7fc2e Nikos Skalkotos
            self.output.success(result)
160 e77e66a9 Nikos Skalkotos
161 e77e66a9 Nikos Skalkotos
162 e77e66a9 Nikos Skalkotos
class Silent(Output):
163 e77e66a9 Nikos Skalkotos
    def warn(self, msg, new_line=True):
164 e77e66a9 Nikos Skalkotos
        pass
165 e77e66a9 Nikos Skalkotos
166 e77e66a9 Nikos Skalkotos
    def success(self, msg, new_line=True):
167 e77e66a9 Nikos Skalkotos
        pass
168 e77e66a9 Nikos Skalkotos
169 e77e66a9 Nikos Skalkotos
    def output(self, msg='', new_line=True):
170 e77e66a9 Nikos Skalkotos
        pass
171 e77e66a9 Nikos Skalkotos
172 e77e66a9 Nikos Skalkotos
173 46544c32 Nikos Skalkotos
class Silent_wth_colors(Silent):
174 46544c32 Nikos Skalkotos
    def error(self, msg, new_line=True):
175 46544c32 Nikos Skalkotos
        error(msg, new_line)
176 46544c32 Nikos Skalkotos
177 e77e66a9 Nikos Skalkotos
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :