Selaa lähdekoodia

Fixes unicode output in redirected stdouts. Closes #522

Ask Solem 13 vuotta sitten
vanhempi
commit
75f826a126
2 muutettua tiedostoa jossa 9 lisäystä ja 6 poistoa
  1. 4 4
      celery/log.py
  2. 5 2
      celery/utils/term.py

+ 4 - 4
celery/log.py

@@ -46,7 +46,7 @@ class ColorFormatter(logging.Formatter):
 
         if self.use_color and color:
             try:
-                record.msg = str_t(color(safe_str(record.msg)))
+                record.msg = safe_str(str_t(color(record.msg)))
             except Exception, exc:
                 record.msg = "<Unrepresentable %r: %r>" % (
                         type(record.msg), exc)
@@ -205,9 +205,9 @@ class Logging(object):
         """
         proxy = LoggingProxy(logger, loglevel)
         if stdout:
-            sys.stdout = sys.__stdout__ = proxy
+            sys.stdout = proxy
         if stderr:
-            sys.stderr = sys.__stderr__ = proxy
+            sys.stderr = proxy
         return proxy
 
     def _setup_logger(self, logger, logfile, format, colorize,
@@ -287,7 +287,7 @@ class LoggingProxy(object):
         if data and not self.closed:
             self._thread.recurse_protection = True
             try:
-                self.logger.log(self.loglevel, data)
+                self.logger.log(self.loglevel, safe_str(data))
             finally:
                 self._thread.recurse_protection = False
 

+ 5 - 2
celery/utils/term.py

@@ -81,11 +81,14 @@ class colored(object):
             prefix = self.op
         return prefix + safe_str(reduce(self._add, self.s))
 
-    def __str__(self):
+    def __unicode__(self):
         suffix = ""
         if self.enabled:
             suffix = RESET_SEQ
-        return safe_str(self.embed()) + suffix
+        return self.embed() + suffix
+
+    def __str__(self):
+        return safe_str(self.__unicode__())
 
     def node(self, s, op):
         return self.__class__(enabled=self.enabled, op=op, *s)