[CalendarServer-changes] [7201] CalDAVTester/trunk/src
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 16 18:06:04 PDT 2011
Revision: 7201
http://trac.macosforge.org/projects/calendarserver/changeset/7201
Author: cdaboo at apple.com
Date: 2011-03-16 18:06:04 -0700 (Wed, 16 Mar 2011)
Log Message:
-----------
Allow for grabbing multiple elements.
Modified Paths:
--------------
CalDAVTester/trunk/src/caldavtest.py
CalDAVTester/trunk/src/request.py
Modified: CalDAVTester/trunk/src/caldavtest.py
===================================================================
--- CalDAVTester/trunk/src/caldavtest.py 2011-03-17 00:43:11 UTC (rev 7200)
+++ CalDAVTester/trunk/src/caldavtest.py 2011-03-17 01:06:04 UTC (rev 7201)
@@ -559,14 +559,18 @@
self.manager.server_info.addextrasubs({variable: propvalue.encode("utf-8")})
if req.grabelement:
- for elementpath, variable in req.grabelement:
+ for elementpath, variables in req.grabelement:
# grab the property here
- elementvalue = self.extractElement(elementpath, respdata)
- if elementvalue == None:
+ elementvalues = self.extractElements(elementpath, respdata)
+ if elementvalues == None:
result = False
- resulttxt += "\Element %s was not extracted from response\n" % (elementpath,)
+ resulttxt += "\nElement %s was not extracted from response\n" % (elementpath,)
+ elif len(variables) != len(elementvalues):
+ result = False
+ resulttxt += "\n%d found but expecting %d for element %s from response\n" % (len(elementvalues), len(variables), elementpath,)
else:
- self.manager.server_info.addextrasubs({variable: elementvalue.encode("utf-8")})
+ for variable, elementvalue in zip(variables, elementvalues):
+ self.manager.server_info.addextrasubs({variable: elementvalue.encode("utf-8") if elementvalue else ""})
return result, resulttxt, response, respdata
@@ -695,6 +699,32 @@
else:
return None
+ def extractElements(self, elementpath, respdata):
+
+ try:
+ tree = ElementTree()
+ tree.parse(StringIO(respdata))
+ except:
+ return None
+
+ # Strip off the top-level item
+ if elementpath[0] == '/':
+ elementpath = elementpath[1:]
+ splits = elementpath.split('/', 1)
+ root = splits[0]
+ if tree.getroot().tag != root:
+ return None
+ elif len(splits) == 1:
+ return tree.getroot().text
+ else:
+ elementpath = splits[1]
+
+ e = tree.findall(elementpath)
+ if e is not None:
+ return [item.text for item in e]
+ else:
+ return None
+
def postgresInit(self):
"""
Initialize postgres statement counter
Modified: CalDAVTester/trunk/src/request.py
===================================================================
--- CalDAVTester/trunk/src/request.py 2011-03-17 00:43:11 UTC (rev 7200)
+++ CalDAVTester/trunk/src/request.py 2011-03-17 01:06:04 UTC (rev 7201)
@@ -331,7 +331,7 @@
elif child.tag == src.xmlDefs.ELEMENT_GRABPROPERTY:
self.parseGrab(child, self.grabproperty)
elif child.tag == src.xmlDefs.ELEMENT_GRABELEMENT:
- self.parseGrab(child, self.grabelement)
+ self.parseMultiGrab(child, self.grabelement)
def parseFeatures(self, node, require=True):
for child in node.getchildren():
@@ -376,7 +376,22 @@
if (name is not None) and (variable is not None):
appendto.append((name, variable))
-
+
+ def parseMultiGrab(self, node, appendto):
+
+ name = None
+ variable = None
+ for child in node.getchildren():
+ if child.tag in (src.xmlDefs.ELEMENT_NAME, src.xmlDefs.ELEMENT_PROPERTY):
+ name = self.manager.server_info.subs(child.text.encode("utf-8"))
+ elif child.tag == src.xmlDefs.ELEMENT_VARIABLE:
+ if variable is None:
+ variable = []
+ variable.append(self.manager.server_info.subs(child.text.encode("utf-8")))
+
+ if (name is not None) and (variable is not None):
+ appendto.append((name, variable))
+
class data( object ):
"""
Represents the data/body portion of an HTTP request.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110316/164acd1e/attachment-0001.html>
More information about the calendarserver-changes
mailing list