Statistics
| Branch: | Tag: | Revision:

root / image_creator / output / composite.py @ 12c97404

History | View | Annotate | Download (4.3 kB)

1
# -*- coding: utf-8 -*-
2
#
3
# Copyright 2012 GRNET S.A. All rights reserved.
4
#
5
# Redistribution and use in source and binary forms, with or
6
# without modification, are permitted provided that the following
7
# conditions are met:
8
#
9
#   1. Redistributions of source code must retain the above
10
#      copyright notice, this list of conditions and the following
11
#      disclaimer.
12
#
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.
17
#
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.
30
#
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.
35

    
36
"""This module implements the CompositeOutput output class"""
37

    
38
from image_creator.output import Output
39

    
40

    
41
class CompositeOutput(Output):
42
    """This class can be used to composite different outputs into a single one
43

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
47
    this one.
48
    """
49

    
50
    def __init__(self, outputs=[]):
51
        """Add initial output instances"""
52
        self._outputs = outputs
53

    
54
    def add(self, output):
55
        """Add another output instance"""
56
        self._outputs.append(output)
57

    
58
    def remove(self, output):
59
        """Remove an output instance"""
60
        self._outputs.remove(output)
61

    
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)
66

    
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)
71

    
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)
76

    
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)
81

    
82
    def cleanup(self):
83
        """Call the cleanup method of each of the output instances"""
84
        for out in self._outputs:
85
            out.cleanup()
86

    
87
    def clear(self):
88
        """Call the clear method of each of the output instances"""
89
        for out in self._outputs:
90
            out.clear()
91

    
92
    class _Progress(object):
93
        """Class used to composite different Progress objects"""
94

    
95
        def __init__(self, size, title, bar_type='default'):
96
            """Create a progress on each of the added output instances"""
97
            self._progresses = []
98
            for out in self.output._outputs:
99
                self._progresses.append(out.Progress(size, title, bar_type))
100

    
101
        def goto(self, dest):
102
            """Call the goto method of each of the progress instances"""
103
            for progress in self._progresses:
104
                progress.goto(dest)
105

    
106
        def next(self):
107
            """Call the next method of each of the progress instances"""
108
            for progress in self._progresses:
109
                progress.next()
110

    
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)
115

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