def get_properties(client, object, props=[], depth=0): """ Find the properies `props` of object `object` and its children at maximum `depth` levels. (0 means only `object`). """ rc = {} body = "" # build the propfind request if len(props) > 0: prop = dav.Prop() + props root = dav.Propfind() + prop body = etree.tostring(root.xmlelement(), encoding="utf-8", xml_declaration=True) response = client.propfind(object.url.path, body, depth) # All items should be in a <D:response> element for r in response.tree.findall(dav.Response.tag): href = r.find(dav.Href.tag).text rc[href] = {} for p in props: t = r.find(".//" + p.tag) if t.text is None: val = t.find(".//*") if val is not None: val = val.tag else: val = None else: val = t.text rc[href][p.tag] = val return rc
def _query_properties(self, props=None, depth=0): """ This is an internal method for doing a propfind query. It's a result of code-refactoring work, attempting to consolidate similar-looking code into a common method. """ root = None # build the propfind request if props is not None and len(props) > 0: prop = dav.Prop() + props root = dav.Propfind() + prop return self._query(root, depth)
def _query_properties(self, props=[], depth=0): body = "" # build the propfind request if len(props) > 0: prop = dav.Prop() + props root = dav.Propfind() + prop body = etree.tostring(root.xmlelement(), encoding="utf-8", xml_declaration=True) ret = self.client.propfind(self.url, body, depth) if ret.status == 404: raise error.NotFoundError return ret