[Libreoffice-commits] core.git: 2 commits - pyuno/source
Stephan Bergmann
sbergman at redhat.com
Mon Jul 29 02:35:40 PDT 2013
pyuno/source/module/uno.py | 81 ++++++++++++++++++++++++++-------------------
1 file changed, 47 insertions(+), 34 deletions(-)
New commits:
commit d6c63c9a84d989bdb8671c4f42be9acbf37d0309
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Mon Jul 29 11:34:59 2013 +0200
Remove whitespace from line ends
Change-Id: Ie894879eaebda32bc4f99e7ad7f810c569e86a7a
diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py
index 1b25816..2396641 100644
--- a/pyuno/source/module/uno.py
+++ b/pyuno/source/module/uno.py
@@ -40,8 +40,8 @@ _g_delegatee = __builtin__.__dict__["__import__"]
def getComponentContext():
""" returns the UNO component context, that was used to initialize the python runtime.
- """
- return _g_ctx
+ """
+ return _g_ctx
def getConstantByName( constant ):
"Looks up the value of a idl constant by giving its explicit name"
@@ -50,7 +50,7 @@ def getConstantByName( constant ):
def getTypeByName( typeName):
""" returns a uno.Type instance of the type given by typeName. In case the
type does not exist, a com.sun.star.uno.RuntimeException is raised.
- """
+ """
return pyuno.getTypeByName( typeName )
def createUnoStruct( typeName, *args, **kwargs ):
@@ -82,7 +82,7 @@ def isInterface( obj ):
def generateUuid():
"returns a 16 byte sequence containing a newly generated uuid or guid, see rtl/uuid.h "
- return pyuno.generateUuid()
+ return pyuno.generateUuid()
def systemPathToFileUrl( systemPath ):
"returns a file-url for the given system path"
@@ -112,9 +112,9 @@ def setCurrentContext( newContext ):
"""
return pyuno.setCurrentContext( newContext )
-
+
class Enum:
- "Represents a UNO idl enum, use an instance of this class to explicitly pass a boolean to UNO"
+ "Represents a UNO idl enum, use an instance of this class to explicitly pass a boolean to UNO"
#typeName the name of the enum as a string
#value the actual value of this enum as a string
def __init__(self,typeName, value):
@@ -150,7 +150,7 @@ class Type:
return self.typeName.__hash__()
class Bool(object):
- """Represents a UNO boolean, use an instance of this class to explicitly
+ """Represents a UNO boolean, use an instance of this class to explicitly
pass a boolean to UNO.
Note: This class is deprecated. Use python's True and False directly instead
"""
@@ -173,13 +173,13 @@ class Char:
def __repr__(self):
return "<Char instance %s>" % (self.value, )
-
+
def __eq__(self, that):
if isinstance(that, (str, unicode)):
if len(that) > 1:
return False
return self.value == that[0]
- if isinstance(that, Char):
+ if isinstance(that, Char):
return self.value == that.value
return False
@@ -190,12 +190,12 @@ class Char:
# def __repr__(self):
# return "<ByteSequence instance %s>" % str.__repr__(self)
- # for a little bit compatitbility; setting value is not possible as
+ # for a little bit compatitbility; setting value is not possible as
# strings are immutable
# def _get_value(self):
# return self
#
-# value = property(_get_value)
+# value = property(_get_value)
class ByteSequence:
def __init__(self, value):
@@ -254,7 +254,7 @@ class Any:
def invoke( object, methodname, argTuple ):
"use this function to pass exactly typed anys to the callee (using uno.Any)"
return pyuno.invoke( object, methodname, argTuple )
-
+
#---------------------------------------------------------------------------------------
# don't use any functions beyond this point, private section, likely to change
#---------------------------------------------------------------------------------------
@@ -286,7 +286,7 @@ def _uno_import( name, *optargs, **kwargs ):
if x not in d:
failed = False
if x.startswith( "typeOf" ):
- try:
+ try:
d[x] = pyuno.getTypeByName( name + "." + x[6:len(x)] )
except RuntimeException:
failed = True
@@ -295,7 +295,7 @@ def _uno_import( name, *optargs, **kwargs ):
# check for structs, exceptions or interfaces
d[x] = pyuno.getClass( name + "." + x )
except RuntimeException:
- # check for enums
+ # check for enums
try:
d[x] = Enum( name , x )
except RuntimeException:
@@ -309,7 +309,7 @@ def _uno_import( name, *optargs, **kwargs ):
# We have an import failure, but cannot distinguish between
# uno and non-uno errors as uno lookups are attempted for all
# "from xxx import yyy" imports following a python failure.
- #
+ #
# The traceback from the original python exception is kept to
# pinpoint the actual failing location, but in Python 3 the
# original message is most likely unhelpful for uno failures,
@@ -321,7 +321,7 @@ def _uno_import( name, *optargs, **kwargs ):
# Our exception is raised outside of the nested exception
# handlers above, to avoid Python 3 nested exception
# information for the RuntimeExceptions during lookups.
- #
+ #
# Finally, a private attribute is used to prevent further
# processing if this failure was in a nested import. That
# keeps the exception relevant to the primary failure point,
@@ -342,7 +342,7 @@ def _impl_extractName(name):
if name[i] == ".":
name = name[i+1:len(name)]
break
- return name
+ return name
# private, referenced from the pyuno shared library
def _uno_struct__init__(self,*args, **kwargs):
@@ -355,7 +355,7 @@ def _uno_struct__init__(self,*args, **kwargs):
RuntimeException = pyuno.getClass( "com.sun.star.uno.RuntimeException" )
raise RuntimeException("_uno_struct__init__: unused keyword argument '" + kw + "'", None)
self.__dict__["value"] = struct
-
+
# private, referenced from the pyuno shared library
def _uno_struct__getattr__(self,name):
return __builtin__.getattr(self.__dict__["value"],name)
commit 948b6ea02ea9de7fb4e1e2baf95ecae3ba1cd54e
Author: David Bolen <db3l.net at gmail.com>
Date: Fri Jul 26 14:59:48 2013 -0400
fdo#66025: Improve accuracy of ImportError traceback and message
The ImportError raised on an import failure with the uno module loaded
now includes a complete traceback and the original Python exception
message text, combined with the most relevant (nearest to failure if
imports are nested) uno lookup that also failed.
Change-Id: Id968d84d7f09d555a81017a99369beb503d61439
Signed-off-by: Stephan Bergmann <sbergman at redhat.com>
diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py
index 15af94a..1b25816 100644
--- a/pyuno/source/module/uno.py
+++ b/pyuno/source/module/uno.py
@@ -263,11 +263,14 @@ def _uno_import( name, *optargs, **kwargs ):
try:
# print "optargs = " + repr(optargs)
return _g_delegatee( name, *optargs, **kwargs )
- except ImportError:
+ except ImportError as e:
# process optargs
globals, locals, fromlist = list(optargs)[:3] + [kwargs.get('globals',{}), kwargs.get('locals',{}), kwargs.get('fromlist',[])][len(optargs):]
- if not fromlist:
+ # from import form only, but skip if an uno lookup has already failed
+ if not fromlist or hasattr(e, '_uno_import_failed'):
raise
+ # hang onto exception for possible use on subsequent uno lookup failure
+ py_import_exc = e
modnames = name.split( "." )
mod = None
d = sys.modules
@@ -303,22 +306,32 @@ def _uno_import( name, *optargs, **kwargs ):
failed = True
if failed:
- # This can be a bad uno reference, or it can just result from any
- # python import failure (in a "from xxx import yyy" statement).
- # Synthesize a general purpose exception, reusing the original
- # traceback to provide information for either case. We don't use
- # the original python exception as uno failures will typically
- # just reflect a missing top level module (such as "com").
-
- # Note that we raise this outside of the nested exception handlers
- # above, or otherwise Python 3 will generate additional tracebacks
- # for each of the nested exceptions.
-
- e = ImportError("No module named '%s' or '%s.%s' is unknown" %
- (name, name, x))
- e.__traceback__ = sys.exc_info()[2]
-
- raise e
+ # We have an import failure, but cannot distinguish between
+ # uno and non-uno errors as uno lookups are attempted for all
+ # "from xxx import yyy" imports following a python failure.
+ #
+ # The traceback from the original python exception is kept to
+ # pinpoint the actual failing location, but in Python 3 the
+ # original message is most likely unhelpful for uno failures,
+ # as it will most commonly be a missing top level module,
+ # like 'com'. Our exception appends the uno lookup failure.
+ # This is more ambiguous, but it plus the traceback should be
+ # sufficient to identify a root cause for python or uno issues.
+ #
+ # Our exception is raised outside of the nested exception
+ # handlers above, to avoid Python 3 nested exception
+ # information for the RuntimeExceptions during lookups.
+ #
+ # Finally, a private attribute is used to prevent further
+ # processing if this failure was in a nested import. That
+ # keeps the exception relevant to the primary failure point,
+ # preventing us from re-processing our own import errors.
+
+ uno_import_exc = ImportError(
+ "%s (or '%s.%s' is unknown)" % (py_import_exc, name, x)
+ ).with_traceback(py_import_exc.__traceback__)
+ uno_import_exc._uno_import_failed = True
+ raise uno_import_exc
return mod
More information about the Libreoffice-commits
mailing list