[CalendarServer-changes] [3908] CalendarServer/branches/users/sagen/directory-cache-on-demand-3897/ twistedcaldav/directory/cachingappleopendirectory.py

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 20 17:21:16 PDT 2009


Revision: 3908
          http://trac.macosforge.org/projects/calendarserver/changeset/3908
Author:   sagen at apple.com
Date:     2009-03-20 17:21:16 -0700 (Fri, 20 Mar 2009)
Log Message:
-----------
Missed some code when combining trunk changes with on-demand branch

Modified Paths:
--------------
    CalendarServer/branches/users/sagen/directory-cache-on-demand-3897/twistedcaldav/directory/cachingappleopendirectory.py

Modified: CalendarServer/branches/users/sagen/directory-cache-on-demand-3897/twistedcaldav/directory/cachingappleopendirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/directory-cache-on-demand-3897/twistedcaldav/directory/cachingappleopendirectory.py	2009-03-20 20:11:49 UTC (rev 3907)
+++ CalendarServer/branches/users/sagen/directory-cache-on-demand-3897/twistedcaldav/directory/cachingappleopendirectory.py	2009-03-21 00:21:16 UTC (rev 3908)
@@ -352,7 +352,19 @@
         },
     }
 
+    _toODRecordTypes = {
+        DirectoryService.recordType_users :
+            dsattributes.kDSStdRecordTypeUsers,
+        DirectoryService.recordType_locations :
+            dsattributes.kDSStdRecordTypePlaces,
+        DirectoryService.recordType_groups :
+            dsattributes.kDSStdRecordTypeGroups,
+        DirectoryService.recordType_resources :
+            dsattributes.kDSStdRecordTypeResources,
+    }
 
+    _fromODRecordTypes = dict([(b, a) for a, b in _toODRecordTypes.iteritems()])
+
     def recordsMatchingFields(self, fields, operand="or", recordType=None):
 
         # Note that OD applies case-sensitivity globally across the entire
@@ -381,16 +393,9 @@
                 ODField = self._ODFields[field]['odField']
                 excluded = excluded | self._ODFields[field]['excludes']
 
-        _ODTypes = {
-            self.recordType_users:     dsattributes.kDSStdRecordTypeUsers,
-            self.recordType_locations: dsattributes.kDSStdRecordTypePlaces,
-            self.recordType_groups:    dsattributes.kDSStdRecordTypeGroups,
-            self.recordType_resources: dsattributes.kDSStdRecordTypeResources,
-        }
-
         if recordType is None:
             # The client is looking for records in any of the four types
-            recordTypes = set(_ODTypes.values())
+            recordTypes = set(self._toODRecordTypes.values())
 
             # Certain query combinations yield invalid results.  In particular,
             # any time you query on EMailAddress and are specifying Places
@@ -404,14 +409,14 @@
             # The client is after only one recordType, so let's tailor the
             # query to not include any fields OD has trouble with:
             excludeFields = True
-            recordTypes = [_ODTypes[recordType]]
+            recordTypes = [self._toODRecordTypes[recordType]]
 
         expressions = []
         for field, value, caseless, matchType in fields:
             if field in self._ODFields:
 
                 if (excludeFields and
-                    _ODTypes[recordType] in self._ODFields[field]['excludes']):
+                    self._toODRecordTypes[recordType] in self._ODFields[field]['excludes']):
                     # This is a field we're excluding because it behaves badly
                     # for the record type result we're looking for.  Skip it.
                     continue
@@ -541,6 +546,9 @@
             # Now get useful record info.
             recordGUID           = value.get(dsattributes.kDS1AttrGeneratedUID)
             recordShortNames     = _uniqueTupleFromAttribute(value.get(dsattributes.kDSNAttrRecordName))
+            recordType           = value.get(dsattributes.kDSNAttrRecordType)
+            if isinstance(recordType, list):
+                recordType = recordType[0]
             recordAuthIDs        = _setFromAttribute(value.get(dsattributes.kDSNAttrAltSecurityIdentities))
             recordFullName       = value.get(dsattributes.kDS1AttrDistinguishedName)
             recordFirstName      = value.get(dsattributes.kDS1AttrFirstName)
@@ -548,6 +556,13 @@
             recordEmailAddresses = _setFromAttribute(value.get(dsattributes.kDSNAttrEMailAddress), lower=True)
             recordNodeName       = value.get(dsattributes.kDSNAttrMetaNodeLocation)
 
+            if not recordType:
+                self.log_debug("Record (unknown)%s in node %s has no recordType; ignoring."
+                    % (recordShortName, recordNodeName))
+                continue
+
+            recordType = self._fromODRecordTypes[recordType]
+
             if not recordGUID:
                 self.log_debug("Record (%s)%s in node %s has no GUID; ignoring."
                                % (recordType, recordShortName, recordNodeName))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090320/b344e5a7/attachment.html>


More information about the calendarserver-changes mailing list