summaryrefslogtreecommitdiff
path: root/addons/document_webdav/webdav_server.py
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2012-12-18 15:03:11 +0100
committerAntony Lesuisse <al@openerp.com>2012-12-18 15:03:11 +0100
commit2a10c7b76b7da6aacd7cd6dfe188b2a218d0ba1d (patch)
tree5ec1d1184c964ff1d2d974b3df09910a64fd6d9e /addons/document_webdav/webdav_server.py
parentff7626229a2687ed85271c510ecc017e35634056 (diff)
parent011b4f00456aeb1f2a51b2d607d9d53da9c2b5e2 (diff)
[MERGE] trunk
bzr revid: al@openerp.com-20121218140311-1rw9bqc1nwztfobb
Diffstat (limited to 'addons/document_webdav/webdav_server.py')
-rw-r--r--addons/document_webdav/webdav_server.py42
1 files changed, 31 insertions, 11 deletions
diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py
index 70ad4d2657f..f801a56ee97 100644
--- a/addons/document_webdav/webdav_server.py
+++ b/addons/document_webdav/webdav_server.py
@@ -35,12 +35,21 @@
import logging
-import netsvc
+from openerp import netsvc
from dav_fs import openerp_dav_handler
-from tools.config import config
-from DAV.WebDAVServer import DAVRequestHandler
-from service import http_server
-from service.websrv_lib import FixSendError, HttpOptions
+from openerp.tools.config import config
+try:
+ from pywebdav.lib.WebDAVServer import DAVRequestHandler
+ from pywebdav.lib.utils import IfParser, TagList
+ from pywebdav.lib.errors import DAV_Error, DAV_Forbidden, DAV_NotFound
+ from pywebdav.lib.propfind import PROPFIND
+except ImportError:
+ from DAV.WebDAVServer import DAVRequestHandler
+ from DAV.utils import IfParser, TagList
+ from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound
+ from DAV.propfind import PROPFIND
+from openerp.service import http_server
+from openerp.service.websrv_lib import FixSendError, HttpOptions
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse
import urllib
@@ -48,9 +57,6 @@ import re
import time
from string import atoi
import addons
-from DAV.utils import IfParser, TagList
-from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound
-from DAV.propfind import PROPFIND
# from DAV.constants import DAV_VERSION_1, DAV_VERSION_2
from xml.dom import minidom
from redirect import RedirectHTTPHandler
@@ -71,7 +77,7 @@ def OpenDAVConfig(**kw):
return Config()
-class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
+class DAVHandler(DAVRequestHandler, HttpOptions, FixSendError):
verbose = False
protocol_version = 'HTTP/1.1'
@@ -88,7 +94,20 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
self._logger.debug(message)
def handle(self):
- self._init_buffer()
+ """Handle multiple requests if necessary."""
+ self.close_connection = 1
+ try:
+ self.handle_one_request()
+ while not self.close_connection:
+ self.handle_one_request()
+ except Exception as e:
+ try:
+ self.log_error("Request timed out: %r \n Trying old version of HTTPServer", e)
+ self._init_buffer()
+ except Exception as e:
+ #a read or a write timed out. Discard this connection
+ self.log_error("Not working neither, closing connection\n %r", e)
+ self.close_connection = 1
def finish(self):
pass
@@ -99,6 +118,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
return res
def setup(self):
+ DAVRequestHandler.setup(self)
self.davpath = '/'+config.get_misc('webdav','vdir','webdav')
addr, port = self.server.server_name, self.server.server_port
server_proto = getattr(self.server,'proto', 'http').lower()
@@ -413,7 +433,7 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
data['lockowner'] = owners
return data
-from service.http_server import reg_http_service,OpenERPAuthProvider
+from openerp.service.http_server import reg_http_service,OpenERPAuthProvider
class DAVAuthProvider(OpenERPAuthProvider):
def authenticate(self, db, user, passwd, client_address):