diff options
author | Matthew J. Francis <mjay.francis@gmail.com> | 2015-07-01 13:14:25 +0800 |
---|---|---|
committer | Matthew J. Francis <mjay.francis@gmail.com> | 2015-07-01 13:14:25 +0800 |
commit | 33776d143fabc1b6e91a6bad54899e9f33ca2320 (patch) | |
tree | 51860737ab43d0b367fc1e95a0805d6762537bb6 /pyuno | |
parent | 3a6ec53eeeec71312f5ea890689f9c2ee79c2aac (diff) |
PyUNO: Allow import of constant group by name
Change-Id: I0ea809a888187624261182552cf7fa0a9c96c648
Diffstat (limited to 'pyuno')
-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)) |