[CalendarServer-changes] [1020] CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Wed Jan 10 20:58:53 PST 2007


Revision: 1020
          http://trac.macosforge.org/projects/calendarserver/changeset/1020
Author:   cdaboo at apple.com
Date:     2007-01-10 20:58:53 -0800 (Wed, 10 Jan 2007)

Log Message:
-----------
Result of merge -r1005:1018 https://svn.opensource.apple.com/repository/calendarserver/CalendarServer/trunk .

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/appleopendirectory.py
    CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/principal.py
    CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/test/test_principal.py
    CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/schedule.py

Modified: CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/appleopendirectory.py	2007-01-11 04:54:17 UTC (rev 1019)
+++ CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/appleopendirectory.py	2007-01-11 04:58:53 UTC (rev 1020)
@@ -91,6 +91,7 @@
             attrs = [
                 dsattributes.kDS1AttrGeneratedUID,
                 dsattributes.kDS1AttrDistinguishedName,
+                dsattributes.kDSNAttrCalendarPrincipalURI,
             ]
             if recordType == DirectoryService.recordType_users:
                 listRecordType = dsattributes.kDSStdRecordTypeUsers
@@ -119,6 +120,14 @@
                     continue
                 realName = value.get(dsattributes.kDS1AttrDistinguishedName)
 
+                cuaddrs = value.get(dsattributes.kDSNAttrCalendarPrincipalURI)
+                cuaddrset = set()
+                if cuaddrs is not None:
+                    if isinstance(cuaddrs, str):
+                        cuaddrset.update((cuaddrs,))
+                    else:
+                        cuaddrset.update(cuaddrs)
+
                 if recordType == DirectoryService.recordType_groups:
                     memberGUIDs = value.get(dsattributes.kDSNAttrGroupMembers)
                     if memberGUIDs is None:
@@ -134,7 +143,7 @@
                     guid                  = guid,
                     shortName             = shortName,
                     fullName              = realName,
-                    calendarUserAddresses = set(), # FIXME: Should be able to look up email, etc.
+                    calendarUserAddresses = cuaddrset,
                     memberGUIDs           = memberGUIDs,
                 )
 

Modified: CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/principal.py	2007-01-11 04:54:17 UTC (rev 1019)
+++ CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/principal.py	2007-01-11 04:58:53 UTC (rev 1020)
@@ -131,11 +131,23 @@
         if principal:
             return principal
 
-        record = self.directory.recordWithCalendarUserAddress(address)
-        if record is None:
-            return None
+        # Special case server absolute URIs
+        if address.startswith("http:") or address.startswith("https:"):
+            if address.endswith("/"):
+                altaddress = address[:-1]
+            else:
+                altaddress = address + "/"
+            addresses = (address, altaddress,)
         else:
-            return self.principalForRecord(record)
+            addresses = (address,)
+                
+        # Next try looking it up in the directory
+        for addr in addresses:
+            record = self.directory.recordWithCalendarUserAddress(addr)
+            if record is not None:
+                return self.principalForRecord(record)
+        
+        return None
 
     ##
     # Static

Modified: CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/test/test_principal.py	2007-01-11 04:54:17 UTC (rev 1019)
+++ CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/directory/test/test_principal.py	2007-01-11 04:58:53 UTC (rev 1020)
@@ -125,6 +125,26 @@
                     principalCollections = recordResource.principalCollections()
                     self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
 
+    def test_allRecords(self):
+        """
+        Test of a test routine...
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            self.assertEquals(recordResource.record, record)
+
+    ##
+    # DirectoryPrincipalProvisioningResource
+    ##
+
+    def test_principalForShortName(self):
+        """
+        DirectoryPrincipalProvisioningResource.principalForShortName()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            principal = provisioningResource.principalForShortName(recordType, record.shortName)
+            self.failIf(principal is None)
+            self.assertEquals(record, principal.record)
+
     def test_principalForUser(self):
         """
         DirectoryPrincipalProvisioningResource.principalForUser()
@@ -137,13 +157,46 @@
                 self.failIf(userResource is None)
                 self.assertEquals(user, userResource.record)
 
+    def test_principalForGUID(self):
+        """
+        DirectoryPrincipalProvisioningResource.principalForGUID()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            principal = provisioningResource.principalForGUID(record.guid)
+            self.failIf(principal is None)
+            self.assertEquals(record, principal.record)
+
     def test_principalForRecord(self):
         """
         DirectoryPrincipalProvisioningResource.principalForRecord()
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            self.assertEquals(recordResource.record, record)
-                    
+            principal = provisioningResource.principalForRecord(record)
+            self.failIf(principal is None)
+            self.assertEquals(record, principal.record)
+
+    def test_principalForCalendarUserAddress(self):
+        """
+        DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
+        """
+        for provisioningResource, recordType, recordResource, record in self._allRecords():
+            principalURL = recordResource.principalURL()
+            if principalURL.endswith("/"):
+                alternateURL = principalURL[:-1]
+            else:
+                alternateURL = principalURL + "/"
+
+            for address in tuple(record.calendarUserAddresses) + (principalURL, alternateURL):
+                principal = provisioningResource.principalForCalendarUserAddress(address)
+                self.failIf(principal is None)
+                self.assertEquals(record, principal.record)
+
+    # FIXME: Run DirectoryPrincipalProvisioningResource tests on DirectoryPrincipalTypeResource also
+
+    ##
+    # DirectoryPrincipalResource
+    ##
+
     def test_displayName(self):
         """
         DirectoryPrincipalResource.displayName()

Modified: CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/schedule.py
===================================================================
--- CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/schedule.py	2007-01-11 04:54:17 UTC (rev 1019)
+++ CalendarServer/branches/users/cdaboo/availability-1018/twistedcaldav/schedule.py	2007-01-11 04:58:53 UTC (rev 1020)
@@ -323,14 +323,18 @@
 
             # Map recipient to their inbox
             inbox = None
-            if principal is not None:
+            if principal is None:
+                log.err("No principal for calendar user address: %s" % (recipient,))
+            else:
                 inboxURL = principal.scheduleInboxURL()
                 if inboxURL:
                     inbox = waitForDeferred(request.locateResource(inboxURL))
                     yield inbox
                     inbox = inbox.getResult()
+                else:
+                    log.err("No schedule inbox for principal: %s" % (principal,))
+
             if inbox is None:
-                log.err("Could not find Inbox for recipient: %s" % (recipient,))
                 err = HTTPError(ErrorResponse(responsecode.NOT_FOUND, (caldav_namespace, "recipient-exists")))
                 responses.add(recipient, Failure(exc_value=err), reqstatus="3.7;Invalid Calendar User")
                 recipients_state["BAD"] += 1
@@ -338,7 +342,6 @@
                 # Process next recipient
                 continue
             else:
-
                 #
                 # Check access controls
                 #

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070110/0ceab3ca/attachment.html


More information about the calendarserver-changes mailing list