Single <D:propstat> element in PROPPATCH response
Instead of multiple elements with the same status
This commit is contained in:
parent
7642d72919
commit
1fe011020b
@ -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…
x
Reference in New Issue
Block a user