root / image_creator / output / cli.py @ aeb95900
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 : |