mirror of
https://github.com/Kozea/Radicale.git
synced 2025-06-26 16:45:52 +00:00
Single <D:propstat> element in PROPPATCH response
Instead of multiple elements with the same status
This commit is contained in:
parent
7831ba3e37
commit
4ff3f545cc
1 changed files with 11 additions and 25 deletions
|
@ -27,29 +27,6 @@ from radicale import storage, xmlutils
|
||||||
from radicale.log import logger
|
from radicale.log import logger
|
||||||
|
|
||||||
|
|
||||||
def xml_add_propstat_to(element, tag, status_number):
|
|
||||||
"""Add a PROPSTAT response structure to an element.
|
|
||||||
|
|
||||||
The PROPSTAT answer structure is defined in rfc4918-9.1. It is added to the
|
|
||||||
given ``element``, for the following ``tag`` with the given
|
|
||||||
``status_number``.
|
|
||||||
|
|
||||||
"""
|
|
||||||
propstat = ET.Element(xmlutils.make_clark("D:propstat"))
|
|
||||||
element.append(propstat)
|
|
||||||
|
|
||||||
prop = ET.Element(xmlutils.make_clark("D:prop"))
|
|
||||||
propstat.append(prop)
|
|
||||||
|
|
||||||
clark_tag = xmlutils.make_clark(tag)
|
|
||||||
prop_tag = ET.Element(clark_tag)
|
|
||||||
prop.append(prop_tag)
|
|
||||||
|
|
||||||
status = ET.Element(xmlutils.make_clark("D:status"))
|
|
||||||
status.text = xmlutils.make_response(status_number)
|
|
||||||
propstat.append(status)
|
|
||||||
|
|
||||||
|
|
||||||
def xml_proppatch(base_prefix, path, xml_request, collection):
|
def xml_proppatch(base_prefix, path, xml_request, collection):
|
||||||
"""Read and answer PROPPATCH requests.
|
"""Read and answer PROPPATCH requests.
|
||||||
|
|
||||||
|
@ -68,16 +45,25 @@ def xml_proppatch(base_prefix, path, xml_request, collection):
|
||||||
href.text = xmlutils.make_href(base_prefix, path)
|
href.text = xmlutils.make_href(base_prefix, path)
|
||||||
response.append(href)
|
response.append(href)
|
||||||
|
|
||||||
|
# Create D:propstat element for props with status 200 OK
|
||||||
|
propstat = ET.Element(xmlutils.make_clark("D:propstat"))
|
||||||
|
status = ET.Element(xmlutils.make_clark("D:status"))
|
||||||
|
status.text = xmlutils.make_response(200)
|
||||||
|
props_ok = ET.Element(xmlutils.make_clark("D:prop"))
|
||||||
|
propstat.append(props_ok)
|
||||||
|
propstat.append(status)
|
||||||
|
response.append(propstat)
|
||||||
|
|
||||||
new_props = collection.get_meta()
|
new_props = collection.get_meta()
|
||||||
for short_name, value in props_to_set.items():
|
for short_name, value in props_to_set.items():
|
||||||
new_props[short_name] = value
|
new_props[short_name] = value
|
||||||
xml_add_propstat_to(response, short_name, 200)
|
props_ok.append(ET.Element(xmlutils.make_clark(short_name)))
|
||||||
for short_name in props_to_remove:
|
for short_name in props_to_remove:
|
||||||
try:
|
try:
|
||||||
del new_props[short_name]
|
del new_props[short_name]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
xml_add_propstat_to(response, short_name, 200)
|
props_ok.append(ET.Element(xmlutils.make_clark(short_name)))
|
||||||
radicale_item.check_and_sanitize_props(new_props)
|
radicale_item.check_and_sanitize_props(new_props)
|
||||||
collection.set_meta(new_props)
|
collection.set_meta(new_props)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue