Encode unicode messages as bytes in order to avoid TypeError from
authorZac Medico <zmedico@gentoo.org>
Sun, 9 Aug 2009 22:29:55 +0000 (22:29 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 9 Aug 2009 22:29:55 +0000 (22:29 -0000)
syslog.syslog() with python-2.x.

svn path=/main/trunk/; revision=13962

pym/portage/elog/mod_syslog.py

index bb66b2b74ba6f0b0e27c1f87084b893a73d259dd..0fe2056445531a5e0191a19fa6f88fdd0f605f8c 100644 (file)
@@ -3,20 +3,28 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
+import sys
 import syslog
 from portage.const import EBUILD_PHASES
 
+_pri = {
+       "INFO"   : syslog.LOG_INFO, 
+       "WARN"   : syslog.LOG_WARNING, 
+       "ERROR"  : syslog.LOG_ERR, 
+       "LOG"    : syslog.LOG_NOTICE,
+       "QA"     : syslog.LOG_WARNING
+}
+
 def process(mysettings, key, logentries, fulltext):
        syslog.openlog("portage", syslog.LOG_ERR | syslog.LOG_WARNING | syslog.LOG_INFO | syslog.LOG_NOTICE, syslog.LOG_LOCAL5)
        for phase in EBUILD_PHASES:
                if not phase in logentries:
                        continue
                for msgtype,msgcontent in logentries[phase]:
-                       pri = {"INFO": syslog.LOG_INFO, 
-                               "WARN": syslog.LOG_WARNING, 
-                               "ERROR": syslog.LOG_ERR, 
-                               "LOG": syslog.LOG_NOTICE,
-                               "QA": syslog.LOG_WARNING}
                        msgtext = "".join(msgcontent)
-                       syslog.syslog(pri[msgtype], "%s: %s: %s" % (key, phase, msgtext))
+                       msgtext = "%s: %s: %s" % (key, phase, msgtext)
+                       if sys.hexversion < 0x3000000 and isinstance(msgtext, unicode):
+                               # Avoid TypeError from syslog.syslog()
+                               msgtext = msgtext.encode('utf_8', 'replace')
+                       syslog.syslog(_pri[msgtype], msgtext)
        syslog.closelog()