2009-01-15 15:28:08 +0100 sb r266375 : #i97629# set UNO_PATH in python start program and use it in bootstrap function in officehelper.py (and do not erroneously encode a vnd.sun.star.pathname URE_BOOTSTRAP value in tools::extendApplicationEnvironment) 2009-01-15 10:40:17 +0100 sb r266338 : #i97424# explicit shut down of ImplImageTree singleton in DeInitVCL still required 2009-01-14 12:07:15 +0100 sb r266276 : CWS-TOOLING: rebase CWS sb103 to trunk@265758 (milestone: DEV300:m38) 2009-01-14 08:53:02 +0100 sb r266266 : #i96284# remove implementation of unused (but expensive) link feature; plus some general cleanup 2009-01-08 14:42:59 +0100 sb r266010 : #i96683# enable dlclose for GCC 3 (based on a patch by cmc) 2009-01-06 14:18:23 +0100 sb r265920 : #i97424# spurious unreferenced local variables 2008-12-19 15:33:39 +0100 sb r265727 : #i57359# no need for a special glibc 2.2.4 based libgcc_s.so.1 for URE any more as the general one used for OOo is guaranteed to be based on at least glibc 2.2.4, anyway 2008-12-19 13:54:37 +0100 sb r265724 : #i97424# clean up and speed up vcl ImplImageTree 2008-12-18 14:28:10 +0100 sb r265690 : #i97132# spread usage of the rtl::Static pattern (patch by cmc) 2008-12-15 14:33:00 +0100 sb r265499 : #i90492# generate UTF-8 encoded output (patch by tora) 2008-12-15 11:45:05 +0100 sb r265469 : #i95593# -Djava.library.path to find libtest_javauno_any.so 2008-12-15 11:23:14 +0100 sb r265468 : #i93769# it appears that Java nowadays expects file URIs in UTF-8, so ExternalUriReferenceTranslator.toExternal must not be called 2008-12-10 12:02:50 +0100 sb r265164 : #i93219# use (corrected) signal handling instead of forking again (to avoid unintended generation of core files)
98 lines
3.5 KiB
Python
98 lines
3.5 KiB
Python
### *************************************************************************
|
|
### *
|
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
#
|
|
# Copyright 2008 by Sun Microsystems, Inc.
|
|
#
|
|
# OpenOffice.org - a multi-platform office productivity suite
|
|
#
|
|
# $RCSfile: officehelper.py,v $
|
|
#
|
|
# $Revision: 1.3 $
|
|
#
|
|
# 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.
|
|
#
|
|
### ************************************************************************/
|
|
|
|
#
|
|
# Translated to python from "Bootstrap.java" by Kim Kulak
|
|
#
|
|
|
|
import os
|
|
import random
|
|
from sys import platform
|
|
from time import sleep
|
|
|
|
import uno
|
|
from com.sun.star.connection import NoConnectException
|
|
from com.sun.star.uno import Exception as UnoException
|
|
|
|
|
|
class BootstrapException(UnoException):
|
|
pass
|
|
|
|
def bootstrap():
|
|
"""Bootstrap OOo and PyUNO Runtime.
|
|
The soffice process is started opening a named pipe of random name, then the local context is used
|
|
to access the pipe. This function directly returns the remote component context, from whereon you can
|
|
get the ServiceManager by calling getServiceManager() on the returned object.
|
|
"""
|
|
try:
|
|
# soffice script used on *ix, Mac; soffice.exe used on Windoof
|
|
if "UNO_PATH" in os.environ:
|
|
sOffice = os.environ["UNO_PATH"]
|
|
else:
|
|
sOffice = "" # lets hope for the best
|
|
sOffice = os.path.join(sOffice, "soffice")
|
|
if platform.startswith("win"):
|
|
sOffice += ".exe"
|
|
|
|
# Generate a random pipe name.
|
|
random.seed()
|
|
sPipeName = "uno" + str(random.random())[2:]
|
|
|
|
# Start the office proces, don't check for exit status since an exception is caught anyway if the office terminates unexpectedly.
|
|
cmdArray = (sOffice, "-nologo", "-nodefault", "".join(["-accept=pipe,name=", sPipeName, ";urp;"]))
|
|
os.spawnv(os.P_NOWAIT, sOffice, cmdArray)
|
|
|
|
# ---------
|
|
|
|
xLocalContext = uno.getComponentContext()
|
|
resolver = xLocalContext.ServiceManager.createInstanceWithContext(
|
|
"com.sun.star.bridge.UnoUrlResolver", xLocalContext)
|
|
sConnect = "".join(["uno:pipe,name=", sPipeName, ";urp;StarOffice.ComponentContext"])
|
|
|
|
# Wait until an office is started, but loop only nLoop times (can we do this better???)
|
|
nLoop = 20
|
|
while True:
|
|
try:
|
|
xContext = resolver.resolve(sConnect)
|
|
break
|
|
except NoConnectException:
|
|
nLoop -= 1
|
|
if nLoop <= 0:
|
|
raise BootstrapException("Cannot connect to soffice server.", None)
|
|
sleep(0.5) # Sleep 1/2 second.
|
|
|
|
except BootstrapException:
|
|
raise
|
|
except Exception, e: # Any other exception
|
|
raise BootstrapException("Caught exception " + str(e), None)
|
|
|
|
return xContext
|