Explorar o código

Moved terminal color stuff to celery.utils.term

Ask Solem %!s(int64=14) %!d(string=hai) anos
pai
achega
346f82beb6
Modificáronse 2 ficheiros con 54 adicións e 10 borrados
  1. 7 10
      celery/log.py
  2. 47 0
      celery/utils/term.py

+ 7 - 10
celery/log.py

@@ -12,6 +12,7 @@ from multiprocessing import util as mputil
 from celery import conf
 from celery import signals
 from celery.utils import noop
+from celery.utils import term
 from celery.utils.compat import LoggerAdapter
 from celery.utils.patch import ensure_process_aware_logger
 
@@ -20,14 +21,10 @@ from celery.utils.patch import ensure_process_aware_logger
 # will do nothing.
 _setup = False
 
-BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
-RESET_SEQ = "\033[0m"
-COLOR_SEQ = "\033[1;%dm"
-BOLD_SEQ = "\033[1m"
-COLORS = {"DEBUG": BLUE,
-          "WARNING": YELLOW,
-          "ERROR": RED,
-          "CRITICAL": MAGENTA}
+COLORS = {"DEBUG": term.blue,
+          "WARNING": term.yellow,
+          "ERROR": term.red,
+          "CRITICAL": term.magenta}
 
 
 class ColorFormatter(logging.Formatter):
@@ -39,8 +36,8 @@ class ColorFormatter(logging.Formatter):
     def format(self, record):
         levelname = record.levelname
         if self.use_color and levelname in COLORS:
-            record.msg = COLOR_SEQ % (
-                    30 + COLORS[levelname]) + record.msg + RESET_SEQ
+            record.msg = term.colored(COLORS[levelname](record.msg))
+
         # Very ugly, but have to make sure processName is supported
         # by foreign logger instances.
         # (processName is always supported by Python 2.7)

+ 47 - 0
celery/utils/term.py

@@ -0,0 +1,47 @@
+
+"""
+
+term utils.
+
+>>> colored(red("the quick "),
+...         blue("brown ", bold("fox ")),
+...         magenta(underline("jumps over")),
+...         yellow("the lazy")
+...         green("dog"))
+
+"""
+from operator import add
+
+
+BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
+OP_SEQ = "\033[%dm"
+RESET_SEQ = "\033[0m"
+COLOR_SEQ = "\033[1;%dm"
+
+fold = lambda a: reduce(add, a)
+
+reset = lambda: RESET_SEQ
+colored = lambda *s: fold(s) + RESET_SEQ
+fg = lambda s: COLOR_SEQ % s
+black = lambda *s: fg(30 + BLACK) + fold(s)
+red = lambda *s: fg(30 + RED) + fold(s)
+green = lambda *s: fg(30 + GREEN) + fold(s)
+yellow = lambda *s: fg(30 + YELLOW) + fold(s)
+blue = lambda *s: fg(30 + BLUE) + fold(s)
+magenta = lambda *s: fg(30 + MAGENTA) + fold(s)
+cyan = lambda *s: fg(30 + CYAN) + fold(s)
+white = lambda *s: fg(30 + WHITE) + fold(s)
+bold = lambda *s: OP_SEQ % 1 + fold(s)
+underline = lambda *s: OP_SEQ % 4 + fold(s)
+blink = lambda *s: OP_SEQ % 5 + fold(s)
+reverse = lambda *s: OP_SEQ % 7 + fold(s)
+bright = lambda *s: OP_SEQ % 8 + fold(s)
+ired = lambda *s: fg(40 + RED) + fold(s)
+igreen = lambda *s: fg(40 + GREEN) + fold(s)
+iyellow = lambda *s: fg(40 + YELLOW) + fold(s)
+iblue = lambda *s: fg(40 + BLUE) + fold(s)
+imagenta = lambda *s: fg(40 + MAGENTA) + fold(s)
+icyan = lambda *s: fg(40 + CYAN) + fold(s)
+iwhite = lambda *s: fg(40 + WHITE) + fold(s)
+
+