Use _encodings where appropriate and add _encodings['stdio'] for stdout
authorZac Medico <zmedico@gentoo.org>
Fri, 21 Aug 2009 04:03:15 +0000 (04:03 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 21 Aug 2009 04:03:15 +0000 (04:03 -0000)
encoding.

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

pym/_emerge/JobStatusDisplay.py
pym/portage/__init__.py
pym/portage/elog/messages.py
pym/portage/elog/mod_save.py
pym/portage/elog/mod_save_summary.py
pym/portage/elog/mod_syslog.py
pym/portage/output.py
pym/portage/util.py

index 6aa2d99b7083d2162f8dfaf2155904aa2ed73f0f..9218a15acae66b43443f0f496547ab5c8e46813c 100644 (file)
@@ -13,6 +13,7 @@ except ImportError:
 
 import portage
 from portage import os
+from portage import _encodings
 from portage.output import xtermTitle
 
 from _emerge.getloadavg import getloadavg
@@ -70,7 +71,7 @@ class JobStatusDisplay(object):
        def _write(self, s):
                if sys.hexversion < 0x3000000 and isinstance(s, unicode):
                        # avoid potential UnicodeEncodeError
-                       s = portage._unicode_encode(s)
+                       s = s.encode(_encodings['stdio'], errors='backslashreplace')
                self.out.write(s)
                self.out.flush()
 
index 03a0936541aed073e0df9d2f49ed892885f74b11..5fefa505c17a5ab3dd548512dc987fdab2e2fb94 100644 (file)
@@ -125,6 +125,7 @@ _encodings = {
        'fs'                     : 'utf_8',
        'merge'                  : sys.getfilesystemencoding(),
        'repo.content'           : 'utf_8',
+       'stdio'                  : 'utf_8',
 }
 
 # This can happen if python is built with USE=build (stage 1).
index a51f0864e05417b0d9e3aa90a10bb2f06ac9eb39..a563ad271d3c3606961cc976053864a5dbe2c97a 100644 (file)
@@ -12,6 +12,9 @@ portage.proxy.lazyimport.lazyimport(globals(),
 from portage.const import EBUILD_PHASES
 from portage.localization import _
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
+from portage import _unicode_decode
 
 import codecs
 import sys
@@ -41,8 +44,9 @@ def collect_ebuild_messages(path):
                        logentries[msgfunction] = []
                lastmsgtype = None
                msgcontent = []
-               for l in codecs.open(filename, mode='r',
-                       encoding='utf_8', errors='replace'):
+               for l in codecs.open(_unicode_encode(filename,
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='r', encoding=_encodings['repo.content'], errors='replace'):
                        if not l:
                                continue
                        try:
@@ -87,15 +91,16 @@ def _elog_base(level, msg, phase="other", key=None, color=None, out=None):
        if color is None:
                color = "GOOD"
 
-       if not isinstance(msg, unicode):
-               msg = unicode(msg, encoding='utf_8', errors='replace')
+       msg = _unicode_decode(msg,
+               encoding=_encodings['content'], errors='replace')
 
        formatted_msg = colorize(color, " * ") + msg + "\n"
 
        if sys.hexversion < 0x3000000 and \
                out in (sys.stdout, sys.stderr) and isinstance(formatted_msg, unicode):
                # avoid potential UnicodeEncodeError
-               formatted_msg = formatted_msg.encode('utf_8', 'replace')
+               formatted_msg = formatted_msg.encode(
+                       _encodings['stdio'], 'backslashreplace')
 
        out.write(formatted_msg)
 
index 1a11fd927d8e722025fb2fc180278e912fa131cb..0707b00f8860d39422b563488a1b173ab5802565 100644 (file)
@@ -6,6 +6,8 @@
 import codecs
 import time
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 from portage.data import portage_uid, portage_gid
 from portage.util import ensure_dirs
 
@@ -19,8 +21,9 @@ def process(mysettings, key, logentries, fulltext):
        ensure_dirs(elogdir, uid=portage_uid, gid=portage_gid, mode=02770)
 
        elogfilename = elogdir+"/"+path+":"+time.strftime("%Y%m%d-%H%M%S", time.gmtime(time.time()))+".log"
-       elogfile = codecs.open(elogfilename, mode='w',
-               encoding='utf_8', errors='replace')
+       elogfile = codecs.open(_unicode_encode(elogfilename,
+               encoding=_encodings['fs'], errors='strict'),
+               mode='w', encoding=_encodings['content'], errors='backslashreplace')
        elogfile.write(fulltext)
        elogfile.close()
 
index 421fd29ed7c68ea2fa018e30dac556ba445161dd..f35c71c831ee439faec40dde0d766467385410cf 100644 (file)
@@ -6,6 +6,8 @@
 import codecs
 import time
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 from portage.data import portage_uid, portage_gid
 from portage.localization import _
 from portage.util import ensure_dirs, apply_permissions
@@ -19,8 +21,9 @@ def process(mysettings, key, logentries, fulltext):
 
        # TODO: Locking
        elogfilename = elogdir+"/summary.log"
-       elogfile = codecs.open(elogfilename, mode='a',
-               encoding='utf_8', errors='replace')
+       elogfile = codecs.open(_unicode_encode(elogfilename,
+               encoding=_encodings['fs'], errors='strict'),
+               mode='a', encoding=_encodings['content'], errors='backslashreplace')
        apply_permissions(elogfilename, mode=060, mask=0)
        elogfile.write(_(">>> Messages generated by process %(pid)d on %(time)s for package %(pkg)s:\n\n") %
                        {"pid": os.getpid(), "time": time.strftime("%Y-%m-%d %H:%M:%S %Z", time.localtime(time.time())), "pkg": key})
index 0fe2056445531a5e0191a19fa6f88fdd0f605f8c..d7e955f815fbba46bb74466a3cdbd3b262eab7de 100644 (file)
@@ -6,6 +6,7 @@
 import sys
 import syslog
 from portage.const import EBUILD_PHASES
+from portage import _encodings
 
 _pri = {
        "INFO"   : syslog.LOG_INFO, 
@@ -25,6 +26,7 @@ def process(mysettings, key, logentries, fulltext):
                        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')
+                               msgtext = msgtext.encode(_encodings['content'], 
+                                       'backslashreplace')
                        syslog.syslog(_pri[msgtype], msgtext)
        syslog.closelog()
index 6ebbc0bdf13c8a008b9f98190385c29caa425cbb..0e016c5c66b0f03f39aaa3abf314064b66b5363e 100644 (file)
@@ -17,8 +17,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 )
 
 from portage import os
-from portage import _content_encoding
-from portage import _fs_encoding
+from portage import _encodings
 from portage import _unicode_encode
 from portage.const import COLOR_MAP_FILE
 from portage.exception import CommandNotFound, FileNotFound, \
@@ -169,8 +168,8 @@ def _parse_color_map(config_root='/', onerror=None):
        try:
                lineno=0
                for line in codecs.open(_unicode_encode(myfile,
-                       encoding=_fs_encoding, errors='strict'),
-                       mode='r', encoding=_content_encoding, errors='replace'):
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='r', encoding=_encodings['content'], errors='replace'):
                        lineno += 1
 
                        commenter_pos = line.find("#")
@@ -470,7 +469,7 @@ class EOutput(object):
        def _write(self, f, s):
                if sys.hexversion < 0x3000000 and isinstance(s, unicode):
                        # avoid potential UnicodeEncodeError
-                       s = s.encode(_content_encoding, 'replace')
+                       s = s.encode(_encodings['stdio'], 'backslashreplace')
                f.write(s)
                f.flush()
 
index 036191040b68d2ff394164cde581381984afff21..6f11934e854c81b77cb1678f2299ecfc74ef8867 100644 (file)
@@ -63,7 +63,8 @@ def writemsg(mystr,noiselevel=0,fd=None):
        if noiselevel <= noiselimit:
                if sys.hexversion < 0x3000000:
                        # avoid potential UnicodeEncodeError
-                       mystr = _unicode_encode(mystr)
+                       mystr = _unicode_encode(mystr,
+                               encoding=_encodings['stdio'], errors='backslashreplace')
                fd.write(mystr)
                fd.flush()