1 # -*- coding: utf-8 -*-
3 # Copyright 2012 GRNET S.A. All rights reserved.
5 # Redistribution and use in source and binary forms, with or
6 # without modification, are permitted provided that the following
9 # 1. Redistributions of source code must retain the above
10 # copyright notice, this list of conditions and the following
13 # 2. Redistributions in binary form must reproduce the above
14 # copyright notice, this list of conditions and the following
15 # disclaimer in the documentation and/or other materials
16 # provided with the distribution.
18 # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 # POSSIBILITY OF SUCH DAMAGE.
31 # The views and conclusions contained in the software and
32 # documentation are those of the authors and should not be
33 # interpreted as representing official policies, either expressed
34 # or implied, of GRNET S.A.
36 """This module implements the CompositeOutput output class"""
38 from image_creator.output import Output
41 class CompositeOutput(Output):
42 """This class can be used to composite different outputs into a single one
44 You may create an instance of this class and then add other output
45 instances to it. Executing a method on this instance will cause the
46 execution of the same method in each output instance that has been added to
50 def __init__(self, outputs=[]):
51 """Add initial output instances"""
52 self._outputs = outputs
54 def add(self, output):
55 """Add another output instance"""
56 self._outputs.append(output)
58 def remove(self, output):
59 """Remove an output instance"""
60 self._outputs.remove(output)
62 def error(self, msg, new_line=True):
63 """Call the error method of each of the output instances"""
64 for out in self._outputs:
65 out.error(msg, new_line)
67 def warn(self, msg, new_line=True):
68 """Call the warn method of each of the output instances"""
69 for out in self._outputs:
70 out.warn(msg, new_line)
72 def success(self, msg, new_line=True):
73 """Call the success method of each of the output instances"""
74 for out in self._outputs:
75 out.success(msg, new_line)
77 def output(self, msg='', new_line=True):
78 """Call the output method of each of the output instances"""
79 for out in self._outputs:
80 out.output(msg, new_line)
83 """Call the cleanup method of each of the output instances"""
84 for out in self._outputs:
88 """Call the clear method of each of the output instances"""
89 for out in self._outputs:
92 class _Progress(object):
93 """Class used to composite different Progress objects"""
95 def __init__(self, size, title, bar_type='default'):
96 """Create a progress on each of the added output instances"""
98 for out in self.output._outputs:
99 self._progresses.append(out.Progress(size, title, bar_type))
101 def goto(self, dest):
102 """Call the goto method of each of the progress instances"""
103 for progress in self._progresses:
107 """Call the next method of each of the progress instances"""
108 for progress in self._progresses:
111 def success(self, result):
112 """Call the success method of each of the progress instances"""
113 for progress in self._progresses:
114 progress.success(result)
116 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :