def propfind(self, request, path, xbody=None, *args, **kwargs): if not self.has_access(self.resource, 'read'): return HttpResponseForbidden() if not self.resource.exists: return HttpResponseNotFound() if not self.get_access(self.resource): return HttpResponseForbidden() get_all_props, get_prop, get_prop_names = True, False, False if xbody: get_prop = [p.xpath('local-name()') for p in xbody('/D:propfind/D:prop/*')] get_all_props = xbody('/D:propfind/D:allprop') get_prop_names = xbody('/D:propfind/D:propname') if int(bool(get_prop)) + int(bool(get_all_props)) + int(bool(get_prop_names)) != 1: return HttpResponseBadRequest() children = self.resource.get_descendants(depth=self.get_depth(), include_self=True) if get_prop_names: responses = [ D.response( D.href(url_join(self.base_url, child.get_escaped_path())), D.propstat( D.prop(*[ D(name) for name in child.ALL_PROPS ]), D.status('HTTP/1.1 200 OK'), ), ) for child in children ] else: responses = [ D.response( D.href(url_join(self.base_url, child.get_escaped_path())), D.propstat( D.prop( *get_property_tag_list(child, *(get_prop if get_prop else child.ALL_PROPS)) ), D.status('HTTP/1.1 200 OK'), ), ) for child in children ] body = D.multistatus(*responses) response = HttpResponseMultiStatus(etree.tostring(body, pretty_print=True, xml_declaration=True, encoding='utf-8')) return response
def propfind(self, request, path, xbody=None, *args, **kwargs): if not self.has_access(self.resource, 'read'): return self.no_access() if not self.resource.exists: raise Http404("Resource doesn't exists") if not self.get_access(self.resource): return self.no_access() get_all_props, get_prop, get_prop_names = True, False, False if xbody: get_prop = [p.xpath('local-name()') for p in xbody('/D:propfind/D:prop/*')] get_all_props = xbody('/D:propfind/D:allprop') get_prop_names = xbody('/D:propfind/D:propname') if int(bool(get_prop)) + int(bool(get_all_props)) + int(bool(get_prop_names)) != 1: return HttpResponseBadRequest() children = self.resource.get_descendants(depth=self.get_depth()) if get_prop_names: responses = [ D.response( D.href(url_join(self.base_url, child.get_escaped_path())), D.propstat( D.prop(*[ D(name) for name in child.ALL_PROPS ]), D.status('HTTP/1.1 200 OK'), ), ) for child in children ] else: responses = [ D.response( D.href(url_join(self.base_url, child.get_escaped_path())), D.propstat( D.prop( *get_property_tag_list(child, *(get_prop if get_prop else child.ALL_PROPS)) ), D.status('HTTP/1.1 200 OK'), ), ) for child in children ] body = D.multistatus(*responses) return self.build_xml_response(body, HttpResponseMultiStatus)
def propfind(self, request, path, xbody=None, *args, **kwargs): if not self.has_access(self.resource, 'read'): return self.no_access() if not self.resource.exists: raise Http404("Resource doesn't exists") if not self.get_access(self.resource): return self.no_access() get_all_props, get_prop, get_prop_names = True, False, False if xbody: get_prop = [ p.xpath('local-name()') for p in xbody('/D:propfind/D:prop/*') ] get_all_props = xbody('/D:propfind/D:allprop') get_prop_names = xbody('/D:propfind/D:propname') if int(bool(get_prop)) + int(bool(get_all_props)) + int( bool(get_prop_names)) != 1: return HttpResponseBadRequest() children = self.resource.get_descendants(depth=self.get_depth()) if get_prop_names: responses = [ D.response( D.href(url_join(self.base_url, child.get_escaped_path())), D.propstat( D.prop(*[D(name) for name in child.ALL_PROPS]), D.status('HTTP/1.1 200 OK'), ), ) for child in children ] else: responses = [ D.response( D.href(url_join(self.base_url, child.get_escaped_path())), D.propstat( D.prop(*get_property_tag_list( child, *( get_prop if get_prop else child.ALL_PROPS))), D.status('HTTP/1.1 200 OK'), ), ) for child in children ] body = D.multistatus(*responses) return self.build_xml_response(body, HttpResponseMultiStatus)