Skip to content
Snippets Groups Projects
Commit 56730e0c authored by magicfelix's avatar magicfelix
Browse files

[DAV] Implement allprop

parent aa40ebe5
No related branches found
No related tags found
1 merge request!1147Implement read-only CalDAV and CardDAV
......@@ -602,32 +602,6 @@ class DAVResource(RegistryObject):
for ns, propname in cls.dav_live_props:
ElementTree.SubElement(prop, f"{{{ns}}}{propname}")
@classmethod
def _add_dav_props(
cls, prop: ElementTree.SubElement, props: Optional[list[tuple[str, str]]] = None
) -> None:
if props is None:
props = cls.dav_live_props
for ns, propname in props:
prop_ident = cls.dav_live_prop_methods.get((ns, propname), None)
if prop_ident is None:
prop_ident = propname.replace("-", "_").lower()
if not prop_ident.isidentifier():
prop_ident = None
if prop_ident is not None:
propfunc = getattr(cls, f"add_dav_prop_{prop_ident}", None)
else:
propfunc = None
if propfunc is not None:
propfunc(prop)
else:
raise NotImplementedError(
"Returning errors for included props is not supported yet"
)
@classmethod
def get_dav_objects(
cls, request: HttpRequest, objects: Optional[Iterable | QuerySet] = None
......@@ -745,13 +719,6 @@ class CalendarEventMixin(DAVResource, RegistryObject, is_registry=True):
dav_resource_types = ["{urn:ietf:params:xml:ns:caldav}calendar"]
dav_content_type = "text/calendar; charset=utf8; component=vevent"
@classmethod
def _add_dav_props(
cls, prop: ElementTree.SubElement, props: Optional[list[tuple[str, str]]] = None
) -> None:
if props is None or ("http://apple.com/ns/ical/", "calendar-color") in props:
color = ElementTree.SubElement(prop, "{http://apple.com/ns/ical/}calendar-color")
color.text = cls.get_color()
@classmethod
def get_verbose_name(cls, request: Optional[HttpRequest] = None) -> str:
......
......@@ -116,6 +116,7 @@ class DAVProp(ElementHandler):
class DAVPropname(ElementHandler):
name = "{DAV:}propname"
invisible = True
def process_xml(self, base: DAVMultistatus, response: DAVResponse = None):
base.current_xml = ElementTree.SubElement(base.current_xml, DAVProp.name)
......@@ -125,12 +126,23 @@ class DAVPropname(ElementHandler):
class DAVAllprop(ElementHandler):
name = "{DAV:}allprop"
invisible = True
def pre_handle(self):
for name in self.request.resource.dav_live_props:
self.request.startElementNS(name, None, {})
self.request.endElementNS(name, None)
def process(self, stage: str, base: DAVMultistatus, response: DAVResponse = None):
xml_element = base.current_xml.find(DAVProp.name)
if xml_element is not None:
base.current_xml = xml_element
super().process(stage, base, response)
def process_xml(self, base: DAVMultistatus, response: DAVResponse = None):
base.current_xml = ElementTree.SubElement(base.current_xml, DAVProp.name)
response.resource._add_dav_props(base.current_xml)
class Propfind(QueryBase, ElementHandler):
name = "{DAV:}propfind"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment