Statistics
| Branch: | Tag: | Revision:

root / image_creator / output / composite.py @ b87b7a14

History | View | Annotate | Download (3.3 kB)

1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from image_creator.output import Output
35

    
36

    
37
class CompositeOutput(Output):
38
    """This class can be used to composite different outputs into a single one
39

40
    You may create an instance of this class and then add other output
41
    instances to it. Executing a method on this instance will cause the
42
    execution of the same method in each output instance that has been added to
43
    this one.
44
    """
45

    
46
    def __init__(self, outputs=[]):
47
        self._outputs = outputs
48

    
49
    def add(self, output):
50
        self._outputs.append(output)
51

    
52
    def remove(self, output):
53
        self._outputs.remove(output)
54

    
55
    def error(self, msg, new_line=True):
56
        for out in self._outputs:
57
            out.error(msg, new_line)
58

    
59
    def warn(self, msg, new_line=True):
60
        for out in self._outputs:
61
            out.warn(msg, new_line)
62

    
63
    def success(self, msg, new_line=True):
64
        for out in self._outputs:
65
            out.success(msg, new_line)
66

    
67
    def output(self, msg='', new_line=True):
68
        for out in self._outputs:
69
            out.output(msg, new_line)
70

    
71
    def cleanup(self):
72
        for out in self._outputs:
73
            out.cleanup()
74

    
75
    def clear(self):
76
        for out in self._outputs:
77
            out.clear()
78

    
79
    class _Progress(object):
80

    
81
        def __init__(self, size, title, bar_type='default'):
82
            self._progresses = []
83
            for out in self.output._outputs:
84
                self._progresses.append(out.Progress(size, title, bar_type))
85

    
86
        def goto(self, dest):
87
            for progress in self._progresses:
88
                progress.goto(dest)
89

    
90
        def next(self):
91
            for progress in self._progresses:
92
                progress.next()
93

    
94
        def success(self, result):
95
            for progress in self._progresses:
96
                progress.success(result)
97

    
98
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :