From f70e8e24fc550e225f891768ee66ee8916c53750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Tue, 26 Jun 2007 16:08:51 +0000 Subject: [PATCH] Increase timeout when talking to oood git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@14986 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5OOo/Document/OOoDocument.py | 31 +++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/product/ERP5OOo/Document/OOoDocument.py b/product/ERP5OOo/Document/OOoDocument.py index 4b22d702bb..0fb18e9905 100644 --- a/product/ERP5OOo/Document/OOoDocument.py +++ b/product/ERP5OOo/Document/OOoDocument.py @@ -29,6 +29,8 @@ import xmlrpclib, base64, re, zipfile, cStringIO, socket from warnings import warn from DateTime import DateTime from xmlrpclib import Fault +from xmlrpclib import Transport +from xmlrpclib import SafeTransport from AccessControl import ClassSecurityInfo from OFS.Image import Pdata from Products.CMFCore.utils import getToolByName, _setCacheHeaders @@ -48,6 +50,29 @@ dec=base64.decodestring _MARKER = [] STANDARD_IMAGE_FORMAT_LIST = ('png', 'jpg', 'gif', ) + +class TimeoutTransport(SafeTransport): + """A xmlrpc transport with configurable timeout. + """ + def __init__(self, timeout=None, scheme='http'): + self._timeout = timeout + self._scheme = scheme + + def send_content(self, connection, request_body): + connection.putheader("Content-Type", "text/xml") + connection.putheader("Content-Length", str(len(request_body))) + connection.endheaders() + if self._timeout: + connection._conn.sock.settimeout(self._timeout) + if request_body: + connection.send(request_body) + + def make_connection(self, h): + if self._scheme == 'http': + return Transport.make_connection(self, h) + return SafeTransport.make_connection(self, h) + + class OOoDocument(File, ConversionCacheMixin): """ A file document able to convert OOo compatible files to @@ -165,8 +190,10 @@ class OOoDocument(File, ConversionCacheMixin): """ Create an XML-RPC proxy to access the conversion server. """ - server_proxy = xmlrpclib.ServerProxy('http://%s:%d' % self._getServerCoordinate(), - allow_none=True) + server_proxy = xmlrpclib.ServerProxy( + 'http://%s:%d' % self._getServerCoordinate(), + allow_none=True, + transport=TimeoutTransport(timeout=360, scheme='http')) return server_proxy security.declareProtected(Permissions.AccessContentsInformation, -- 2.30.9