From 0675328a026b7882c68ff531783a0483da05e97f Mon Sep 17 00:00:00 2001 From: Unrud Date: Mon, 8 Aug 2016 06:08:01 +0200 Subject: [PATCH] Replace collection in Collection.create_collection --- radicale/storage.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/radicale/storage.py b/radicale/storage.py index f0de7cc..2af4bac 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -294,6 +294,10 @@ class BaseCollection: def create_collection(cls, href, collection=None, props=None): """Create a collection. + If the collection already exists and neither ``collection`` nor + ``props`` are set, this method shouldn't do anything. Otherwise the + existing collection must be replaced. + ``collection`` is a list of vobject components. ``props`` are metadata values for the collection. @@ -551,6 +555,11 @@ class Collection(BaseCollection): for card in collection: self.upload(self._find_available_file_name(), card) + # This operation is not atomic on the filesystem level but it's + # very unlikely that one rename operations succeeds while the + # other fails or that only one gets written to disk. + if os.path.exists(filesystem_path): + os.rename(filesystem_path, os.path.join(tmp_dir, "delete")) os.rename(tmp_filesystem_path, filesystem_path) sync_directory(parent_dir)