[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