diff --git a/radicale/xmlutils.py b/radicale/xmlutils.py index 153e2c4..d7162f4 100644 --- a/radicale/xmlutils.py +++ b/radicale/xmlutils.py @@ -691,19 +691,15 @@ def _propfind_response(base_prefix, path, item, props, user, write=False, element.append(supported) elif is_collection: if tag == _tag("D", "getcontenttype"): - item_tag = item.get_meta("tag") - if item_tag: - element.text = MIMETYPES[item_tag] + if is_leaf: + element.text = MIMETYPES[item.get_meta("tag")] else: is404 = True elif tag == _tag("D", "resourcetype"): if item.is_principal: tag = ET.Element(_tag("D", "principal")) element.append(tag) - item_tag = item.get_meta("tag") - if is_leaf or item_tag: - # 2nd case happens when the collection is not stored yet, - # but the resource type is guessed + if is_leaf: if item.get_meta("tag") == "VADDRESSBOOK": tag = ET.Element(_tag("CR", "addressbook")) element.append(tag) @@ -829,27 +825,24 @@ def report(base_prefix, path, xml_request, collection): [prop.tag for prop in prop_element] if prop_element is not None else []) - if collection: - if root.tag in ( - _tag("C", "calendar-multiget"), - _tag("CR", "addressbook-multiget")): - # Read rfc4791-7.9 for info - hreferences = set() - for href_element in root.findall(_tag("D", "href")): - href_path = storage.sanitize_path( - unquote(urlparse(href_element.text).path)) - if (href_path + "/").startswith(base_prefix + "/"): - hreferences.add(href_path[len(base_prefix):]) - else: - collection.logger.info( - "Skipping invalid path: %s", href_path) - else: - hreferences = (path,) - filters = ( - root.findall(".//%s" % _tag("C", "filter")) + - root.findall(".//%s" % _tag("CR", "filter"))) + if root.tag in ( + _tag("C", "calendar-multiget"), + _tag("CR", "addressbook-multiget")): + # Read rfc4791-7.9 for info + hreferences = set() + for href_element in root.findall(_tag("D", "href")): + href_path = storage.sanitize_path( + unquote(urlparse(href_element.text).path)) + if (href_path + "/").startswith(base_prefix + "/"): + hreferences.add(href_path[len(base_prefix):]) + else: + collection.logger.info( + "Skipping invalid path: %s", href_path) else: - hreferences = filters = () + hreferences = (path,) + filters = ( + root.findall(".//%s" % _tag("C", "filter")) + + root.findall(".//%s" % _tag("CR", "filter"))) multistatus = ET.Element(_tag("D", "multistatus"))