Document webdav: fix mkcol, rename, get_data (temp)

Conflicts:

	document_webdav/dav_fs.py
	document_webdav/webdav_server.py

bzr revid: p_christ@hol.gr-20100712193236-8xde2tpmmxfp004n
This commit is contained in:
P. Christeas
2010-07-12 22:32:36 +03:00
parent 8dc0cc8a32
commit 83ff0d6757
2 changed files with 29 additions and 13 deletions
+17 -13
View File
@@ -313,7 +313,7 @@ class openerp_dav_handler(dav_interface):
self.parent.log_error("GET exception: %s",str(e))
self.parent.log_message("Exc: %s", traceback.format_exc())
raise DAV_Error, 409
return datas
return str(datas) # FIXME!
finally:
if cr: cr.close()
@@ -434,22 +434,27 @@ class openerp_dav_handler(dav_interface):
if cr: cr.close()
def mkcol(self,uri):
""" create a new collection """
""" create a new collection
see par. 9.3 of rfc4918
"""
self.parent.log_message('MKCOL: %s' % uri)
uri = self.uri2local(uri)[1:]
if not uri:
cr, uid, pool, dbname, uri2 = self.get_cr(uri)
if not uri2[-1]:
cr.close()
raise DAV_Error(409, "Cannot create nameless collection")
if uri[-1]=='/':uri=uri[:-1]
parent = '/'.join(uri.split('/')[:-1])
parent = self.baseuri + parent
uri = self.baseuri + uri
cr, uid, pool,dbname, uri2 = self.get_cr(uri)
if not dbname:
cr.close()
raise DAV_Error, 409
node = self.uri2object(cr,uid,pool, uri2[:-1])
if node:
node.create_child_collection(cr, uri2[-1])
cr.commit()
if not node:
cr.close()
raise DAV_Error(409, "Parent path %s does not exist" % uri2[:-1])
nc = node.child(cr, uri2[-1])
if nc:
cr.close()
raise DAV_Error(405, "Path already exists")
self._try_function(node.create_child_collection, (cr, uri2[-1]), "create col %s" % uri2[-1], cr=cr)
cr.commit()
cr.close()
return True
@@ -650,7 +655,6 @@ class openerp_dav_handler(dav_interface):
advanced systems we might also have to copy properties from
the source to the destination.
"""
print " copy a collection."
return self.mkcol(dst)
+12
View File
@@ -78,6 +78,18 @@ class DAVHandler(FixSendError,DAVRequestHandler):
self.baseuri = "http://%s:%d/"% (self.server.server_name, self.server.server_port)
self.IFACE_CLASS = openerp_dav_handler(self, self.verbose)
def copymove(self, CLASS):
""" Our uri scheme removes the /webdav/ component from there, so we
need to mangle the header, too.
"""
dest = self.headers['Destination']
up = urlparse.urlparse(urllib.unquote(self.headers['Destination']))
if up.path.startswith(self.davpath):
self.headers['Destination'] = up.path[len(self.davpath):]
else:
raise DAV_Forbidden("Not allowed to copy/move outside webdav path")
DAVRequestHandler.copymove(self, CLASS)
def get_davpath(self):
return self.davpath