[CalendarServer-changes] [7430] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Wed May 11 13:44:03 PDT 2011


Revision: 7430
          http://trac.macosforge.org/projects/calendarserver/changeset/7430
Author:   cdaboo at apple.com
Date:     2011-05-11 13:44:02 -0700 (Wed, 11 May 2011)
Log Message:
-----------
Proper behavior for record.enabled.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/idirectory.py
    CalendarServer/trunk/twistedcaldav/directory/principal.py
    CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml
    CalendarServer/trunk/twistedcaldav/directory/test/augments.xml
    CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py

Modified: CalendarServer/trunk/twistedcaldav/directory/idirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/idirectory.py	2011-05-10 19:20:24 UTC (rev 7429)
+++ CalendarServer/trunk/twistedcaldav/directory/idirectory.py	2011-05-11 20:44:02 UTC (rev 7430)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -102,7 +102,7 @@
     recordType            = Attribute("The type of this record.")
     guid                  = Attribute("The GUID of this record.")
     uid                   = Attribute("The UID of this record.")
-    enabled               = Attribute("Determines whether this record should be provisioned as a principal.")
+    enabled               = Attribute("Determines whether this record should allow a principal to be created.")
     serverID              = Attribute("Identifies the server that actually hosts data for the record.")
     partitionID           = Attribute("Identifies the partition node that actually hosts data for the record.")
     shortNames            = Attribute("The names for this record.")
@@ -111,8 +111,8 @@
     firstName             = Attribute("The first name of this record.")
     lastName              = Attribute("The last name of this record.")
     emailAddress          = Attribute("The email address of this record.")
-    enabledForCalendaring = Attribute("Determines whether this record should be provisioned with a calendar home.")
-    enabledForAddressBooks = Attribute("Determines whether this record should be provisioned with an address book home.")
+    enabledForCalendaring = Attribute("Determines whether this record creates a principal with a calendar home.")
+    enabledForAddressBooks = Attribute("Determines whether this record creates a principal with an address book home.")
     calendarUserAddresses = Attribute(
         """
         An iterable of C{str}s representing calendar user addresses for this

Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py	2011-05-10 19:20:24 UTC (rev 7429)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py	2011-05-11 20:44:02 UTC (rev 7430)
@@ -1,6 +1,6 @@
 # -*- test-case-name: twistedcaldav.directory.test.test_principal -*-
 ##
-# Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2006-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -443,7 +443,7 @@
         return self.parent.principalForCalendarUserAddress(address)
 
     def principalForRecord(self, record):
-        if record is None:
+        if record is None or not record.enabled:
             return None
 
         if record.enabledForCalendaring or record.enabledForAddressBooks:
@@ -474,7 +474,7 @@
             subType = None
 
         record = self.directory.recordWithUID(primaryUID)
-        primaryPrincipal = self.principalForRecord(record) if record and record.enabled else None
+        primaryPrincipal = self.principalForRecord(record)
         if primaryPrincipal is None:
             log.err("No principal found for UID: %s" % (name,))
             return None

Modified: CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml	2011-05-10 19:20:24 UTC (rev 7429)
+++ CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml	2011-05-11 20:44:02 UTC (rev 7430)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2006-2010 Apple Inc. All rights reserved.
+Copyright (c) 2006-2011 Apple Inc. All rights reserved.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -250,4 +250,11 @@
     <name>Non-calendar proxy</name>
     <email-address>non_calendar_proxy at example.com</email-address>
   </resource>
+  <resource>
+    <uid>disabled</uid>
+    <guid>disabled</guid>
+    <password>disabled</password>
+    <name>Disabled Record</name>
+    <email-address>disabled at example.com</email-address>
+  </resource>
 </accounts>

Modified: CalendarServer/trunk/twistedcaldav/directory/test/augments.xml
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/augments.xml	2011-05-10 19:20:24 UTC (rev 7429)
+++ CalendarServer/trunk/twistedcaldav/directory/test/augments.xml	2011-05-11 20:44:02 UTC (rev 7430)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-Copyright (c) 2009-2010 Apple Inc. All rights reserved.
+Copyright (c) 2009-2011 Apple Inc. All rights reserved.
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -144,6 +144,10 @@
     <enable-addressbook>true</enable-addressbook>
   </record>
   <record>
+    <uid>disabled</uid>
+    <enable>false</enable>
+  </record>
+  <record>
     <uid>7423F94A-6B76-4A3A-815B-D52CFD77935D</uid>
     <enable>true</enable>
     <enable-calendar>true</enable-calendar>

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py	2011-05-10 19:20:24 UTC (rev 7429)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py	2011-05-11 20:44:02 UTC (rev 7430)
@@ -1,5 +1,5 @@
 ##
-# Copyright (c) 2005-2010 Apple Inc. All rights reserved.
+# Copyright (c) 2005-2011 Apple Inc. All rights reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -120,7 +120,8 @@
                 # Handle records with mulitple shortNames
                 expected = []
                 for r in directory.listRecords(recordType):
-                    expected.extend(r.shortNames)
+                    if r.uid != "disabled":
+                        expected.extend(r.shortNames)
                 self.assertEquals(shortNames, set(expected))
 
                 for shortName in shortNames:
@@ -140,7 +141,8 @@
         Test of a test routine...
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            self.assertEquals(recordResource.record, record)
+            if record.enabled:
+                self.assertEquals(recordResource.record, record)
 
     ##
     # DirectoryPrincipalProvisioningResource
@@ -152,8 +154,11 @@
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
             principal = provisioningResource.principalForShortName(recordType, record.shortNames[0])
-            self.failIf(principal is None)
-            self.assertEquals(record, principal.record)
+            if record.enabled:
+                self.failIf(principal is None)
+                self.assertEquals(record, principal.record)
+            else:
+                self.failIf(principal is not None)
 
     def test_principalForUser(self):
         """
@@ -164,8 +169,11 @@
 
             for user in directory.listRecords(DirectoryService.recordType_users):
                 userResource = provisioningResource.principalForUser(user.shortNames[0])
-                self.failIf(userResource is None)
-                self.assertEquals(user, userResource.record)
+                if user.enabled:
+                    self.failIf(userResource is None)
+                    self.assertEquals(user, userResource.record)
+                else:
+                    self.failIf(userResource is not None)
 
     def test_principalForAuthID(self):
         """
@@ -177,8 +185,11 @@
             for user in directory.listRecords(DirectoryService.recordType_users):
                 creds = UsernamePassword(user.shortNames[0], "bogus")
                 userResource = provisioningResource.principalForAuthID(creds)
-                self.failIf(userResource is None)
-                self.assertEquals(user, userResource.record)
+                if user.enabled:
+                    self.failIf(userResource is None)
+                    self.assertEquals(user, userResource.record)
+                else:
+                    self.failIf(userResource is not None)
 
     def test_principalForUID(self):
         """
@@ -186,8 +197,11 @@
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
             principal = provisioningResource.principalForUID(record.uid)
-            self.failIf(principal is None)
-            self.assertEquals(record, principal.record)
+            if record.enabled:
+                self.failIf(principal is None)
+                self.assertEquals(record, principal.record)
+            else:
+                self.failIf(principal is not None)
 
     def test_principalForRecord(self):
         """
@@ -195,8 +209,11 @@
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
             principal = provisioningResource.principalForRecord(record)
-            self.failIf(principal is None, msg=str(record))
-            self.assertEquals(record, principal.record)
+            if record.enabled:
+                self.failIf(principal is None)
+                self.assertEquals(record, principal.record)
+            else:
+                self.failIf(principal is not None)
 
     def test_principalForCalendarUserAddress(self):
         """
@@ -205,13 +222,17 @@
         for (
             provisioningResource, recordType, recordResource, record
         ) in self._allRecords():
-            principalURL = recordResource.principalURL()
-            if principalURL.endswith("/"):
-                alternateURL = principalURL[:-1]
-            else:
-                alternateURL = principalURL + "/"
+        
+            test_items = tuple(record.calendarUserAddresses)
+            if recordResource:
+                principalURL = recordResource.principalURL()
+                if principalURL.endswith("/"):
+                    alternateURL = principalURL[:-1]
+                else:
+                    alternateURL = principalURL + "/"
+                test_items += (principalURL, alternateURL)
 
-            for address in tuple(record.calendarUserAddresses) + (principalURL, alternateURL):
+            for address in test_items:
                 principal = provisioningResource.principalForCalendarUserAddress(address)
                 if record.enabledForCalendaring:
                     self.failIf(principal is None)
@@ -254,7 +275,11 @@
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
             principal = provisioningResource.principalForRecord(record)
-            self.failIf(principal is None)
+            if record.enabled:
+                self.failIf(principal is None)
+            else:
+                self.failIf(principal is not None)
+                continue
             if record.enabledForCalendaring:
                 self.assertTrue(isinstance(principal, DirectoryCalendarPrincipalResource))
             else:
@@ -348,15 +373,17 @@
         that is an instance of DisabledCacheNotifier
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            self.failUnless(isinstance(recordResource.cacheNotifier,
-                                       DisabledCacheNotifier))
+            if record.enabled:
+                self.failUnless(isinstance(recordResource.cacheNotifier,
+                                           DisabledCacheNotifier))
 
     def test_displayName(self):
         """
         DirectoryPrincipalResource.displayName()
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            self.failUnless(recordResource.displayName())
+            if record.enabled:
+                self.failUnless(recordResource.displayName())
 
     @inlineCallbacks
     def test_groupMembers(self):
@@ -364,8 +391,9 @@
         DirectoryPrincipalResource.groupMembers()
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            members = yield recordResource.groupMembers()
-            self.failUnless(set(record.members()).issubset(set(r.record for r in members)))
+            if record.enabled:
+                members = yield recordResource.groupMembers()
+                self.failUnless(set(record.members()).issubset(set(r.record for r in members)))
 
     @inlineCallbacks
     def test_groupMemberships(self):
@@ -373,15 +401,17 @@
         DirectoryPrincipalResource.groupMemberships()
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            memberships = yield recordResource.groupMemberships()
-            self.failUnless(set(record.groups()).issubset(set(r.record for r in memberships if hasattr(r, "record"))))
+            if record.enabled:
+                memberships = yield recordResource.groupMemberships()
+                self.failUnless(set(record.groups()).issubset(set(r.record for r in memberships if hasattr(r, "record"))))
 
     def test_principalUID(self):
         """
         DirectoryPrincipalResource.principalUID()
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            self.assertEquals(record.guid, recordResource.principalUID())
+            if record.enabled:
+                self.assertEquals(record.guid, recordResource.principalUID())
 
     def test_calendarUserAddresses(self):
         """
@@ -523,8 +553,9 @@
         Default access controls for principals.
         """
         for provisioningResource, recordType, recordResource, record in self._allRecords():
-            for args in _authReadOnlyPrivileges(self, recordResource, recordResource.principalURL()):
-                yield self._checkPrivileges(*args)
+            if record.enabled:
+                for args in _authReadOnlyPrivileges(self, recordResource, recordResource.principalURL()):
+                    yield self._checkPrivileges(*args)
 
     @inlineCallbacks
     def test_defaultAccessControlList_provisioners(self):
@@ -627,8 +658,9 @@
 def _authReadOnlyPrivileges(self, resource, url):
     items = []
     for provisioningResource, recordType, recordResource, record in self._allRecords():
-        items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Read()  , True ))
-        items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Write() , False ))
+        if record.enabled:
+            items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Read()  , True ))
+            items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Write() , False ))
     items.append(( davxml.Unauthenticated() , davxml.Read()  , False ))
     items.append(( davxml.Unauthenticated() , davxml.Write() , False ))
             
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110511/ab3c5ffc/attachment-0001.html>


More information about the calendarserver-changes mailing list