shutil = _unicode_module_wrapper(_shutil, encoding=_encodings['fs'])
# Imports below this point rely on the above unicode wrapper definitions.
-_selinux = None
-selinux = None
-_selinux_merge = None
try:
import portage._selinux
- # Make sure the _selinux attribute is correctly reinitialized after
- # reload(portage) is called. See bug #298310.
- _selinux = sys.modules['portage._selinux']
selinux = _unicode_module_wrapper(_selinux,
encoding=_encodings['fs'])
_selinux_merge = _unicode_module_wrapper(_selinux,
encoding=_encodings['merge'])
-except OSError as e:
- sys.stderr.write("!!! SELinux not loaded: %s\n" % str(e))
+except (ImportError, OSError) as e:
+ if isinstance(e, OSError):
+ sys.stderr.write("!!! SELinux not loaded: %s\n" % str(e))
del e
-except ImportError:
- pass
+ _selinux = None
+ selinux = None
+ _selinux_merge = None
from portage.manifest import Manifest
# $Id$
import sys
+from portage import _unicode_encode
from portage.localization import _
if sys.hexversion >= 0x3000000:
"""General superclass for portage exceptions"""
def __init__(self,value):
self.value = value[:]
+ if sys.hexversion < 0x3000000 and isinstance(self.value, unicode):
+ # Workaround for string formatting operator and unicode value
+ # attribute triggering empty output in formatted string.
+ self.value = _unicode_encode(self.value)
def __str__(self):
if isinstance(self.value, basestring):
return self.value
def __del__(self):
"""If the user does not explicitely call close(), it is
assumed that an error has occurred, so we abort()."""
- f = object.__getattribute__(self, '_file')
- if not f.closed:
- self.abort()
+ try:
+ f = object.__getattribute__(self, '_file')
+ except AttributeError:
+ pass
+ else:
+ if not f.closed:
+ self.abort()
# ensure destructor from the base class is called
base_destructor = getattr(ObjectProxy, '__del__', None)
if base_destructor is not None: