[CalendarServer-changes] [7231] CalDAVTester/branches/users/cdaboo/pycard

source_changes at macosforge.org source_changes at macosforge.org
Mon Mar 21 20:27:14 PDT 2011


Revision: 7231
          http://trac.macosforge.org/projects/calendarserver/changeset/7231
Author:   cdaboo at apple.com
Date:     2011-03-21 20:27:13 -0700 (Mon, 21 Mar 2011)
Log Message:
-----------
Tweaks for pycalendar vcard support.

Modified Paths:
--------------
    CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf
    CalDAVTester/branches/users/cdaboo/pycard/run.py
    CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py
    CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py

Modified: CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf	2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/Resource/CardDAV/verrors/2.vcf	2011-03-22 03:27:13 UTC (rev 7231)
@@ -1,4 +1,4 @@
-BEGIN:XCARD
+BEGIN:VCARD
 VERSION:3.0
 N:Contact;Mulberry;;;
 FN:Mulberry Contact
@@ -13,5 +13,4 @@
 NOTE:This is a contact created in Mulberry.
 item2.URL;type=pref:http://www.example.com/~magic
 item2.X-ABLabel:_$!<HomePage>!$_
-UID:782DAAF92CB1ED1BC155CDB3 at D76FAF7B10D9E8D2D41F779D
-END:XCARD
+END:VCARD

Modified: CalDAVTester/branches/users/cdaboo/pycard/run.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/run.py	2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/run.py	2011-03-22 03:27:13 UTC (rev 7231)
@@ -32,8 +32,7 @@
 svn = "/usr/bin/svn"
 
 packages = [
-    ("vobject", "vobject", "http://svn.osafoundation.org/vobject/trunk", "218"),
-    #("vobject", "vobject", "svn+ssh://cdaboo@svn.osafoundation.org/svn/vobject/trunk", "218"),
+    ("pycalendar", "pycalendar/src", "http://svn.mulberrymail.com/repos/PyCalendar/branches/server", "146"),
     ("xattr", "xattr/build/lib.%s-%s" % (get_platform(),get_python_version()), "http://svn.red-bean.com/bob/xattr/releases/xattr-0.5", "1013"),
 ]
 

Modified: CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py	2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/verifiers/addressDataMatch.py	2011-03-22 03:27:13 UTC (rev 7231)
@@ -14,13 +14,11 @@
 # limitations under the License.
 ##
 
-from vobject.base import readOne, ContentLine
-from vobject.base import Component
 from difflib import unified_diff
-import StringIO
+from pycalendar.vcard.card import Card
 
 """
-Verifier that checks the response body for an exact match to data in a file.
+Verifier that checks the response body for a semantic match to data in a file.
 """
 
 class Verifier(object):
@@ -28,15 +26,12 @@
     def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
         # Get arguments
         files = args.get("filepath", [])
+        carddata = args.get("data", [])
         filters = args.get("filter", [])
         
-        if "EMAIL parameter" not in manager.server_info.features:
-            filters.append("ATTENDEE:EMAIL") 
-            filters.append("ORGANIZER:EMAIL")
-        filters.append("CALSCALE")
+        # Always remove these
         filters.append("PRODID")
-        filters.append("CREATED")
-        filters.append("LAST-MODIFIED")
+        filters.append("REV")
  
         # status code must be 200, 207
         if response.status not in (200,207):
@@ -47,18 +42,21 @@
             return False, "        No response body"
         
         # look for one file
-        if len(files) != 1:
+        if len(files) != 1 and len(carddata) != 1:
             return False, "        No file to compare response to"
         
-        # read in all data from specified file
-        fd = open( files[0], "r" )
-        try:
+        # read in all data from specified file or use provided data
+        if len(files):
+            fd = open( files[0], "r" )
             try:
-                data = fd.read()
-            finally:
-                fd.close()
-        except:
-            data = None
+                try:
+                    data = fd.read()
+                finally:
+                    fd.close()
+            except:
+                data = None
+        else:
+            data = carddata[0] if len(carddata) else None
 
         if data is None:
             return False, "        Could not read data file"
@@ -67,38 +65,28 @@
         
         def removePropertiesParameters(component):
             
