From 33776d143fabc1b6e91a6bad54899e9f33ca2320 Mon Sep 17 00:00:00 2001 From: "Matthew J. Francis" Date: Wed, 1 Jul 2015 13:14:25 +0800 Subject: PyUNO: Allow import of constant group by name Change-Id: I0ea809a888187624261182552cf7fa0a9c96c648 --- pyuno/source/module/uno.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'pyuno') 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)) -- cgit