summaryrefslogtreecommitdiff
path: root/dotbot/messenger/messenger.py
blob: ee2d97f2b8a23175b1a11503cbbf2ec38bad7a56 (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
63
64
from ..util.singleton import Singleton
from ..util.compat import with_metaclass
from .color import Color
from .level import Level

import sys

class Messenger(with_metaclass(Singleton, object)):
    def __init__(self, level = Level.VERBOSE):
        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):
            sys.stderr.write('%s%s%s\n' % (self._color(level), message, self._reset()))

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

    def verbose(self, message):
        self.log(Level.VERBOSE, 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.VERBOSE:
            return Color.YELLOW
        elif Level.VERBOSE <= 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