~anybox/aeroo/openerp6

« back to all changes in this revision

Viewing changes to report_aeroo_ooo/DocumentConverter.py

  • Committer: root
  • Date: 2013-05-16 15:46:46 UTC
  • Revision ID: root@erp.kndati.lv-20130516154646-5lesr8tyzl1vdc0k
1.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
from os.path import isfile
29
29
from os.path import splitext
30
30
import sys
 
31
import time
 
32
import subprocess
 
33
import logging
31
34
try:
32
35
    from cStringIO import StringIO
33
36
except ImportError:
44
47
from com.sun.star.io import IOException
45
48
from com.sun.star.script import CannotConvertException
46
49
from tools.translate import _
 
50
import netsvc
 
51
 
 
52
logger = netsvc.Logger()
47
53
 
48
54
class DocumentConversionException(Exception):
49
55
 
84
90
 
85
91
class DocumentConverter:
86
92
   
87
 
    def __init__(self, host='localhost', port=DEFAULT_OPENOFFICE_PORT):
 
93
    def __init__(self, host='localhost', port=DEFAULT_OPENOFFICE_PORT, ooo_restart_cmd=None):
88
94
        self._host = host
89
95
        self._port = port
 
96
        self._ooo_restart_cmd = ooo_restart_cmd
90
97
        self.localContext = uno.getComponentContext()
91
98
        self.serviceManager = self.localContext.ServiceManager
92
99
        self._resolver = self.serviceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", self.localContext)
95
102
        except IllegalArgumentException, exception:
96
103
            raise DocumentConversionException("The url is invalid (%s)" % exception)
97
104
        except NoConnectException, exception:
98
 
            raise DocumentConversionException("Failed to connect to OpenOffice.org on host %s, port %s. %s" % (host, port, exception))
 
105
            if self._restart_ooo():
 
106
                # We try again once
 
107
                try:
 
108
                    self._context = self._resolver.resolve("uno:socket,host=%s,port=%s;urp;StarOffice.ComponentContext" % (host, port))
 
109
                except NoConnectException, exception:
 
110
                    raise DocumentConversionException("Failed to connect to OpenOffice.org on host %s, port %s. %s" % (host, port, exception))
 
111
            else:
 
112
                raise DocumentConversionException("Failed to connect to OpenOffice.org on host %s, port %s. %s" % (host, port, exception))
 
113
 
99
114
        except ConnectionSetupException, exception:
100
115
            raise DocumentConversionException("Not possible to accept on a local resource (%s)" % exception)
101
116
 
193
208
            props.append(prop)
194
209
        return tuple(props)
195
210
 
 
211
    def _restart_ooo(self):
 
212
        if not self._ooo_restart_cmd:
 
213
            logger.notifyChannel('report_aeroo', netsvc.LOG_WARNING, 'No LibreOffice/OpenOffice restart script configured')
 
214
            return False
 
215
        logger.notifyChannel('report_aeroo', netsvc.LOG_INFO, 'No LibreOffice/OpenOffice restart script configured')
 
216
        try:
 
217
            logger.notifyChannel('report_aeroo', netsvc.LOG_INFO, 'Executing restart script "%s"' % self._ooo_restart_cmd)
 
218
            retcode = subprocess.call(self._ooo_restart_cmd, shell=True)
 
219
            if retcode == 0:
 
220
                logger.notifyChannel('report_aeroo', netsvc.LOG_WARNING, 'Restart successfull')
 
221
                time.sleep(4) # Let some time for LibO/OOO to be fully started
 
222
            else:
 
223
                logger.notifyChannel('report_aeroo', netsvc.LOG_ERROR, 'Restart script failed with return code %d' % retcode)
 
224
        except OSError, e:
 
225
            logger.notifyChannel('report_aeroo', netsvc.LOG_ERROR, 'Failed to execute the restart script. OS error: %s' % e)
 
226
        return True
 
227