summaryrefslogtreecommitdiff
path: root/pyuno/source/module/uno.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyuno/source/module/uno.py')
-rw-r--r--pyuno/source/module/uno.py352
1 files changed, 352 insertions, 0 deletions
diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py
new file mode 100644
index 000000000000..f61b3c925d36
--- /dev/null
+++ b/pyuno/source/module/uno.py
@@ -0,0 +1,352 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+import sys
+
+import pyuno
+import __builtin__
+import socket # since on Windows sal3.dll no longer calls WSAStartup
+
+# all functions and variables starting with a underscore (_) must be considered private
+# and can be changed at any time. Don't use them
+_g_ctx = pyuno.getComponentContext( )
+_g_delegatee = __builtin__.__dict__["__import__"]
+
+def getComponentContext():
+ """ returns the UNO component context, that was used to initialize the python runtime.
+ """
+ return _g_ctx
+
+def getConstantByName( constant ):
+ "Looks up the value of a idl constant by giving its explicit name"
+ return pyuno.getConstantByName( constant )
+
+def getTypeByName( typeName):
+ """ returns a uno.Type instance of the type given by typeName. In case the
+ type does not exist, a com.sun.star.uno.RuntimeException is raised.
+ """
+ return pyuno.getTypeByName( typeName )
+
+def createUnoStruct( typeName, *args ):
+ """creates a uno struct or exception given by typeName. The parameter args may
+ 1) be empty. In this case, you get a default constructed uno structure.
+ ( e.g. createUnoStruct( "com.sun.star.uno.Exception" ) )
+ 2) be a sequence with exactly one element, that contains an instance of typeName.
+ In this case, a copy constructed instance of typeName is returned
+ ( e.g. createUnoStruct( "com.sun.star.uno.Exception" , e ) )
+ 3) be a sequence, where the length of the sequence must match the number of
+ elements within typeName (e.g.
+ createUnoStruct( "com.sun.star.uno.Exception", "foo error" , self) ). The
+ elements with in the sequence must match the type of each struct element,
+ otherwise an exception is thrown.
+ """
+ return getClass(typeName)( *args )
+
+def getClass( typeName ):
+ """returns the class of a concrete uno exception, struct or interface
+ """
+ return pyuno.getClass(typeName)
+
+def isInterface( obj ):
+ """returns true, when obj is a class of a uno interface"""
+ return pyuno.isInterface( obj )
+
+def generateUuid():
+ "returns a 16 byte sequence containing a newly generated uuid or guid, see rtl/uuid.h "
+ return pyuno.generateUuid()
+
+def systemPathToFileUrl( systemPath ):
+ "returns a file-url for the given system path"
+ return pyuno.systemPathToFileUrl( systemPath )
+
+def fileUrlToSystemPath( url ):
+ "returns a system path (determined by the system, the python interpreter is running on)"
+ return pyuno.fileUrlToSystemPath( url )
+
+def absolutize( path, relativeUrl ):
+ "returns an absolute file url from the given urls"
+ return pyuno.absolutize( path, relativeUrl )
+
+def getCurrentContext():
+ """Returns the currently valid current context.
+ see http://udk.openoffice.org/common/man/concept/uno_contexts.html#current_context
+ for an explanation on the current context concept
+ """
+ return pyuno.getCurrentContext()
+
+def setCurrentContext( newContext ):
+ """Sets newContext as new uno current context. The newContext must
+ implement the XCurrentContext interface. The implemenation should
+ handle the desired properties and delegate unknown properties to the
+ old context. Ensure to reset the old one when you leave your stack ...
+ see http://udk.openoffice.org/common/man/concept/uno_contexts.html#current_context
+ """
+ return pyuno.setCurrentContext( newContext )
+
+
+class Enum:
+ "Represents a UNO idl enum, use an instance of this class to explicitly pass a boolean to UNO"
+ #typeName the name of the enum as a string
+ #value the actual value of this enum as a string
+ def __init__(self,typeName, value):
+ self.typeName = typeName
+ self.value = value
+ pyuno.checkEnum( self )
+
+ def __repr__(self):
+ return "<uno.Enum %s (%r)>" % (self.typeName, self.value)
+
+ def __eq__(self, that):
+ if not isinstance(that, Enum):
+ return False
+ return (self.typeName == that.typeName) and (self.value == that.value)
+
+class Type:
+ "Represents a UNO type, use an instance of this class to explicitly pass a boolean to UNO"
+# typeName # Name of the UNO type
+# typeClass # python Enum of TypeClass, see com/sun/star/uno/TypeClass.idl
+ def __init__(self, typeName, typeClass):
+ self.typeName = typeName
+ self.typeClass = typeClass
+ pyuno.checkType(self)
+ def __repr__(self):
+ return "<Type instance %s (%r)>" % (self.typeName, self.typeClass)
+
+ def __eq__(self, that):
+ if not isinstance(that, Type):
+ return False
+ return self.typeClass == that.typeClass and self.typeName == that.typeName
+
+ def __hash__(self):
+ return self.typeName.__hash__()
+
+class Bool(object):
+ """Represents a UNO boolean, use an instance of this class to explicitly
+ pass a boolean to UNO.
+ Note: This class is deprecated. Use python's True and False directly instead
+ """
+ def __new__(cls, value):
+ if isinstance(value, (str, unicode)) and value == "true":
+ return True
+ if isinstance(value, (str, unicode)) and value == "false":
+ return False
+ if value:
+ return True
+ return False
+
+class Char:
+ "Represents a UNO char, use an instance of this class to explicitly pass a char to UNO"
+ # @param value pass a Unicode string with length 1
+ def __init__(self,value):
+ assert isinstance(value, unicode)
+ assert len(value) == 1
+ self.value=value
+
+ def __repr__(self):
+ return "<Char instance %s>" % (self.value, )
+
+ def __eq__(self, that):
+ if isinstance(that, (str, unicode)):
+ if len(that) > 1:
+ return False
+ return self.value == that[0]
+ if isinstance(that, Char):
+ return self.value == that.value
+ return False
+
+# Suggested by Christian, but still some open problems which need to be solved first
+#
+#class ByteSequence(str):
+#
+# def __repr__(self):
+# return "<ByteSequence instance %s>" % str.__repr__(self)
+
+ # for a little bit compatitbility; setting value is not possible as
+ # strings are immutable
+# def _get_value(self):
+# return self
+#
+# value = property(_get_value)
+
+class ByteSequence:
+ def __init__(self, value):
+ if isinstance(value, str):
+ self.value = value
+ elif isinstance(value, ByteSequence):
+ self.value = value.value
+ else:
+ raise TypeError("expected string or bytesequence")
+
+ def __repr__(self):
+ return "<ByteSequence instance '%s'>" % (self.value, )
+
+ def __eq__(self, that):
+ if isinstance( that, ByteSequence):
+ return self.value == that.value
+ if isinstance(that, str):
+ return self.value == that
+ return False
+
+ def __len__(self):
+ return len(self.value)
+
+ def __getitem__(self, index):
+ return self.value[index]
+
+ def __iter__( self ):
+ return self.value.__iter__()
+
+ def __add__( self , b ):
+ if isinstance( b, str ):
+ return ByteSequence( self.value + b )
+ elif isinstance( b, ByteSequence ):
+ return ByteSequence( self.value + b.value )
+ raise TypeError( "expected string or ByteSequence as operand" )
+
+ def __hash__( self ):
+ return self.value.hash()
+
+
+class Any:
+ "use only in connection with uno.invoke() to pass an explicit typed any"
+ def __init__(self, type, value ):
+ if isinstance( type, Type ):
+ self.type = type
+ else:
+ self.type = getTypeByName( type )
+ self.value = value
+
+def invoke( object, methodname, argTuple ):
+ "use this function to pass exactly typed anys to the callee (using uno.Any)"
+ return pyuno.invoke( object, methodname, argTuple )
+
+#---------------------------------------------------------------------------------------
+# don't use any functions beyond this point, private section, likely to change
+#---------------------------------------------------------------------------------------
+#def _uno_import( name, globals={}, locals={}, fromlist=[], level=-1 ):
+def _uno_import( name, *optargs, **kwargs ):
+ try:
+# print "optargs = " + repr(optargs)
+ return _g_delegatee( name, *optargs, **kwargs )
+ except ImportError:
+ # process optargs
+ globals, locals, fromlist = list(optargs)[:3] + [kwargs.get('globals',{}), kwargs.get('locals',{}), kwargs.get('fromlist',[])][len(optargs):]
+ if not fromlist:
+ raise
+ modnames = name.split( "." )
+ mod = None
+ d = sys.modules
+ for x in modnames:
+ if d.has_key(x):
+ mod = d[x]
+ else:
+ mod = pyuno.__class__(x) # How to create a module ??
+ d = mod.__dict__
+
+ RuntimeException = pyuno.getClass( "com.sun.star.uno.RuntimeException" )
+ for x in fromlist:
+ if not d.has_key(x):
+ if x.startswith( "typeOf" ):
+ try:
+ d[x] = pyuno.getTypeByName( name + "." + x[6:len(x)] )
+ except RuntimeException,e:
+ raise ImportError( "type " + name + "." + x[6:len(x)] +" is unknown" )
+ else:
+ try:
+ # check for structs, exceptions or interfaces
+ d[x] = pyuno.getClass( name + "." + x )
+ except RuntimeException,e:
+ # check for enums
+ try:
+ d[x] = Enum( name , x )
+ except RuntimeException,e2:
+ # check for constants
+ try:
+ d[x] = getConstantByName( name + "." + x )
+ except RuntimeException,e3:
+ # no known uno type !
+ raise ImportError( "type "+ name + "." +x + " is unknown" )
+ return mod
+
+# hook into the __import__ chain
+__builtin__.__dict__["__import__"] = _uno_import
+
+# private function, don't use
+def _impl_extractName(name):
+ r = range (len(name)-1,0,-1)
+ for i in r:
+ if name[i] == ".":
+ name = name[i+1:len(name)]
+ break
+ return name
+
+# private, referenced from the pyuno shared library
+def _uno_struct__init__(self,*args):
+ if len(args) == 1 and hasattr(args[0], "__class__") and args[0].__class__ == self.__class__ :
+ self.__dict__["value"] = args[0]
+ else:
+ self.__dict__["value"] = pyuno._createUnoStructHelper(self.__class__.__pyunostruct__,args)
+
+# private, referenced from the pyuno shared library
+def _uno_struct__getattr__(self,name):
+ return __builtin__.getattr(self.__dict__["value"],name)
+
+# private, referenced from the pyuno shared library
+def _uno_struct__setattr__(self,name,value):
+ return __builtin__.setattr(self.__dict__["value"],name,value)
+
+# private, referenced from the pyuno shared library
+def _uno_struct__repr__(self):
+ return repr(self.__dict__["value"])
+
+def _uno_struct__str__(self):
+ return str(self.__dict__["value"])
+
+# private, referenced from the pyuno shared library
+def _uno_struct__eq__(self,cmp):
+ if hasattr(cmp,"value"):
+ return self.__dict__["value"] == cmp.__dict__["value"]
+ return False
+
+# referenced from pyuno shared lib and pythonscript.py
+def _uno_extract_printable_stacktrace( trace ):
+ mod = None
+ try:
+ mod = __import__("traceback")
+ except ImportError,e:
+ pass
+ ret = ""
+ if mod:
+ lst = mod.extract_tb( trace )
+ max = len(lst)
+ for j in range(max):
+ i = lst[max-j-1]
+ ret = ret + " " + str(i[0]) + ":" + \
+ str(i[1]) + " in function " + \
+ str(i[2]) + "() [" + str(i[3]) + "]\n"
+ else:
+ ret = "Couldn't import traceback module"
+ return ret