[CalendarServer-changes] [13250] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Thu Apr 10 15:30:44 PDT 2014
Revision: 13250
http://trac.calendarserver.org//changeset/13250
Author: gaya at apple.com
Date: 2014-04-10 15:30:44 -0700 (Thu, 10 Apr 2014)
Log Message:
-----------
Use canonical calendar user address for group attendees and vCard X-ADDRESSBOOKSERVER-MEMBER
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/ical.py
CalendarServer/trunk/txdav/caldav/datastore/sql.py
CalendarServer/trunk/txdav/who/test/test_group_attendees.py
CalendarServer/trunk/txdav/who/vcard.py
Modified: CalendarServer/trunk/twistedcaldav/ical.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/ical.py 2014-04-10 20:15:48 UTC (rev 13249)
+++ CalendarServer/trunk/twistedcaldav/ical.py 2014-04-10 22:30:44 UTC (rev 13250)
@@ -3384,22 +3384,20 @@
@inlineCallbacks
- def expandGroupAttendee(self, groupGUID, memberGUIDs, recordFunction):
+ def expandGroupAttendee(self, groupCUA, memberCUAs, recordFunction):
- memberUUIDs = set(["urn:uuid:" + str(memberGUID) for memberGUID in memberGUIDs])
- groupUUID = "urn:uuid:" + str(groupGUID)
changed = False
for component in self.subcomponents():
if component.name() in ignoredComponents:
continue
oldAttendeeProps = tuple(component.properties("ATTENDEE"))
- oldAttendeeUUIDs = set([attendeeProp.value() for attendeeProp in oldAttendeeProps])
+ oldAttendeeCUAs = set([attendeeProp.value() for attendeeProp in oldAttendeeProps])
# add new member attendees
- for memberUUID in sorted(memberUUIDs - oldAttendeeUUIDs):
- directoryRecord = yield recordFunction(memberUUID)
- newAttendeeProp = directoryRecord.attendee(params={"MEMBER": groupUUID})
+ for memberCUA in sorted(set(memberCUAs) - oldAttendeeCUAs):
+ directoryRecord = yield recordFunction(memberCUA)
+ newAttendeeProp = directoryRecord.attendee(params={"MEMBER": groupCUA})
component.addProperty(newAttendeeProp)
changed = True
@@ -3407,15 +3405,15 @@
for attendeeProp in oldAttendeeProps:
if attendeeProp.hasParameter("MEMBER"):
parameterValues = tuple(attendeeProp.parameterValues("MEMBER"))
- if groupUUID in parameterValues:
- if attendeeProp.value() not in memberUUIDs:
- attendeeProp.removeParameterValue("MEMBER", groupUUID)
+ if groupCUA in parameterValues:
+ if attendeeProp.value() not in memberCUAs:
+ attendeeProp.removeParameterValue("MEMBER", groupCUA)
if not attendeeProp.parameterValues("MEMBER"):
component.removeProperty(attendeeProp)
changed = True
else:
- if attendeeProp.value() in memberUUIDs:
- attendeeProp.setParameter("MEMBER", parameterValues + (groupUUID,))
+ if attendeeProp.value() in memberCUAs:
+ attendeeProp.setParameter("MEMBER", parameterValues + (groupCUA,))
changed = True
returnValue(changed)
Modified: CalendarServer/trunk/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-04-10 20:15:48 UTC (rev 13249)
+++ CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-04-10 22:30:44 UTC (rev 13250)
@@ -1937,30 +1937,29 @@
"""
Expand group attendees
"""
-
if not config.Scheduling.Options.AllowGroupAsAttendee:
return
attendeeProps = component.getAllAttendeeProperties()
- groupGUIDs = set([
- uuid.UUID(attendeeProp.value()[len("urn:uuid:"):]) for attendeeProp in attendeeProps
+ groupCUAs = set([
+ attendeeProp.value() for attendeeProp in attendeeProps
if attendeeProp.parameterValue("CUTYPE") == "GROUP"
])
+ for groupCUA in groupCUAs:
- for groupGUID in groupGUIDs:
-
- groupRecord = yield self.directoryService().recordWithGUID(groupGUID)
+ groupRecord = yield self.directoryService().recordWithCalendarUserAddress(groupCUA)
if groupRecord:
members = yield groupRecord.expandedMembers()
- memberGUIDs = sorted([member.guid for member in members])
+ # calculate hash
+ memberUIDs = sorted([member.uid for member in members])
membershipHashContent = hashlib.md5()
- for memberGUID in memberGUIDs:
- membershipHashContent.update(str(memberGUID))
+ for memberUID in memberUIDs:
+ membershipHashContent.update(memberUID)
membershipHash = membershipHashContent.hexdigest()
# associate group ID with self
- groupID, _ignore_name, membershipHash, _ignore_modDate = yield self._txn.groupByUID(str(groupGUID))
+ groupID, _ignore_name, membershipHash, _ignore_modDate = yield self._txn.groupByUID(groupRecord.uid)
try:
groupAttendee = schema.GROUP_ATTENDEE
yield Insert({
@@ -1972,7 +1971,11 @@
pass
# get members
- yield component.expandGroupAttendee(groupGUID, memberGUIDs, self.directoryService().recordWithCalendarUserAddress)
+ yield component.expandGroupAttendee(
+ groupRecord.canonicalCalendarUserAddress(),
+ set([member.canonicalCalendarUserAddress() for member in members]),
+ self.directoryService().recordWithCalendarUserAddress
+ )
def validCalendarDataCheck(self, component, inserting):
Modified: CalendarServer/trunk/txdav/who/test/test_group_attendees.py
===================================================================
--- CalendarServer/trunk/txdav/who/test/test_group_attendees.py 2014-04-10 20:15:48 UTC (rev 13249)
+++ CalendarServer/trunk/txdav/who/test/test_group_attendees.py 2014-04-10 22:30:44 UTC (rev 13250)
@@ -317,8 +317,8 @@
ATTENDEE;CN=User 01;EMAIL=user01 at example.com;RSVP=TRUE:urn:uuid:10000000-0000-0000-0000-000000000001
ATTENDEE;CN=Group 02;CUTYPE=GROUP;EMAIL=group02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000002
ATTENDEE;CN=Group 04;CUTYPE=GROUP;RSVP=TRUE;SCHEDULE-STATUS=3.7:urn:uuid:20000000-0000-0000-0000-000000000004
-ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000002","urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000006
-ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000002","urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000007
+ATTENDEE;CN=User 06;EMAIL=user06 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004","urn:uuid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000006
+ATTENDEE;CN=User 07;EMAIL=user07 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004","urn:uuid:20000000-0000-0000-0000-000000000002";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000007
ATTENDEE;CN=User 08;EMAIL=user08 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000008
ATTENDEE;CN=User 09;EMAIL=user09 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000009
ATTENDEE;CN=User 10;EMAIL=user10 at example.com;MEMBER="urn:uuid:20000000-0000-0000-0000-000000000004";PARTSTAT=NEEDS-ACTION;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:uuid:10000000-0000-0000-0000-000000000010
Modified: CalendarServer/trunk/txdav/who/vcard.py
===================================================================
--- CalendarServer/trunk/txdav/who/vcard.py 2014-04-10 20:15:48 UTC (rev 13249)
+++ CalendarServer/trunk/txdav/who/vcard.py 2014-04-10 22:30:44 UTC (rev 13250)
@@ -322,7 +322,7 @@
# FIXME: members() is a deferred, so all of vCardFromRecord is deferred.
for memberRecord in (yield record.members()):
if memberRecord:
- vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", "urn:uuid:" + memberRecord.fields[FieldName.uid].encode("utf-8")))
+ vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberRecord.canonicalCalendarUserAddress().encode("utf-8")))
#===================================================================
# vCard 4.0 http://tools.ietf.org/html/rfc6350
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140410/abcad62a/attachment-0001.html>
More information about the calendarserver-changes
mailing list