[CalendarServer-changes] [7181] CalDAVTester/branches/users/cdaboo/pycalendar

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 10 20:41:47 PST 2011


Revision: 7181
          http://trac.macosforge.org/projects/calendarserver/changeset/7181
Author:   cdaboo at apple.com
Date:     2011-03-10 20:41:45 -0800 (Thu, 10 Mar 2011)
Log Message:
-----------
More pycalendar updates.

Modified Paths:
--------------
    CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/timezoneservice/New_York.ics
    CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/add-member.xml
    CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/get.xml
    CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/put.xml
    CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/sharing-addressbooks.xml
    CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/calendarDataMatch.py

Added Paths:
-----------
    CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/addressDataMatch.py

Modified: CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/timezoneservice/New_York.ics
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/timezoneservice/New_York.ics	2011-03-11 04:15:39 UTC (rev 7180)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/Resource/CalDAV/timezoneservice/New_York.ics	2011-03-11 04:41:45 UTC (rev 7181)
@@ -1,131 +1,148 @@
 BEGIN:VCALENDAR
-PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
 VERSION:2.0
 BEGIN:VTIMEZONE
 TZID:America/New_York
 X-LIC-LOCATION:America/New_York
+BEGIN:STANDARD
+DTSTART:18831118T120358
+RDATE:18831118T120358
+TZNAME:EST
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+END:STANDARD
 BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
 TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19180331T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU;UNTIL=19200328T070000Z
 END:DAYLIGHT
 BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
 TZNAME:EST
-DTSTART:19181027T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=19201031T060000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
 END:STANDARD
 BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RDATE:19200328T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
 TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19210424T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19410427T070000Z
 END:DAYLIGHT
 BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+TZNAME:EST
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19210925T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19410928T060000Z
 END:STANDARD
 BEGIN:DAYLIGHT
+DTSTART:19210424T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
 TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19460428T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19730429T070000Z
 END:DAYLIGHT
 BEGIN:STANDARD
-TZOFFSETFROM:-0400
-TZOFFSETTO:-0500
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
 TZNAME:EST
-DTSTART:19460929T020000
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU;UNTIL=19540926T060000Z
-END:STANDARD
-BEGIN:STANDARD
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19551030T020000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;UNTIL=20061029T060000Z
 END:STANDARD
 BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
 TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19760425T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SU;UNTIL=19860427T070000Z
 END:DAYLIGHT
 BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
 TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19870405T020000
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;UNTIL=20060402T070000Z
 END:DAYLIGHT
 BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
 TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:20070311T020000
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
 END:DAYLIGHT
 BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:20071104T020000
-RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
 END:STANDARD
 BEGIN:STANDARD
-TZOFFSETFROM:-045602
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:18831118T120358
-RDATE:18831118T120358
 END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
 BEGIN:STANDARD
-TZOFFSETFROM:-0500
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19200101T000000
-RDATE:19200101T000000
-RDATE:19420101T000000
-RDATE:19460101T000000
-RDATE:19670101T000000
 END:STANDARD
 BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
 TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EWT
-DTSTART:19420209T020000
-RDATE:19420209T020000
 END:DAYLIGHT
 BEGIN:DAYLIGHT
-TZOFFSETFROM:-0400
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
 TZOFFSETTO:-0400
-TZNAME:EPT
-DTSTART:19450814T190000
-RDATE:19450814T190000
 END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
 BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
 TZOFFSETFROM:-0400
 TZOFFSETTO:-0500
-TZNAME:EST
-DTSTART:19450930T020000
-RDATE:19450930T020000
 END:STANDARD
-BEGIN:DAYLIGHT
-TZOFFSETFROM:-0500
-TZOFFSETTO:-0400
-TZNAME:EDT
-DTSTART:19740106T020000
-RDATE:19740106T020000
-RDATE:19750223T020000
-END:DAYLIGHT
 END:VTIMEZONE
 END:VCALENDAR

Modified: CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/add-member.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/add-member.xml	2011-03-11 04:15:39 UTC (rev 7180)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/add-member.xml	2011-03-11 04:41:45 UTC (rev 7181)
@@ -110,7 +110,7 @@
 				<method>GET</method>
 				<ruri>$posted:</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/1.vcf</value>

Modified: CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/get.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/get.xml	2011-03-11 04:15:39 UTC (rev 7180)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/get.xml	2011-03-11 04:41:45 UTC (rev 7181)
@@ -48,7 +48,7 @@
 					<callback>statusCode</callback>
 				</verify>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/1.vcf</value>

Modified: CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/put.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/put.xml	2011-03-11 04:15:39 UTC (rev 7180)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/put.xml	2011-03-11 04:41:45 UTC (rev 7181)
@@ -52,7 +52,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/1.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/1.vcf</value>
@@ -84,7 +84,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/2.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/2.vcf</value>
@@ -116,7 +116,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/3.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/3.vcf</value>
@@ -148,7 +148,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/4.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/4.vcf</value>
@@ -180,7 +180,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/5.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/5.vcf</value>
@@ -212,7 +212,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/6.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/6.vcf</value>
@@ -244,7 +244,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/7.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/7.vcf</value>
@@ -276,7 +276,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/8.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/8.vcf</value>
@@ -308,7 +308,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/9.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/9.vcf</value>
@@ -340,7 +340,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/10.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/10.vcf</value>
@@ -375,7 +375,7 @@
 				<method>GET</method>
 				<ruri>$addressbookpath1:/11.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/vcardput/11.vcf</value>

Modified: CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/sharing-addressbooks.xml
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/sharing-addressbooks.xml	2011-03-11 04:15:39 UTC (rev 7180)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/scripts/tests/CardDAV/sharing-addressbooks.xml	2011-03-11 04:41:45 UTC (rev 7181)
@@ -160,7 +160,7 @@
 				<method>GET</method>
 				<ruri>$addressbookhome1:/shared/1.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/sharing/addressbooks/read-write/5.vcf</value>
@@ -188,7 +188,7 @@
 				<method>GET</method>
 				<ruri>$sharedaddressbook:/1.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/sharing/addressbooks/read-write/6.vcf</value>
@@ -216,7 +216,7 @@
 				<method>GET</method>
 				<ruri>$sharedaddressbook:/2.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/sharing/addressbooks/read-write/7.vcf</value>
@@ -244,7 +244,7 @@
 				<method>GET</method>
 				<ruri>$addressbookhome1:/shared/2.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/sharing/addressbooks/read-write/8.vcf</value>
@@ -384,7 +384,7 @@
 				<method>GET</method>
 				<ruri>$sharedaddressbook:/4.vcf</ruri>
 				<verify>
-					<callback>calendarDataMatch</callback>
+					<callback>addressDataMatch</callback>
 					<arg>
 						<name>filepath</name>
 						<value>Resource/CardDAV/sharing/addressbooks/read-only/6.vcf</value>

Added: CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/addressDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/addressDataMatch.py	                        (rev 0)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/addressDataMatch.py	2011-03-11 04:41:45 UTC (rev 7181)
@@ -0,0 +1,111 @@
+##
+# Copyright (c) 2006-2009 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+from vobject.base import readOne, ContentLine
+from vobject.base import Component
+from difflib import unified_diff
+import StringIO
+
+"""
+Verifier that checks the response body for an exact match to data in a file.
+"""
+
+class Verifier(object):
+    
+    def verify(self, manager, uri, response, respdata, args): #@UnusedVariable
+        # Get arguments
+        files = args.get("filepath", [])
+        filters = args.get("filter", [])
+        
+        if "EMAIL parameter" not in manager.server_info.features:
+            filters.append("ATTENDEE:EMAIL") 
+            filters.append("ORGANIZER:EMAIL")
+        filters.append("CALSCALE")
+        filters.append("PRODID")
+        filters.append("CREATED")
+        filters.append("LAST-MODIFIED")
+ 
+        # status code must be 200, 207
+        if response.status not in (200,207):
+            return False, "        HTTP Status Code Wrong: %d" % (response.status,)
+        
+        # look for response data
+        if not respdata:
+            return False, "        No response body"
+        
+        # look for one file
+        if len(files) != 1:
+            return False, "        No file to compare response to"
+        
+        # read in all data from specified file
+        fd = open( files[0], "r" )
+        try:
+            try:
+                data = fd.read()
+            finally:
+                fd.close()
+        except:
+            data = None
+
+        if data is None:
+            return False, "        Could not read data file"
+
+        data = manager.server_info.subs(data)
+        
+        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)
+
+        s = StringIO.StringIO(respdata)
+        try:
+            resp_calendar = readOne(s)
+            removePropertiesParameters(resp_calendar)
+            respdata = resp_calendar.serialize()
+            
+            s = StringIO.StringIO(data)
+            data_calendar = readOne(s)
+            removePropertiesParameters(data_calendar)
+            data = data_calendar.serialize()
+            
+            result = respdata == data
+                    
+            if result:
+                return True, ""
+            else:
+                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,)

Modified: CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/calendarDataMatch.py
===================================================================
--- CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/calendarDataMatch.py	2011-03-11 04:15:39 UTC (rev 7180)
+++ CalDAVTester/branches/users/cdaboo/pycalendar/verifiers/calendarDataMatch.py	2011-03-11 04:41:45 UTC (rev 7181)
@@ -16,6 +16,7 @@
 
 from difflib import unified_diff
 from pycalendar.calendar import PyCalendar
+from pycalendar.attribute import PyCalendarAttribute
 
 """
 Verifier that checks the response body for an exact match to data in a file.
@@ -65,8 +66,8 @@
         
         def removePropertiesParameters(component):
             
-            for component in component.getComponents():
-                removePropertiesParameters(component)
+            for subcomponent in component.getComponents():
+                removePropertiesParameters(subcomponent)
 
             allProps = []
             for properties in component.getProperties().itervalues():
@@ -75,16 +76,18 @@
                 # Always remove DTSTAMP
                 if property.getName() == "DTSTAMP":
                     component.removeProperty(property)
+                elif property.getName() == "PRODID":
+                    component.removeProperty(property)
                 elif property.getName() == "X-CALENDARSERVER-ATTENDEE-COMMENT":
                     if property.hasAttribute("X-CALENDARSERVER-DTSTAMP"):
-                        property.setAttribute("X-CALENDARSERVER-DTSTAMP", "20080101T000000Z")
+                        property.replaceAttribute(PyCalendarAttribute("X-CALENDARSERVER-DTSTAMP", "20080101T000000Z"))
                         
                 for filter in filters:
                     if ":" in filter:
                         propname, parameter = filter.split(":")
                         if property.getName() == propname:
                             if property.hasAttribute(parameter):
-                                property.removeAttribute(parameter)
+                                property.removeAttributes(parameter)
                     else:
                         if property.getName() == filter:
                             component.removeProperty(property)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110310/51cefcc1/attachment-0001.html>


More information about the calendarserver-changes mailing list