doc webdav: fix namespaces, properties
authorP. Christeas <p_christ@hol.gr>
Tue, 12 Oct 2010 10:38:30 +0000 (13:38 +0300)
committerP. Christeas <p_christ@hol.gr>
Tue, 12 Oct 2010 10:38:30 +0000 (13:38 +0300)
bzr revid: p_christ@hol.gr-20101012103830-0mfo4ecuu4lu78ia

addons/document_webdav/dav_fs.py
addons/document_webdav/webdav.py
addons/document_webdav/webdav_server.py

index f3c8201..9b04d2f 100644 (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()
index 3b6cf58..6b24198 100644 (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)
 
index 4459224..c86cde2 100644 (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 = {}