[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