home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.5)
-
- import uno
- import unohelper
- import sys
- import imp
- import os
- from com.sun.star.uno import Exception, RuntimeException
- from com.sun.star.loader import XImplementationLoader
- from com.sun.star.lang import XServiceInfo
- MODULE_PROTOCOL = 'vnd.openoffice.pymodule:'
- DEBUG = 1
- g_supportedServices = ('com.sun.star.loader.Python',)
- g_implementationName = 'org.openoffice.comp.pyuno.Loader'
-
- def splitUrl(url):
- nColon = url.find(':')
- if -1 == nColon:
- raise RuntimeException('PythonLoader: No protocol in url ' + url, None)
-
- return (url[0:nColon], url[nColon + 1:len(url)])
-
- g_loadedComponents = { }
-
- def checkForPythonPathBesideComponent(url):
- path = unohelper.fileUrlToSystemPath(url + '/pythonpath.zip')
- if DEBUG == 1:
- print 'checking for existence of ' + encfile(path)
-
- if 1 == os.access(encfile(path), os.F_OK) and path not in sys.path:
- if DEBUG == 1:
- print 'adding ' + encfile(path) + ' to sys.path'
-
- sys.path.append(path)
-
- path = unohelper.fileUrlToSystemPath(url + '/pythonpath')
- if 1 == os.access(encfile(path), os.F_OK) and path not in sys.path:
- if DEBUG == 1:
- print 'adding ' + encfile(path) + ' to sys.path'
-
- sys.path.append(path)
-
-
-
- def encfile(uni):
- return uni.encode(sys.getfilesystemencoding())
-
-
- class Loader(XImplementationLoader, XServiceInfo, unohelper.Base):
-
- def __init__(self, ctx):
- if DEBUG:
- print 'pythonloader.Loader ctor'
-
- self.ctx = ctx
-
-
- def getModuleFromUrl(self, url):
- if DEBUG:
- print 'pythonloader: interpreting url ' + url
-
- (protocol, dependent) = splitUrl(url)
- if 'vnd.sun.star.expand' == protocol:
- exp = self.ctx.getValueByName('/singletons/com.sun.star.util.theMacroExpander')
- url = exp.expandMacros(dependent)
- (protocol, dependent) = splitUrl(url)
-
- if DEBUG:
- print 'pythonloader: after expansion ' + protocol + ':' + dependent
-
-
- try:
- if 'file' == protocol:
- url = unohelper.absolutize(url, url)
- mod = g_loadedComponents.get(url)
- if not mod:
- mod = imp.new_module('uno_component')
- checkForPythonPathBesideComponent(url[0:url.rfind('/')])
- filename = unohelper.fileUrlToSystemPath(url)
- fileHandle = file(filename)
- src = fileHandle.read().replace('\r', '')
- if not src.endswith('\n'):
- src = src + '\n'
-
- codeobject = compile(src, encfile(filename), 'exec')
- exec codeobject in mod.__dict__
- mod.__file__ = encfile(filename)
- g_loadedComponents[url] = mod
-
- return mod
- elif 'vnd.openoffice.pymodule' == protocol:
- return __import__(dependent)
- else:
- raise RuntimeException('PythonLoader: Unknown protocol ' + protocol + ' in url ' + url, self)
- except ImportError:
- e = None
- raise RuntimeException("Couldn't load " + url + ' for reason ' + str(e), None)
-
-
-
- def activate(self, implementationName, dummy, locationUrl, regKey):
- if DEBUG:
- print 'pythonloader.Loader.activate'
-
- mod = self.getModuleFromUrl(locationUrl)
- implHelper = mod.__dict__.get('g_ImplementationHelper', None)
- if implHelper == None:
- return mod.getComponentFactory(implementationName, self.ctx.ServiceManager, regKey)
- else:
- return implHelper.getComponentFactory(implementationName, regKey, self.ctx.ServiceManager)
-
-
- def writeRegistryInfo(self, regKey, dummy, locationUrl):
- if DEBUG:
- print 'pythonloader.Loader.writeRegistryInfo'
-
- mod = self.getModuleFromUrl(locationUrl)
- implHelper = mod.__dict__.get('g_ImplementationHelper', None)
- if implHelper == None:
- return mod.writeRegistryInfo(self.ctx.ServiceManager, regKey)
- else:
- return implHelper.writeRegistryInfo(regKey, self.ctx.ServiceManager)
-
-
- def getImplementationName(self):
- return g_implementationName
-
-
- def supportsService(self, ServiceName):
- return ServiceName in self.serviceNames
-
-
- def getSupportedServiceNames(self):
- return g_supportedServices
-
-
-