[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