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 : |