[CalendarServer-changes] [3045] CalendarServer/branches/users/sagen/principal-property-search-3029/ twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Wed Sep 24 10:42:43 PDT 2008
Revision: 3045
http://trac.macosforge.org/projects/calendarserver/changeset/3045
Author: sagen at apple.com
Date: 2008-09-24 10:42:42 -0700 (Wed, 24 Sep 2008)
Log Message:
-----------
Make email-address a multi-valued property, email-address-set
Modified Paths:
--------------
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/customxml.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/apache.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/appleopendirectory.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/directory.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/principal.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sqldb.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sudo.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlaccountsparser.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlfile.py
CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/resource.py
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/customxml.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/customxml.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/customxml.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -306,7 +306,7 @@
name = "last-name"
protected = True
-class EMailProperty (davxml.WebDAVTextElement):
+class EmailAddressProperty (davxml.WebDAVTextElement):
"""
A property representing email address of a principal
"""
@@ -314,6 +314,16 @@
name = "email-address"
protected = True
+class EmailAddressSet (davxml.WebDAVElement):
+ """
+ The list of email addresses of a principal
+ """
+ namespace = calendarserver_namespace
+ name = "email-address-set"
+ hidden = True
+
+ allowed_children = { (calendarserver_namespace, "email-address"): (0, None) }
+
class IScheduleInbox (davxml.WebDAVEmptyElement):
"""
Denotes the resourcetype of a iSchedule Inbox.
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/apache.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/apache.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/apache.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -131,7 +131,7 @@
fullName = None,
firstName = None,
lastName = None,
- emailAddress = None,
+ emailAddresses = set(),
calendarUserAddresses = set(),
autoSchedule = False,
)
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/appleopendirectory.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/appleopendirectory.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -465,7 +465,7 @@
'fullName' : dsattributes.kDS1AttrDistinguishedName,
'firstName' : dsattributes.kDS1AttrFirstName,
'lastName' : dsattributes.kDS1AttrLastName,
- 'emailAddress' : dsattributes.kDSNAttrEMailAddress,
+ 'emailAddresses' : dsattributes.kDSNAttrEMailAddress,
}
_toODRecordTypes = {
@@ -522,7 +522,19 @@
self.log_info("Got back %d records from OD" % (len(results),))
for key, val in results.iteritems():
self.log_debug("OD result: %s %s" % (key, val))
+
try:
+
+ # Email field from OD can either be a string or a list
+ emailAddresses = set()
+ addrs = val.get(dsattributes.kDSNAttrEMailAddress, None)
+ if isinstance(addrs, str):
+ emailAddresses.add(addrs)
+ elif isinstance(addrs, list):
+ for addr in addrs:
+ emailAddresses.add(addr)
+
+ # TODO: Review this code...
calendarUserAddresses = set()
enabledForCalendaring = False
if val.has_key(dsattributes.kDSNAttrEMailAddress):
@@ -537,7 +549,7 @@
fullName = val.get(dsattributes.kDS1AttrDistinguishedName, ""),
firstName = val.get(dsattributes.kDS1AttrFirstName, ""),
lastName = val.get(dsattributes.kDS1AttrLastName, ""),
- emailAddress = val.get(dsattributes.kDSNAttrEMailAddress, ""),
+ emailAddresses = emailAddresses,
calendarUserAddresses = calendarUserAddresses,
autoSchedule = False,
enabledForCalendaring = enabledForCalendaring,
@@ -643,6 +655,14 @@
else:
calendarUserAddresses = ()
+ # Get email address from directory record
+ emailAddresses = set()
+ if isinstance(recordEmailAddress, str):
+ emailAddresses.add(recordEmailAddress)
+ elif isinstance(recordEmailAddress, list):
+ for addr in emailAddresses:
+ emailAddresses.add(addr)
+
# Special case for groups, which have members.
if recordType == DirectoryService.recordType_groups:
memberGUIDs = value.get(dsattributes.kDSNAttrGroupMembers)
@@ -680,7 +700,7 @@
fullName = recordFullName,
firstName = recordFirstName,
lastName = recordLastName,
- emailAddress = recordEmailAddress,
+ emailAddresses = emailAddresses,
calendarUserAddresses = calendarUserAddresses,
autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
@@ -929,7 +949,7 @@
"""
def __init__(
self, service, recordType, guid, nodeName, shortName, fullName,
- firstName, lastName, emailAddress,
+ firstName, lastName, emailAddresses,
calendarUserAddresses, autoSchedule, enabledForCalendaring,
memberGUIDs, proxyGUIDs, readOnlyProxyGUIDs,
):
@@ -941,7 +961,7 @@
fullName = fullName,
firstName = firstName,
lastName = lastName,
- emailAddress = emailAddress,
+ emailAddresses = emailAddresses,
calendarUserAddresses = calendarUserAddresses,
autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/directory.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/directory.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -209,7 +209,7 @@
def __init__(
self, service, recordType, guid, shortName, fullName,
- firstName, lastName, emailAddress,
+ firstName, lastName, emailAddresses,
calendarUserAddresses, autoSchedule, enabledForCalendaring=True,
):
assert service.realmName is not None
@@ -231,7 +231,7 @@
self.fullName = fullName
self.firstName = firstName
self.lastName = lastName
- self.emailAddress = emailAddress
+ self.emailAddresses = emailAddresses
self.enabledForCalendaring = enabledForCalendaring
self.calendarUserAddresses = calendarUserAddresses
self.autoSchedule = autoSchedule
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/principal.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/principal.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -134,7 +134,7 @@
("DAV:" , "displayname") : "fullName",
(_cs_ns, "first-name") : "firstName",
(_cs_ns, "last-name") : "lastName",
- (_cs_ns, "email-address") : "emailAddress",
+ (_cs_ns, "email-address-set") : "emailAddresses",
}
def propertyToField(self, property):
@@ -462,7 +462,7 @@
"""Full name: %s\n""" % (self.record.fullName,),
"""First name: %s\n""" % (self.record.firstName,),
"""Last name: %s\n""" % (self.record.lastName,),
- """Email address: %s\n""" % (self.record.emailAddress,),
+ """Email addresses: %s\n""" , format_list(self.record.emailAddresses),
"""Principal UID: %s\n""" % (self.principalUID(),),
"""Principal URL: %s\n""" % (format_link(self.principalURL()),),
"""\nAlternate URIs:\n""" , format_list(format_link(u) for u in self.alternateURIs()),
@@ -625,7 +625,7 @@
"""Full name: %s\n""" % (self.record.fullName,),
"""First name: %s\n""" % (self.record.firstName,),
"""Last name: %s\n""" % (self.record.lastName,),
- """Email address: %s\n""" % (self.record.emailAddress,),
+ """Email addresses: %s\n""" , format_list(self.record.emailAddresses),
"""Principal UID: %s\n""" % (self.principalUID(),),
"""Principal URL: %s\n""" % (format_link(self.principalURL()),),
"""\nAlternate URIs:\n""" , format_list(format_link(u) for u in self.alternateURIs()),
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sqldb.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sqldb.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sqldb.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -352,7 +352,7 @@
fullName = name,
firstName = None,
lastName = None,
- emailAddress = None,
+ emailAddresses = set(),
calendarUserAddresses = calendarUserAddresses,
autoSchedule = autoSchedule,
)
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sudo.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sudo.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/sudo.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -134,7 +134,7 @@
fullName=shortName,
firstName="",
lastName="",
- emailAddress="",
+ emailAddresses=set(),
calendarUserAddresses=set(),
autoSchedule=False,
enabledForCalendaring=False)
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlaccountsparser.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlaccountsparser.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlaccountsparser.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -168,7 +168,7 @@
self.name = None
self.firstName = None
self.lastName = None
- self.emailAddress = None
+ self.emailAddresses = set()
self.members = set()
self.groups = set()
self.calendarUserAddresses = set()
@@ -209,10 +209,12 @@
lastName = self.lastName % ctr
else:
lastName = self.lastName
- if self.emailAddress and self.emailAddress.find("%") != -1:
- emailAddress = self.emailAddress % ctr
- else:
- emailAddress = self.emailAddress
+ emailAddresses = set()
+ for emailAddr in self.emailAddresses:
+ if emailAddr.find("%") != -1:
+ emailAddresses.add(emailAddr % ctr)
+ else:
+ emailAddresses.add(emailAddr)
calendarUserAddresses = set()
for cuaddr in self.calendarUserAddresses:
if cuaddr.find("%") != -1:
@@ -227,7 +229,7 @@
result.name = name
result.firstName = firstName
result.lastName = lastName
- result.emailAddress = emailAddress
+ result.emailAddresses = emailAddresses
result.members = self.members
result.calendarUserAddresses = calendarUserAddresses
result.autoSchedule = self.autoSchedule
@@ -266,7 +268,7 @@
self.lastName = child.firstChild.data.encode("utf-8")
elif child_name == ELEMENT_EMAIL_ADDRESS:
if child.firstChild is not None:
- self.emailAddress = child.firstChild.data.encode("utf-8")
+ self.emailAddresses.add(child.firstChild.data.encode("utf-8"))
elif child_name == ELEMENT_MEMBERS:
self._parseMembers(child, self.members)
elif child_name == ELEMENT_CUADDR:
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlfile.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/directory/xmlfile.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -110,7 +110,7 @@
fullName = xmlPrincipal.name,
firstName = xmlPrincipal.firstName,
lastName = xmlPrincipal.lastName,
- emailAddress = xmlPrincipal.emailAddress,
+ emailAddresses = xmlPrincipal.emailAddresses,
calendarUserAddresses = xmlPrincipal.calendarUserAddresses,
autoSchedule = xmlPrincipal.autoSchedule,
enabledForCalendaring = xmlPrincipal.enabledForCalendaring,
Modified: CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/resource.py 2008-09-24 16:59:39 UTC (rev 3044)
+++ CalendarServer/branches/users/sagen/principal-property-search-3029/twistedcaldav/resource.py 2008-09-24 17:42:42 UTC (rev 3045)
@@ -707,7 +707,7 @@
(caldav_namespace, "schedule-outbox-URL" ),
(calendarserver_namespace, "first-name" ),
(calendarserver_namespace, "last-name" ),
- (calendarserver_namespace, "email-address" ),
+ (calendarserver_namespace, "email-address-set"),
)
@classmethod
@@ -777,14 +777,11 @@
else:
return None
- if name == "email-address":
- emailAddress = self.record.emailAddress
- if emailAddress:
- return customxml.EMailProperty(emailAddress)
- else:
- return None
+ if name == "email-address-set":
+ return succeed(customxml.EmailAddressSet(
+ *[customxml.EmailAddressProperty(addr) for addr in self.record.emailAddresses]
+ ))
-
return super(CalendarPrincipalResource, self).readProperty(property, request)
return maybeDeferred(defer)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080924/8a2a6d82/attachment-0001.html
More information about the calendarserver-changes
mailing list