summaryrefslogtreecommitdiff
path: root/dotbot/messenger/messenger.py
blob: 8fc650ccdaf01d2f0e2cfe82f9b1380027618527 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from ..util.singleton import Singleton
from ..util.compat import with_metaclass
from .color import Color
from .level import Level

class Messenger(with_metaclass(Singleton, object)):
    def __init__(self, level = Level.LOWINFO):
        self.set_level(level)
        self.use_color(True)

    def set_level(self, level):
        self._level = level

    def use_color(self, yesno):
        self._use_color = yesno

    def log(self, level, message):
        if (level >= self._level):
            print('%s%s%s' % (self._color(level), message, self._reset()))

    def debug(self, message):
        self.log(Level.DEBUG, message)

    def lowinfo(self, message):
        self.log(Level.LOWINFO, message)

    def info(self, message):
        self.log(Level.INFO, message)

    def warning(self, message):
        self.log(Level.WARNING, message)

    def error(self, message):
        self.log(Level.ERROR, message)

    def _color(self, level):
        '''
        Get a color (terminal escape sequence) according to a level.
        '''
        if not self._use_color:
            return ''
        elif level < Level.DEBUG:
            return ''
        elif Level.DEBUG <= level < Level.LOWINFO:
            return Color.YELLOW
        elif Level.LOWINFO <= level < Level.INFO:
            return Color.BLUE
        elif Level.INFO <= level < Level.WARNING:
            return Color.GREEN
        elif Level.WARNING <= level < Level.ERROR:
            return Color.MAGENTA
        elif Level.ERROR <= level:
            return Color.RED

    def _reset(self):
        '''
        Get a reset color (terminal escape sequence).
        '''
        if not self._use_color:
            return ''
        else:
            return Color.RESET