From 17ff22cae451493aac12635447a784cb3a3b859d Mon Sep 17 00:00:00 2001 From: Unrud Date: Sat, 6 Aug 2016 04:45:44 +0200 Subject: [PATCH] Support replacing in MOVE method --- radicale/__init__.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/radicale/__init__.py b/radicale/__init__.py index 2416ce4..b7b70c7 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -486,15 +486,22 @@ class Application: return client.CONFLICT, {}, None to_item = next(self.Collection.discover(to_path), None) + if (isinstance(to_item, self.Collection) or + to_item and environ.get("HTTP_OVERWRITE", "F") != "T"): + return client.CONFLICT, {}, None to_parent_path = storage.sanitize_path( "/%s/" % posixpath.dirname(to_path.strip("/"))) to_collection = next( self.Collection.discover(to_parent_path), None) - if not to_collection or to_item: + if not to_collection: return client.CONFLICT, {}, None to_href = posixpath.basename(to_path.strip("/")) - to_collection.upload(to_href, item.item) - item.collection.delete(item.href) + if path.strip("/") != to_path.strip("/"): + if to_item: + to_collection.update(to_href, item.item) + else: + to_collection.upload(to_href, item.item) + item.collection.delete(item.href) return client.CREATED, {}, None def do_OPTIONS(self, environ, path, content, user):