diff --git a/radicale/storage.py b/radicale/storage.py index 97f168a..b8cb7bb 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -580,21 +580,17 @@ class Collection(BaseCollection): if href is None: # Delete the collection if os.path.isdir(self._filesystem_path): + parent_dir = os.path.dirname(self._filesystem_path) try: os.rmdir(self._filesystem_path) except OSError: - while True: - tmp_filesystem_path = os.path.join( - os.path.dirname(self._filesystem_path), - ".Radicale.tmp-" + hex(getrandbits(32))[2:]) - if not os.path.exists(tmp_filesystem_path): - break - os.rename(self._filesystem_path, tmp_filesystem_path) - sync_directory(os.path.dirname(self._filesystem_path)) - # Deferred because it might take a long time - shutil.rmtree(tmp_filesystem_path) + with TemporaryDirectory(prefix=".Radicale.tmp-", + dir=parent_dir) as tmp_dir: + os.rename(self._filesystem_path, os.path.join( + tmp_dir, os.path.basename(self._filesystem_path))) + sync_directory(parent_dir) else: - sync_directory(os.path.dirname(self._filesystem_path)) + sync_directory(parent_dir) else: # Delete an item if not is_safe_filesystem_path_component(href):