[Libreoffice-commits] core.git: pyuno/source

Matthew J. Francis mjay.francis at gmail.com
Tue Jun 30 22:15:58 PDT 2015


 pyuno/source/module/uno.py |   31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

New commits:
commit 33776d143fabc1b6e91a6bad54899e9f33ca2320
Author: Matthew J. Francis <mjay.francis at 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))


More information about the Libreoffice-commits mailing list