[Erp5-report] r41760 gabriel - in /erp5/trunk/utils/cloudooo/cloudooo: ./ application/ hand...
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Dec 24 16:52:35 CET 2010
Author: gabriel
Date: Fri Dec 24 16:52:35 2010
New Revision: 41760
URL: http://svn.erp5.org?rev=41760&view=rev
Log:
- Fix issue to convert odt to sxg.
- Added one more flag to be ignored, because is not possible convert documents with this filters.
- refactor code to send the possible filters to unoconverter.py according to Document Type.
i.e com.sun.star.text.GlobalDocument
Modified:
erp5/trunk/utils/cloudooo/cloudooo/application/application.py
erp5/trunk/utils/cloudooo/cloudooo/handler/oohandler.py
erp5/trunk/utils/cloudooo/cloudooo/helper/unoconverter.py
erp5/trunk/utils/cloudooo/cloudooo/mimemapper.py
Modified: erp5/trunk/utils/cloudooo/cloudooo/application/application.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/application/application.py?rev=41760&r1=41759&r2=41760&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/application/application.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/application/application.py [utf8] Fri Dec 24 16:52:35 2010
@@ -28,7 +28,7 @@
from zope.interface import implements
from cloudooo.interfaces.application import IApplication
-from cloudooo.utils import logger, socketStatus
+from cloudooo.utils import logger, socketStatus, waitStopDaemon
from psutil import pid_exists, Process
@@ -53,6 +53,7 @@ class Application(object):
logger.debug("Stop Pid - %s" % process_pid)
try:
self.process.terminate()
+ waitStopDaemon(self, self.timeout)
finally:
if pid_exists(process_pid) or self.status():
Process(process_pid).kill()
Modified: erp5/trunk/utils/cloudooo/cloudooo/handler/oohandler.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/handler/oohandler.py?rev=41760&r1=41759&r2=41760&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/handler/oohandler.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/handler/oohandler.py [utf8] Fri Dec 24 16:52:35 2010
@@ -27,6 +27,7 @@
##############################################################################
import json
+import re
import pkg_resources
from base64 import decodestring, encodestring
from os import environ, path
@@ -119,35 +120,30 @@ class OOHandler:
openoffice.start()
command = self._getCommand(*feature_list, **kw)
stdout, stderr = self._subprocess(command)
- if not stdout and stderr != '':
+ if not stdout and len(re.findall("[A-Za-z]*Exception", stderr)) >= 1:
logger.debug(stderr)
- if "NoConnectException" in stderr or \
- "RuntimeException" in stderr or \
- "DisposedException" in stderr:
- self.document.restoreOriginal()
- openoffice.restart()
- kw['document_url'] = self.document.getUrl()
- command = self._getCommand(*feature_list, **kw)
- stdout, stderr = self._subprocess(command)
- elif "ErrorCodeIOException" in stderr:
- raise Exception, stderr + \
- "This document can not be converted to this format"
- else:
- raise Exception, stderr
+ self.document.restoreOriginal()
+ openoffice.restart()
+ kw['document_url'] = self.document.getUrl()
+ command = self._getCommand(*feature_list, **kw)
+ stdout, stderr = self._subprocess(command)
+ if stderr != "":
+ raise Exception, stderr
return stdout, stderr
- def _serializeMimemapper(self):
+ def _serializeMimemapper(self, extension=None):
"""Serialize parts of mimemapper"""
- filter_list = []
- for extension in mimemapper.extension_list:
- for service_type in mimemapper.document_service_list:
- if service_type in mimemapper._doc_type_list_by_extension[extension]:
- filter_list.append((extension,
- service_type,
- mimemapper.getFilterName(extension,
- service_type)))
+ if extension is None:
+ return json.dumps(dict(mimetype_by_filter_type=mimemapper._mimetype_by_filter_type))
+ filter_list = []
+ for service_type in mimemapper._doc_type_list_by_extension[extension]:
+ for extension in mimemapper.extension_list_by_doc_type[service_type]:
+ filter_list.append((extension,
+ service_type,
+ mimemapper.getFilterName(extension,
+ service_type)))
return json.dumps(dict(doc_type_list_by_extension=mimemapper._doc_type_list_by_extension,
filter_list=filter_list,
mimetype_by_filter_type=mimemapper._mimetype_by_filter_type))
@@ -162,7 +158,7 @@ class OOHandler:
kw['source_format'] = self.source_format
if destination_format:
kw['destination_format'] = destination_format
- kw['mimemapper'] = self._serializeMimemapper()
+ kw['mimemapper'] = self._serializeMimemapper(destination_format)
kw['refresh'] = json.dumps(self.refresh)
try:
stdout, stderr = self._callUnoConverter(*['convert'], **kw)
Modified: erp5/trunk/utils/cloudooo/cloudooo/helper/unoconverter.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/helper/unoconverter.py?rev=41760&r1=41759&r2=41760&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/helper/unoconverter.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/helper/unoconverter.py [utf8] Fri Dec 24 16:52:35 2010
@@ -136,19 +136,20 @@ class UnoConverter(object):
return [property,]
def _getFilterName(self, destination_format, type):
- for filter_tuple in mimemapper["filter_list"]:
- if destination_format == filter_tuple[0] and filter_tuple[1] == type:
- return filter_tuple[2]
+ document_type_list = mimemapper["doc_type_list_by_extension"].get(destination_format)
+ if type in document_type_list:
+ for filter_tuple in mimemapper["filter_list"]:
+ if destination_format == filter_tuple[0] and filter_tuple[1] == type:
+ return filter_tuple[2]
+ else:
+ for filter_tuple in mimemapper["filter_list"]:
+ if destination_format == filter_tuple[0]:
+ return filter_tuple[2]
def _getPropertyToExport(self, destination_format=None):
"""Create the property according to the extension of the file."""
if destination_format and self.document_loaded:
- doc_type_list = mimemapper["doc_type_list_by_extension"].get(destination_format)
- if self.document_type not in doc_type_list:
- raise AttributeError, \
- "This Document can not be converted for this format"
- type = self.document_type
- filter_name = self._getFilterName(destination_format, type)
+ filter_name = self._getFilterName(destination_format, self.document_type)
property_list = []
property = self._createProperty("Overwrite", True)
property_list.append(property)
Modified: erp5/trunk/utils/cloudooo/cloudooo/mimemapper.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/mimemapper.py?rev=41760&r1=41759&r2=41760&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/mimemapper.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/mimemapper.py [utf8] Fri Dec 24 16:52:35 2010
@@ -54,9 +54,9 @@ class MimeMapper(object):
self._doc_type_list_by_extension = {}
# List of extensions that are ODF
self._odf_extension_list = []
- self.extension_list = []
self._mimetype_by_filter_type = {}
self._document_type_dict = {}
+ self.extension_list = []
def _addFilter(self, filter):
"""Add filter in mimemapper catalog."""
@@ -104,7 +104,8 @@ class MimeMapper(object):
# Filters that has flag in bad_flag_list is ignored.
# XXX - Is not good way to remove unnecessary filters
# XXX - try find a good way to remove filters that are not used for export
- bad_flag_list = [65, 94217, 536641, 1572929, 268959937, 524373, 85, 524353]
+ bad_flag_list = [65, 94217, 536641, 1572929, 268959937,
+ 524373, 85, 524353, 524391]
uno_path = kw.get("uno_path", environ.get('uno_path'))
office_binary_path = kw.get("office_binary_path",
environ.get('office_binary_path'))
@@ -122,7 +123,6 @@ class MimeMapper(object):
close_fds=True,
env=getCleanPythonEnvironment()).communicate()
filter_dict, type_dict = json.loads(stdout)
-
for filter_name, value in filter_dict.iteritems():
flag = value.get("Flags")
if flag in bad_flag_list:
@@ -185,6 +185,9 @@ class MimeMapper(object):
# Adds the object in filter_by_extension_dict
self._addFilter(filter)
self.document_service_list = self._extension_list_by_type.keys()
+ self.extension_list_by_doc_type =\
+ dict([(type, [extension[0] for extension in extension_list])\
+ for type, extension_list in self._extension_list_by_type.iteritems()])
self._loaded = True
def getMimetypeByFilterType(self, filter_type):
More information about the Erp5-report
mailing list