pyuno/source/module/uno.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)
New commits: commit 33776d143fabc1b6e91a6bad54899e9f33ca2320 Author: Matthew J. Francis <mjay.fran...@gmail.com> Date: Wed Jul 1 13:14:25 2015 +0800 PyUNO: Allow import of constant group by name Change-Id: I0ea809a888187624261182552cf7fa0a9c96c648 diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py index a8873ae..4c78595 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)) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits