From 28e643dec1440f738f33a02c58a1d2173c64e21b Mon Sep 17 00:00:00 2001 From: Unrud Date: Sat, 28 May 2016 22:46:20 +0200 Subject: [PATCH 1/2] Don't pass None to vobject.readComponents If an empty collections is created with PUT, content is None. --- radicale/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radicale/__init__.py b/radicale/__init__.py index fb23675..bf9e149 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -546,7 +546,7 @@ class Application: # Case 1: No item and no ETag precondition: Add new item # Case 2: Item and ETag precondition verified: Modify item # Case 3: Item and no Etag precondition: Force modifying item - items = list(vobject.readComponents(content)) + items = list(vobject.readComponents(content or "")) if items: if item: # PUT is modifying an existing item From 4861b798780375435e785b2558f0ef7e3e0ff5a0 Mon Sep 17 00:00:00 2001 From: Unrud Date: Sun, 29 May 2016 01:18:29 +0200 Subject: [PATCH 2/2] Allow creation of empty collection via PUT --- radicale/__init__.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) 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