doc webdav: fix namespaces, properties

bzr revid: p_christ@hol.gr-20101012103830-0mfo4ecuu4lu78ia
This commit is contained in:
P. Christeas 2010-10-12 13:38:30 +03:00
parent eeffc06f2a
commit 96499ac6ce
3 changed files with 18 additions and 8 deletions

View File

@ -194,7 +194,12 @@ class openerp_dav_handler(dav_interface):
pname -- name of the property
"""
if self.M_NS.has_key(ns):
return dav_interface.get_prop(self, uri, ns, propname)
try:
# if it's not in the interface class, a "DAV:" property
# may be at the node class. So shouldn't give up early.
return dav_interface.get_prop(self, uri, ns, propname)
except DAV_NotFound:
pass
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not dbname:
if cr: cr.close()

View File

@ -48,7 +48,7 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
re=doc.createElement("D:response")
# append namespaces to response
nsnum=0
namespaces = self.namespaces
namespaces = self.namespaces[:]
if 'DAV:' in namespaces:
namespaces.remove('DAV:')
for nsname in namespaces:
@ -108,10 +108,14 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
ve=doc.createElement(ns_prefix+v[0])
if need_ns:
ve.setAttribute("xmlns:ns"+str(nsnum), v[1])
if len(v) > 2 and isinstance(v[2], list):
# support nested elements like:
# ( 'elem', 'ns:', [('sub-elem1', 'ns1'), ...]
_prop_elem_child(ve, v[1], v[2], ns_prefix)
if len(v) > 2:
if isinstance(v[2], list):
# support nested elements like:
# ( 'elem', 'ns:', [('sub-elem1', 'ns1'), ...]
_prop_elem_child(ve, v[1], v[2], ns_prefix)
else:
vt =doc.createTextNode(tools.ustr(v[2]))
ve.appendChild(vt)
pnode.appendChild(ve)
else:
ve=doc.createTextNode(tools.ustr(v))
@ -141,7 +145,7 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
else:
ns_prefix="ns"+str(namespaces.index(ns))+":"
for p,v in good_props[ns].items():
if not v:
if v is None:
continue
_prop_child(gp, ns, p, v)

View File

@ -208,8 +208,9 @@ class DAVHandler(HttpOptions, FixSendError, DAVRequestHandler):
if self.headers.has_key("Content-Type"):
ct=self.headers['Content-Type']
try:
location = dc.put(uri,body,ct)
location = dc.put(uri, body, ct)
except DAV_Error, (ec,dd):
self._logger.warning("Cannot PUT to %s: %s", uri, dd, exc_info=True)
return self.send_status(ec)
headers = {}