summaryrefslogtreecommitdiff
path: root/dotbot/messenger/messenger.py
diff options
context:
space:
mode:
authorAnish Athalye <aathalye@me.com>2014-03-19 23:07:30 -0400
committerAnish Athalye <aathalye@me.com>2014-03-20 18:57:56 -0400
commit60a560e97699a1d9a4320b8e787a50b1a9a7734d (patch)
tree573ce63c2a49a278af49c0cc6542bfe3b89cf572 /dotbot/messenger/messenger.py
Initial commit
Diffstat (limited to 'dotbot/messenger/messenger.py')
-rw-r--r--dotbot/messenger/messenger.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/dotbot/messenger/messenger.py b/dotbot/messenger/messenger.py
new file mode 100644
index 0000000..04081e7
--- /dev/null
+++ b/dotbot/messenger/messenger.py
@@ -0,0 +1,60 @@
+import sys
+from ..util.singleton import Singleton
+from .color import Color
+from .level import Level
+
+class Messenger(object):
+ __metaclass__ = Singleton
+
+ def __init__(self, level = Level.LOWINFO):
+ self.set_level(level)
+
+ def set_level(self, level):
+ self._level = level
+
+ 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 sys.stdout.isatty():
+ 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 sys.stdout.isatty():
+ return ''
+ else:
+ return Color.RESET