[CalendarServer-changes] [11948] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 12 11:23:53 PDT 2014


Revision: 11948
          http://trac.calendarserver.org//changeset/11948
Author:   cdaboo at apple.com
Date:     2013-11-14 11:28:17 -0800 (Thu, 14 Nov 2013)
Log Message:
-----------
Additional api to help deal with multi-valued parameters.

Modified Paths:
--------------
    CalendarServer/trunk/support/build.sh
    CalendarServer/trunk/twistedcaldav/ical.py
    CalendarServer/trunk/twistedcaldav/test/test_icalendar.py

Modified: CalendarServer/trunk/support/build.sh
===================================================================
--- CalendarServer/trunk/support/build.sh	2013-11-14 19:26:57 UTC (rev 11947)
+++ CalendarServer/trunk/support/build.sh	2013-11-14 19:28:17 UTC (rev 11948)
@@ -808,7 +808,7 @@
     "${pypi}/p/${n}/${p}.tar.gz";
 
   # XXX actually PyCalendar should be imported in-place.
-  py_dependency -fe -i "src" -r 11914 \
+  py_dependency -fe -i "src" -r 11947 \
     "PyCalendar" "pycalendar" "pycalendar" \
     "${svn_uri_base}/PyCalendar/trunk";
 

Modified: CalendarServer/trunk/twistedcaldav/ical.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/ical.py	2013-11-14 19:26:57 UTC (rev 11947)
+++ CalendarServer/trunk/twistedcaldav/ical.py	2013-11-14 19:28:17 UTC (rev 11948)
@@ -286,8 +286,7 @@
 
     def parameterValue(self, name, default=None):
         """
-        Returns a single value for the given parameter.  Raises
-        InvalidICalendarDataError if the parameter has more than one value.
+        Returns a single value for the given parameter.
         """
         try:
             return self._pycalendar.getParameterValue(name)
@@ -295,6 +294,16 @@
             return default
 
 
+    def parameterValues(self, name, default=None):
+        """
+        Returns a multi-value C{list} for the given parameter.
+        """
+        try:
+            return self._pycalendar.getParameterValues(name)
+        except KeyError:
+            return default
+
+
     def hasParameter(self, paramname):
         return self._pycalendar.hasParameter(paramname)
 

Modified: CalendarServer/trunk/twistedcaldav/test/test_icalendar.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_icalendar.py	2013-11-14 19:26:57 UTC (rev 11947)
+++ CalendarServer/trunk/twistedcaldav/test/test_icalendar.py	2013-11-14 19:28:17 UTC (rev 11948)
@@ -21,7 +21,7 @@
 from twisted.trial.unittest import SkipTest
 
 from twistedcaldav.ical import Component, Property, InvalidICalendarDataError, \
-    normalizeCUAddress
+    normalizeCUAddress, normalize_iCalStr
 from twistedcaldav.instance import InvalidOverriddenInstanceError
 import twistedcaldav.test.util
 
@@ -1152,6 +1152,82 @@
             self.assertEqual(result, str(component).replace("\r", ""))
 
 
+    def test_parameter_multi_values(self):
+        caldata = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890-1
+DTSTART:20071114T000000Z
+ATTENDEE:mailto:user01 at example.com
+ATTENDEE;MEMBER="urn:uuid:group01","urn:uuid:group02";PARTSTAT=NEEDS-ACTION:mailto:user02 at example.com
+DTSTAMP:20080601T120000Z
+ORGANIZER:mailto:user01 at example.com
+END:VEVENT
+END:VCALENDAR
+"""
+
+        caldata2 = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890-1
+DTSTART:20071114T000000Z
+ATTENDEE:mailto:user01 at example.com
+ATTENDEE;MEMBER="urn:uuid:group01","urn:uuid:group02","urn:uuid:group03";PARTSTAT=NEEDS-ACTION:mailto:user02 at example.com
+DTSTAMP:20080601T120000Z
+ORGANIZER:mailto:user01 at example.com
+END:VEVENT
+END:VCALENDAR
+"""
+
+        caldata3 = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890-1
+DTSTART:20071114T000000Z
+ATTENDEE:mailto:user01 at example.com
+ATTENDEE;MEMBER="urn:uuid:group01";PARTSTAT=NEEDS-ACTION:mailto:user02 at example.com
+DTSTAMP:20080601T120000Z
+ORGANIZER:mailto:user01 at example.com
+END:VEVENT
+END:VCALENDAR
+"""
+
+        component = Component.fromString(caldata)
+        attendee = component.masterComponent().getAttendeeProperty(["mailto:user02 at example.com", ])
+        self.assertTrue(attendee is not None)
+
+        # Single value retrieved as multi-value
+        partstat = attendee.parameterValues("PARTSTAT")
+        self.assertEqual(partstat, ["NEEDS-ACTION"])
+
+        # Multi-value retrieved as single-value
+        member = attendee.parameterValue("MEMBER")
+        self.assertEqual(member, "urn:uuid:group01")
+
+        # Multi-value retrieved as multi-value
+        members = attendee.parameterValues("MEMBER")
+        self.assertEqual(members, ["urn:uuid:group01", "urn:uuid:group02"])
+
+        # Multi-value add a new value
+        members = attendee.parameterValues("MEMBER")
+        members.append("urn:uuid:group03")
+        attendee.setParameter("MEMBER", members)
+        members = attendee.parameterValues("MEMBER")
+        self.assertEqual(members, ["urn:uuid:group01", "urn:uuid:group02", "urn:uuid:group03"])
+        self.assertEqual(normalize_iCalStr(str(component)), normalize_iCalStr(caldata2))
+
+        # Multi-value back to one
+        members = attendee.parameterValues("MEMBER")
+        del members[1:]
+        attendee.setParameter("MEMBER", members)
+        members = attendee.parameterValues("MEMBER")
+        self.assertEqual(members, ["urn:uuid:group01"])
+        self.assertEqual(normalize_iCalStr(str(component)), normalize_iCalStr(caldata3))
+
+
     def test_add_property_with_valuetype(self):
         data = """BEGIN:VCALENDAR
 VERSION:2.0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/c05ffbcf/attachment.html>


More information about the calendarserver-changes mailing list