summaryrefslogtreecommitdiff
path: root/addons/document_webdav
diff options
context:
space:
mode:
authorP. Christeas <p_christ@hol.gr>2010-07-29 16:39:36 +0300
committerP. Christeas <p_christ@hol.gr>2010-07-29 16:39:36 +0300
commit4ab6bf860cb4b9e96eb3bb1006d6548e24ea643f (patch)
tree78bd60cdfba221d2db26d689985ae3690a921327 /addons/document_webdav
parentfe0ee384c7b5a64c12f8725027352df173701456 (diff)
Doc webdav: use the new server API for http OPTIONS
Since a063f7e441f910f, server has a better API for the http options, use that instead of the ill-written do_OPTIONS handler.' bzr revid: p_christ@hol.gr-20100729133936-e0laz7p3j1l2zodo
Diffstat (limited to 'addons/document_webdav')
-rw-r--r--addons/document_webdav/dav_fs.py26
-rw-r--r--addons/document_webdav/webdav_server.py24
2 files changed, 47 insertions, 3 deletions
diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py
index ab9d3a75ae4..9b36a7d78dd 100644
--- a/addons/document_webdav/dav_fs.py
+++ b/addons/document_webdav/dav_fs.py
@@ -134,6 +134,32 @@ class openerp_dav_handler(dav_interface):
cr.close()
return res
+ def prep_http_options(self, uri, opts):
+ """see HttpOptions._prep_OPTIONS """
+ self.parent.log_message('get options: %s' % uri)
+ cr, uid, pool, dbname, uri2 = self.get_cr(uri, allow_last=True)
+
+ if not dbname:
+ if cr: cr.close()
+ return opts
+ node = self.uri2object(cr, uid, pool, uri2[:])
+
+ if not node:
+ if cr: cr.close()
+ return opts
+ else:
+ if hasattr(node, 'http_options'):
+ ret = opts.copy()
+ for key, val in node.http_options.items():
+ if isinstance(val, basestring):
+ val = [val, ]
+ ret.setdefault(key, []).extend(val)
+
+ self.parent.log_message('options: %s' % ret)
+ else:
+ ret = opts
+ return ret
+
def get_prop(self, uri, ns, propname):
""" return the value of a given property
diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py
index 9f9f2733a68..eb09b62b919 100644
--- a/addons/document_webdav/webdav_server.py
+++ b/addons/document_webdav/webdav_server.py
@@ -32,12 +32,13 @@ import tools
from dav_fs import openerp_dav_handler
from tools.config import config
from DAV.WebDAVServer import DAVRequestHandler
-from service.websrv_lib import HTTPDir,FixSendError
+from service.websrv_lib import HTTPDir, FixSendError, HttpOptions
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse
import urllib
from string import atoi,split
from DAV.errors import *
+# from DAV.constants import DAV_VERSION_1, DAV_VERSION_2
def OpenDAVConfig(**kw):
class OpenDAV:
@@ -53,10 +54,15 @@ def OpenDAVConfig(**kw):
return Config()
-class DAVHandler(FixSendError,DAVRequestHandler):
+class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
verbose = False
protocol_version = 'HTTP/1.1'
-
+ _HTTP_OPTIONS= { 'DAV' : ['1',],
+ 'Allow' : [ 'GET', 'HEAD', 'COPY', 'MOVE', 'POST', 'PUT',
+ 'PROPFIND', 'PROPPATCH', 'OPTIONS', 'MKCOL',
+ 'DELETE', 'TRACE', 'REPORT', ]
+ }
+
def get_userinfo(self,user,pw):
return False
def _log(self, message):
@@ -99,6 +105,18 @@ class DAVHandler(FixSendError,DAVRequestHandler):
def log_error(self, format, *args):
netsvc.Logger().notifyChannel('xmlrpc', netsvc.LOG_WARNING, format % args)
+ def _prep_OPTIONS(self, opts):
+ ret = opts
+ dc=self.IFACE_CLASS
+ uri=urlparse.urljoin(self.get_baseuri(dc), self.path)
+ uri=urllib.unquote(uri)
+ try:
+ #location = dc.put(uri,body,ct)
+ ret = dc.prep_http_options(uri, opts)
+ except DAV_Error, (ec,dd):
+ pass
+ return ret
+
def send_response(self, code, message=None):
# the BufferingHttpServer will send Connection: close , while
# the BaseHTTPRequestHandler will only accept int code.