diff --git a/radicale/__init__.py b/radicale/__init__.py index bf9e149..6c73b12 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -547,20 +547,25 @@ class Application: # Case 2: Item and ETag precondition verified: Modify item # Case 3: Item and no Etag precondition: Force modifying item items = list(vobject.readComponents(content or "")) - if items: - if item: - # PUT is modifying an existing item + if item: + # PUT is modifying an existing item + if items: new_item = collection.update(item_name, items[0]) - elif item_name: - # PUT is adding a new item + else: + new_item = None + elif item_name: + # PUT is adding a new item + if items: new_item = collection.upload(item_name, items[0]) else: - # PUT is replacing the whole collection - collection.delete() - new_item = self.Collection.create_collection( - environ["PATH_INFO"], items) - if new_item: - headers["ETag"] = new_item.etag + new_item = None + else: + # PUT is replacing the whole collection + collection.delete() + new_item = self.Collection.create_collection( + environ["PATH_INFO"], items) + if new_item: + headers["ETag"] = new_item.etag status = client.CREATED else: # PUT rejected in all other cases