diff --git a/radicale/__init__.py b/radicale/__init__.py index 8461f9c..360c79b 100644 --- a/radicale/__init__.py +++ b/radicale/__init__.py @@ -154,7 +154,8 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler): def do_GET(self): """Manage GET request.""" self.do_HEAD() - self.wfile.write(self._answer) + if self._answer: + self.wfile.write(self._answer) @check_rights def do_HEAD(self): @@ -170,6 +171,7 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler): headers=self._calendar.headers, items=items) etag = item.etag else: + self._answer = None self.send_response(client.GONE) return else: diff --git a/radicale/xmlutils.py b/radicale/xmlutils.py index 9f05721..872757a 100644 --- a/radicale/xmlutils.py +++ b/radicale/xmlutils.py @@ -52,7 +52,8 @@ def _response(code): def name_from_path(path): """Return Radicale item name from ``path``.""" - return path.split("/")[-1] + path_parts = path.strip("/").split("/") + return path_parts[-1] if len(path_parts) > 2 else None def delete(path, calendar): @@ -97,22 +98,22 @@ def propfind(path, xml_request, calendar, depth, request): multistatus = ET.Element(_tag("D", "multistatus")) if depth == "0": - elements = [calendar] + items = [calendar] elif depth == "1": - elements = [calendar] + calendar.events + calendar.todos + items = [calendar] + calendar.events + calendar.todos else: # depth is infinity or not specified # we limit ourselves to depth == 1 - elements = [calendar] + calendar.events + calendar.todos + items = [calendar] + calendar.events + calendar.todos - for element in elements: - is_calendar = isinstance(element, ical.Calendar) + for item in items: + is_calendar = isinstance(item, ical.Calendar) response = ET.Element(_tag("D", "response")) multistatus.append(response) href = ET.Element(_tag("D", "href")) - href.text = path if is_calendar else "%s/%s" % (path, element.name) + href.text = path if is_calendar else "%s/%s" % (path, item.name) response.append(href) propstat = ET.Element(_tag("D", "propstat")) @@ -138,7 +139,7 @@ def propfind(path, xml_request, calendar, depth, request): elif tag == _tag("D", "getcontenttype"): element.text = "text/calendar" elif tag == _tag("D", "getetag"): - element.text = element.tag + element.text = item.etag elif tag == _tag("D", "displayname"): element.text = calendar.name elif tag == _tag("D", "supported-report-set"):