[CalendarServer-changes] [10083] CalDAVTester/branches/users/cdaboo/managed-attachments
source_changes at macosforge.org
source_changes at macosforge.org
Mon Nov 26 14:03:14 PST 2012
Revision: 10083
http://trac.calendarserver.org//changeset/10083
Author: cdaboo at apple.com
Date: 2012-11-26 14:03:13 -0800 (Mon, 26 Nov 2012)
Log Message:
-----------
Add options to grab calendar data property and parameter values into variables.
Modified Paths:
--------------
CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/caldavtest.dtd
CalDAVTester/branches/users/cdaboo/managed-attachments/src/caldavtest.py
CalDAVTester/branches/users/cdaboo/managed-attachments/src/request.py
CalDAVTester/branches/users/cdaboo/managed-attachments/src/xmlDefs.py
CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/calendarDataMatch.py
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/caldavtest.dtd
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/caldavtest.dtd 2012-11-18 01:54:18 UTC (rev 10082)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/scripts/tests/CalDAV/caldavtest.dtd 2012-11-26 22:03:13 UTC (rev 10083)
@@ -29,7 +29,8 @@
<!ELEMENT pause EMPTY>
- <!ELEMENT request (require-feature?, exclude-feature?, method, ruri*, header*, data?, verify*, graburi?, grabheader*, grabproperty*, grabelement*)>
+ <!ELEMENT request (require-feature?, exclude-feature?, method, ruri*, header*, data?, verify*,
+ graburi?, grabheader*, grabproperty*, grabelement*, grabcalproperty*, grabcalparameter*)>
<!ATTLIST request auth (yes|no) "yes"
user CDATA ""
pswd CDATA ""
@@ -62,6 +63,9 @@
<!ELEMENT grabelement (name, variable+)>
+ <!ELEMENT grabcalproperty (name, variable)>
+ <!ELEMENT grabcalparameter (name, variable)>
+
<!ELEMENT test-suite (require-feature?, exclude-feature?, test*)>
<!ATTLIST test-suite name CDATA #REQUIRED
ignore (yes|no) "no"
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/src/caldavtest.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/src/caldavtest.py 2012-11-18 01:54:18 UTC (rev 10082)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/caldavtest.py 2012-11-26 22:03:13 UTC (rev 10083)
@@ -19,6 +19,7 @@
"""
from cStringIO import StringIO
+from pycalendar.calendar import PyCalendar
from src.httpshandler import SmartHTTPConnection
from src.manager import manager
from src.request import data, pause
@@ -614,6 +615,26 @@
for variable, elementvalue in zip(variables, elementvalues):
self.manager.server_info.addextrasubs({variable: elementvalue.encode("utf-8") if elementvalue else ""})
+ if req.grabcalprop:
+ for propname, variable in req.grabcalprop:
+ # grab the property here
+ propvalue = self.extractCalProperty(propname, respdata)
+ if propvalue == None:
+ result = False
+ resulttxt += "\nCalendar property %s was not extracted from response\n" % (propname,)
+ else:
+ self.manager.server_info.addextrasubs({variable: propvalue.encode("utf-8")})
+
+ if req.grabcalparam:
+ for paramname, variable in req.grabcalparam:
+ # grab the property here
+ paramvalue = self.extractCalParameter(paramname, respdata)
+ if paramvalue == None:
+ result = False
+ resulttxt += "\nCalendar Parameter %s was not extracted from response\n" % (paramname,)
+ else:
+ self.manager.server_info.addextrasubs({variable: paramvalue.encode("utf-8")})
+
return result, resulttxt, response, respdata
@@ -777,6 +798,57 @@
return None
+ def extractCalProperty(self, propertyname, respdata):
+
+ prop = self._calProperty(propertyname, respdata)
+ return prop.getValue().getValue() if prop else None
+
+
+ def extractCalParameter(self, parametername, respdata):
+
+ # propname is a path consisting of component names and the last one a property name
+ # e.g. VEVENT/ATTACH
+ bits = parametername.split("/")
+ propertyname = "/".join(bits[:-1])
+ pname = bits[-1]
+
+ prop = self._calProperty(propertyname, respdata)
+
+ try:
+ return prop.getAttributeValue(pname) if prop else None
+ except KeyError:
+ return None
+
+
+ def _calProperty(self, propertyname, respdata):
+
+ try:
+ cal = PyCalendar.parseText(respdata)
+ except Exception:
+ return None
+
+ # propname is a path consisting of component names and the last one a property name
+ # e.g. VEVENT/ATTACH
+ bits = propertyname.split("/")
+ components = bits[:-1]
+ pname = bits[-1]
+
+ while components:
+ for c in cal.getComponents():
+ if c.getType() == components[0]:
+ cal = c
+ components = components[1:]
+ break
+ else:
+ break
+
+ if components:
+ return None
+
+ props = cal.getProperties(pname)
+ return props[0] if props else None
+
+
def postgresInit(self):
"""
Initialize postgres statement counter
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/src/request.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/src/request.py 2012-11-18 01:54:18 UTC (rev 10082)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/request.py 2012-11-26 22:03:13 UTC (rev 10083)
@@ -135,7 +135,7 @@
class request(object):
"""
- Represents the HTTP request to be executed, and verifcation information to
+ Represents the HTTP request to be executed, and verification information to
be used to determine a satisfactory output or not.
"""
@@ -160,6 +160,8 @@
self.grabheader = []
self.grabproperty = []
self.grabelement = []
+ self.grabcalprop = []
+ self.grabcalparam = []
def __str__(self):
@@ -350,6 +352,10 @@
self.parseGrab(child, self.grabproperty)
elif child.tag == src.xmlDefs.ELEMENT_GRABELEMENT:
self.parseMultiGrab(child, self.grabelement)
+ elif child.tag == src.xmlDefs.ELEMENT_GRABCALPROP:
+ self.parseGrab(child, self.grabcalprop)
+ elif child.tag == src.xmlDefs.ELEMENT_GRABCALPARAM:
+ self.parseGrab(child, self.grabcalparam)
def parseFeatures(self, node, require=True):
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/src/xmlDefs.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/src/xmlDefs.py 2012-11-18 01:54:18 UTC (rev 10082)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/src/xmlDefs.py 2012-11-26 22:03:13 UTC (rev 10083)
@@ -30,6 +30,8 @@
ELEMENT_FEATURES = "features"
ELEMENT_FEATURE = "feature"
ELEMENT_FILEPATH = "filepath"
+ELEMENT_GRABCALPROP = "grabcalproperty"
+ELEMENT_GRABCALPARAM = "grabcalparameter"
ELEMENT_GRABELEMENT = "grabelement"
ELEMENT_GRABHEADER = "grabheader"
ELEMENT_GRABPROPERTY = "grabproperty"
Modified: CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/calendarDataMatch.py 2012-11-18 01:54:18 UTC (rev 10082)
+++ CalDAVTester/branches/users/cdaboo/managed-attachments/verifiers/calendarDataMatch.py 2012-11-26 22:03:13 UTC (rev 10083)
@@ -68,7 +68,7 @@
if data is None:
return False, " Could not read data file"
- data = manager.server_info.subs(data)
+ data = manager.server_info.extrasubs(manager.server_info.subs(data))
def removePropertiesParameters(component):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121126/60969182/attachment.html>
More information about the calendarserver-changes
mailing list