def test_DepthInfinityHeaders(self): server = Session("www.example.com") request = PropFind(server, "/", headers.DepthInfinity, (davxml.getetag, QName("http://example.com/ns/", "taggy"))) hdrs = request.generateRequestHeader() self.assertFalse("Depth: 0" in hdrs) self.assertFalse("Depth: 1" in hdrs) self.assertTrue("Depth: infinity" in hdrs)
def testResource(self, rurl): assert(isinstance(rurl, URL)) request = PropFind(self, rurl.relativeURL(), headers.Depth0, (davxml.resourcetype,)) # Process it self.runSession(request) return request.getStatusCode() == statuscodes.MultiStatus
def testResource(self, rurl): assert (isinstance(rurl, URL)) request = PropFind(self, rurl.relativeURL(), headers.Depth0, (davxml.resourcetype, )) # Process it self.runSession(request) return request.getStatusCode() == statuscodes.MultiStatus
def test_GenerateXML(self): server = Session("www.example.com") request = PropFind(server, "/", headers.Depth0, (davxml.getetag, QName("http://example.com/ns/", "taggy"))) os = StringIO() request.generateXML(os) self.assertEqual(os.getvalue(), """<?xml version='1.0' encoding='utf-8'?> <ns0:propfind xmlns:ns0="DAV:"> <ns0:prop> <ns0:getetag /> <ns1:taggy xmlns:ns1="http://example.com/ns/" /> </ns0:prop> </ns0:propfind> """.replace("\n", "\r\n") )
def getProperties(self, rurl, props, xmldata=False): assert(isinstance(rurl, URL)) results = {} bad = None # Create WebDAV propfind if props: request = PropFind(self, rurl.relativeURL(), headers.Depth0, props) else: request = PropAll(self, rurl.relativeURL(), headers.Depth0) result = ResponseDataString() request.setOutput(result) # Process it self.runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: parser = PropFindParser() parser.parseData(result.getData()) # Look at each propfind result for item in parser.getResults().itervalues(): # Get child element name (decode URL) name = URL(url=item.getResource(), decode=True) # Must match rurl if name.equalRelative(rurl): for name, value in item.getTextProperties().iteritems(): results[name] = value for name, value in item.getHrefProperties().iteritems(): if name not in results: results[name] = value for name, value in item.getNodeProperties().iteritems(): if name not in results: results[name] = tostring(value) if xmldata else value bad = item.getBadProperties() else: self.handleHTTPError(request) return results, bad
def getHrefListProperty(self, rurl, propname): assert (isinstance(rurl, URL)) results = () # Create WebDAV propfind request = PropFind(self, rurl.relativeURL(), headers.Depth0, (propname, )) result = ResponseDataString() request.setOutput(result) # Process it self.runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: parser = PropFindParser() parser.parseData(result.getData()) # Look at each propfind result and extract any Hrefs for item in parser.getResults().itervalues(): # Get child element name (decode URL) name = URL(url=item.getResource(), decode=True) # Must match the URL the request was actually targeted at if name.equalRelative(URL(url=request.url)): if str(propname) in item.getNodeProperties(): propnode = item.getNodeProperties()[str(propname)] results += tuple([ URL(url=href.text, decode=True) for href in propnode.findall(str(davxml.href)) if href.text ]) else: self.handleHTTPError(request) return results
def doRequest(self): """ Execute the actual HTTP request. """ props = ( csxml.invite, ) # Create WebDAV propfind request = PropFind(self.sessions[0], self.sessions[0].calendarHref, self.depth, props) result = ResponseDataString() request.setOutput(result) # Process it self.sessions[0].runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: pass else: raise RuntimeError("Propfind request failed: %s" % (request.getStatusCode(),))
def getPropertiesOnHierarchy(self, rurl, props): assert (isinstance(rurl, URL)) results = {} # Create WebDAV propfind request = PropFind(self, rurl.relativeURL(), headers.Depth1, props) result = ResponseDataString() request.setOutput(result) # Process it self.runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: parser = PropFindParser() parser.parseData(result.getData()) # Look at each propfind result for item in parser.getResults().itervalues(): # Get child element name (decode URL) name = URL(url=item.getResource(), decode=True) propresults = {} results[name.relativeURL()] = propresults for prop in props: if str(prop) in item.getTextProperties(): propresults[prop] = item.getTextProperties().get( str(prop)) elif str(prop) in item.getNodeProperties(): propresults[prop] = item.getNodeProperties()[str(prop)] else: self.handleHTTPError(request) return results
def getPropertiesOnHierarchy(self, rurl, props): assert(isinstance(rurl, URL)) results = {} # Create WebDAV propfind request = PropFind(self, rurl.relativeURL(), headers.Depth1, props) result = ResponseDataString() request.setOutput(result) # Process it self.runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: parser = PropFindParser() parser.parseData(result.getData()) # Look at each propfind result for item in parser.getResults().itervalues(): # Get child element name (decode URL) name = URL(url=item.getResource(), decode=True) propresults = {} results[name.relativeURL()] = propresults for prop in props: if str(prop) in item.getTextProperties(): propresults[prop] = item.getTextProperties().get(str(prop)) elif str(prop) in item.getNodeProperties(): propresults[prop] = item.getNodeProperties()[str(prop)] else: self.handleHTTPError(request) return results
def getHrefListProperty(self, rurl, propname): assert(isinstance(rurl, URL)) results = () # Create WebDAV propfind request = PropFind(self, rurl.relativeURL(), headers.Depth0, (propname,)) result = ResponseDataString() request.setOutput(result) # Process it self.runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: parser = PropFindParser() parser.parseData(result.getData()) # Look at each propfind result and extract any Hrefs for item in parser.getResults().itervalues(): # Get child element name (decode URL) name = URL(url=item.getResource(), decode=True) # Must match rurl if name.equalRelative(rurl): if str(propname) in item.getNodeProperties(): propnode = item.getNodeProperties()[str(propname)] results += tuple([URL(url=href.text, decode=True) for href in propnode.findall(str(davxml.href)) if href.text]) else: self.handleHTTPError(request) return results
def getProperties(self, rurl, props, xmldata=False): assert (isinstance(rurl, URL)) results = {} bad = None # Create WebDAV propfind if props: request = PropFind(self, rurl.relativeURL(), headers.Depth0, props) else: request = PropAll(self, rurl.relativeURL(), headers.Depth0) result = ResponseDataString() request.setOutput(result) # Process it self.runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: parser = PropFindParser() parser.parseData(result.getData()) # Look at each propfind result for item in parser.getResults().itervalues(): # Get child element name (decode URL) name = URL(url=item.getResource(), decode=True) # Must match rurl if name.equalRelative(rurl): for name, value in item.getTextProperties().iteritems(): results[name] = value for name, value in item.getHrefProperties().iteritems(): if name not in results: results[name] = value for name, value in item.getNodeProperties().iteritems(): if name not in results: results[name] = tostring( value) if xmldata else value bad = item.getBadProperties() else: self.handleHTTPError(request) return results, bad
def doRequest(self): """ Execute the actual HTTP request. """ props = (csxml.invite, ) # Create WebDAV propfind request = PropFind(self.sessions[0], self.sessions[0].calendarHref, self.depth, props) result = ResponseDataString() request.setOutput(result) # Process it self.sessions[0].runSession(request) # If its a 207 we want to parse the XML if request.getStatusCode() == statuscodes.MultiStatus: pass else: raise RuntimeError("Propfind request failed: %s" % (request.getStatusCode(), ))
def test_Method(self): server = Session("www.example.com") request = PropFind(server, "/", headers.Depth0, (davxml.getetag, QName("http://example.com/ns/", "taggy"))) self.assertEqual(request.getMethod(), "PROPFIND")