summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyuno/source/module/uno.py31
1 files changed, 30 insertions, 1 deletions
diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py
index a8873aefe213..4c78595cd8d0 100644
--- a/pyuno/source/module/uno.py
+++ b/pyuno/source/module/uno.py
@@ -303,7 +303,11 @@ def _uno_import( name, *optargs, **kwargs ):
try:
d[x] = getConstantByName( name + "." + x )
except RuntimeException:
- failed = True
+ # check for constant group
+ try:
+ d[x] = _impl_getConstantGroupByName( name, x )
+ except ValueError:
+ failed = True
if failed:
# We have an import failure, but cannot distinguish between
@@ -336,6 +340,31 @@ def _uno_import( name, *optargs, **kwargs ):
return mod
+# private
+class _ConstantGroup(object):
+ __slots__ = ['_constants']
+ def __init__(self, constants):
+ self._constants = constants
+ def __dir__(self):
+ return self._constants.keys()
+ def __getattr__(self,name):
+ if name in self._constants:
+ return self._constants[name]
+ raise AttributeError
+
+# private
+def _impl_getConstantGroupByName( module, group ):
+ CONSTANTS = Enum('com.sun.star.uno.TypeClass', 'CONSTANTS')
+ ONE = Enum('com.sun.star.reflection.TypeDescriptionSearchDepth', 'ONE')
+ tdm = _g_ctx.getValueByName('/singletons/com.sun.star.reflection.theTypeDescriptionManager')
+ tde = tdm.createTypeDescriptionEnumeration(module,(CONSTANTS,),ONE)
+ qualifiedName = module + '.' + group
+ for td in tde:
+ if td.Name == qualifiedName:
+ return _ConstantGroup({c.Name.split('.')[-1]: c.ConstantValue for c in td.Constants})
+ else:
+ raise ValueError
+
# private function, don't use
def _impl_extractName(name):
r = list(range(len(name)-1,0,-1))