diff options
-rw-r--r-- | pyuno/source/module/uno.py | 31 |
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)) |