diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 5141e98..b47b999 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -141,22 +141,26 @@ _encodings = { if _encodings['merge'] is None: _encodings['merge'] = 'ascii' -def _unicode_encode(s, encoding=_encodings['content'], - errors='backslashreplace'): - if sys.hexversion >= 0x3000000: +if sys.hexversion >= 0x3000000: + def _unicode_encode(s, encoding=_encodings['content'], errors='backslashreplace'): if isinstance(s, str): s = s.encode(encoding, errors) - elif isinstance(s, unicode): - s = s.encode(encoding, errors) - return s + return s -def _unicode_decode(s, encoding=_encodings['content'], errors='replace'): - if isinstance(s, bytes): - if sys.hexversion >= 0x3000000: + def _unicode_decode(s, encoding=_encodings['content'], errors='replace'): + if isinstance(s, bytes): s = str(s, encoding=encoding, errors=errors) - else: + return s +else: + def _unicode_encode(s, encoding=_encodings['content'], errors='backslashreplace'): + if isinstance(s, unicode): + s = s.encode(encoding, errors) + return s + + def _unicode_decode(s, encoding=_encodings['content'], errors='replace'): + if isinstance(s, bytes): s = unicode(s, encoding=encoding, errors=errors) - return s + return s class _unicode_func_wrapper(object): """ @@ -189,24 +193,22 @@ class _unicode_func_wrapper(object): rval = self._func(*wrapped_args, **wrapped_kwargs) - if isinstance(rval, (bytes, basestring, list, tuple)): - if isinstance(rval, (bytes, basestring)): - rval = _unicode_decode(rval, - encoding=encoding, errors='replace') - else: - decoded_rval = [] - for x in rval: - try: - x = _unicode_decode(x, encoding=encoding, errors='strict') - except UnicodeDecodeError: - pass - else: - decoded_rval.append(x) - - if isinstance(rval, tuple): - rval = tuple(decoded_rval) + if isinstance(rval, (list, tuple)): + decoded_rval = [] + for x in rval: + try: + x = _unicode_decode(x, encoding=encoding, errors='strict') + except UnicodeDecodeError: + pass else: - rval = decoded_rval + decoded_rval.append(x) + + if isinstance(rval, tuple): + rval = tuple(decoded_rval) + else: + rval = decoded_rval + else: + rval = _unicode_decode(rval, encoding=encoding, errors='replace') return rval