-            for item in tuple(component.getChildren()):
-                if isinstance(item, Component):
-                    removePropertiesParameters(item)
-                elif isinstance(item, ContentLine):
-                    
-                    # Always remove DTSTAMP
-                    if item.name == "DTSTAMP":
-                        component.remove(item)
-                    elif item.name == "X-CALENDARSERVER-ATTENDEE-COMMENT":
-                        if item.params.has_key("X-CALENDARSERVER-DTSTAMP"):
-                            item.params["X-CALENDARSERVER-DTSTAMP"] = ["20080101T000000Z"]
-                            
-                    for filter in filters:
-                        if ":" in filter:
-                            property, parameter = filter.split(":")
-                            if item.name == property:
-                                if item.params.has_key(parameter):
-                                    del item.params[parameter]
-                        else:
-                            if item.name == filter:
-                                component.remove(item)
+            allProps = []
+            for properties in component.getProperties().itervalues():
+                allProps.extend(properties)
+            for property in allProps:                                            
+                for filter in filters:
+                    if ":" in filter:
+                        propname, parameter = filter.split(":")
+                        if property.getName() == propname:
+                            if property.hasAttribute(parameter):
+                                property.removeAttributes(parameter)
+                    else:
+                        if property.getName() == filter:
+                            component.removeProperty(property)
 
-        s = StringIO.StringIO(respdata)
         try:
-            resp_calendar = readOne(s)
-            removePropertiesParameters(resp_calendar)
-            respdata = resp_calendar.serialize()
+            resp_adbk = Card.parseText(respdata)
+            removePropertiesParameters(resp_adbk)
+            respdata = resp_adbk.getText()
             
-            s = StringIO.StringIO(data)
-            data_calendar = readOne(s)
-            removePropertiesParameters(data_calendar)
-            data = data_calendar.serialize()
+            data_adbk = Card.parseText(data)
+            removePropertiesParameters(data_adbk)
+            data = data_adbk.getText()
             
             result = respdata == data
                     
@@ -108,4 +96,4 @@
                 error_diff = "\n".join([line for line in unified_diff(data.split("\n"), respdata.split("\n"))])
                 return False, "        Response data does not exactly match file data%s" % (error_diff,)
         except Exception, e:
-            return False, "        Response data is not calendar data data: %s" % (e,)
+            return False, "        Response data is not address data: %s" % (e,)

Modified: CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py	2011-03-22 03:03:23 UTC (rev 7230)
+++ CalDAVTester/branches/users/cdaboo/pycard/verifiers/calendarDataMatch.py	2011-03-22 03:27:13 UTC (rev 7231)
@@ -19,7 +19,7 @@
 from pycalendar.attribute import PyCalendarAttribute
 
 """
-Verifier that checks the response body for an exact match to data in a file.
+Verifier that checks the response body for a semantic match to data in a file.
 """
 
 class Verifier(object):
@@ -35,6 +35,7 @@
             filters.append("ORGANIZER:EMAIL")
         filters.append("CALSCALE")
         filters.append("PRODID")
+        filters.append("DTSTAMP")
         filters.append("CREATED")
         filters.append("LAST-MODIFIED")
  
@@ -77,12 +78,8 @@
             for properties in component.getProperties().itervalues():
                 allProps.extend(properties)
             for property in allProps:                    
-                # Always remove DTSTAMP
-                if property.getName() == "DTSTAMP":
-                    component.removeProperty(property)
-                elif property.getName() == "PRODID":
-                    component.removeProperty(property)
-                elif property.getName() == "X-CALENDARSERVER-ATTENDEE-COMMENT":
+                # Always reset DTSTAMP on this X- prop
+                if property.getName() == "X-CALENDARSERVER-ATTENDEE-COMMENT":
                     if property.hasAttribute("X-CALENDARSERVER-DTSTAMP"):
                         property.replaceAttribute(PyCalendarAttribute("X-CALENDARSERVER-DTSTAMP", "20080101T000000Z"))
                         
@@ -113,5 +110,4 @@
                 error_diff = "\n".join([line for line in unified_diff(data.split("\n"), respdata.split("\n"))])
                 return False, "        Response data does not exactly match file data%s" % (error_diff,)
         except Exception, e:
-            return False, "        Response data is not calendar data data: %s" % (e,)
-            
\ No newline at end of file
+            return False, "        Response data is not calendar data: %s" % (e,)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110321/d8fd57d3/attachment-0001.html>


More information about the calendarserver-changes mailing list