Kaydet (Commit) 33776d14 authored tarafından Matthew J. Francis's avatar Matthew J. Francis

PyUNO: Allow import of constant group by name

Change-Id: I0ea809a888187624261182552cf7fa0a9c96c648
üst 3a6ec53e
...@@ -303,6 +303,10 @@ def _uno_import( name, *optargs, **kwargs ): ...@@ -303,6 +303,10 @@ def _uno_import( name, *optargs, **kwargs ):
try: try:
d[x] = getConstantByName( name + "." + x ) d[x] = getConstantByName( name + "." + x )
except RuntimeException: except RuntimeException:
# check for constant group
try:
d[x] = _impl_getConstantGroupByName( name, x )
except ValueError:
failed = True failed = True
if failed: if failed:
...@@ -336,6 +340,31 @@ def _uno_import( name, *optargs, **kwargs ): ...@@ -336,6 +340,31 @@ def _uno_import( name, *optargs, **kwargs ):
return mod 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 # private function, don't use
def _impl_extractName(name): def _impl_extractName(name):
r = list(range(len(name)-1,0,-1)) r = list(range(len(name)-1,0,-1))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment