[CalendarServer-changes] [2036] CalendarServer/branches/users/wsanchez/cache-miss/twistedcaldav/ directory/appleopendirectory.py

source_changes at macosforge.org source_changes at macosforge.org
Tue Dec 4 14:48:58 PST 2007


Revision: 2036
          http://trac.macosforge.org/projects/calendarserver/changeset/2036
Author:   wsanchez at apple.com
Date:     2007-12-04 14:48:48 -0800 (Tue, 04 Dec 2007)

Log Message:
-----------
Define __repr__ on OpenDirectoryRecord so that we can see what node the record came from.
More cosmetic cleanup.

Modified Paths:
--------------
    CalendarServer/branches/users/wsanchez/cache-miss/twistedcaldav/directory/appleopendirectory.py

Modified: CalendarServer/branches/users/wsanchez/cache-miss/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/users/wsanchez/cache-miss/twistedcaldav/directory/appleopendirectory.py	2007-12-04 22:24:13 UTC (rev 2035)
+++ CalendarServer/branches/users/wsanchez/cache-miss/twistedcaldav/directory/appleopendirectory.py	2007-12-04 22:48:48 UTC (rev 2036)
@@ -415,7 +415,6 @@
             return None
 
     def reloadCache(self, recordType, shortName=None):
-        
         if shortName:
             logging.info("Faulting record %s into %s record cache" % (shortName, recordType), system="OpenDirectoryService")
         else:
@@ -428,7 +427,7 @@
         disabled_names = set()
         disabled_guids = set()
 
-        for (key, value) in results:
+        for (recordShortName, value) in results:
             enabledForCalendaring = True
 
             if self.requireComputerRecord:
@@ -437,26 +436,27 @@
                         enabledForCalendaring = False
                         logging.debug(
                             "Group %s is not enabled for calendaring but may be used in ACLs"
-                            % (key,), system="OpenDirectoryService"
+                            % (recordShortName,), system="OpenDirectoryService"
                         )
                     else:
                         logging.err(
-                            "Directory (incorrectly) returned a record with no ServicesLocator attribute: %s"
-                            % (key,), system="OpenDirectoryService"
+                            "Directory (incorrectly) returned a record with no ServicesLocator attribute: (%s)%s"
+                            % (recordType, recordShortName), system="OpenDirectoryService"
                         )
                         continue
 
             # Now get useful record info.
-            recordShortName = key
-            guid = value.get(dsattributes.kDS1AttrGeneratedUID)
-            if not guid:
+            recordGUID     = value.get(dsattributes.kDS1AttrGeneratedUID)
+            recordFullName = value.get(dsattributes.kDS1AttrDistinguishedName)
+            recordNodeName = value.get(dsattributes.kDSNAttrMetaNodeLocation)
+
+            if not recordGUID:
+                logging.info("Record (%s)%s in node %s has no GUID; ignoring." % (recordType, recordShortName, recordNodeName))
                 continue
-            realName = value.get(dsattributes.kDS1AttrDistinguishedName)
-            nodename = value.get(dsattributes.kDSNAttrMetaNodeLocation)
 
             # Get calendar user addresses from directory record.
             if enabledForCalendaring:
-                calendarUserAddresses = self._calendarUserAddresses(recordType, key, value)
+                calendarUserAddresses = self._calendarUserAddresses(recordType, recordShortName, value)
             else:
                 calendarUserAddresses = ()
 
@@ -488,10 +488,10 @@
             record = OpenDirectoryRecord(
                 service               = self,
                 recordType            = recordType,
-                guid                  = guid,
-                nodename              = nodename,
+                guid                  = recordGUID,
+                nodeName              = recordNodeName,
                 shortName             = recordShortName,
-                fullName              = realName,
+                fullName              = recordFullName,
                 calendarUserAddresses = calendarUserAddresses,
                 autoSchedule          = autoSchedule,
                 enabledForCalendaring = enabledForCalendaring,
@@ -499,8 +499,11 @@
                 proxyGUIDs            = proxyGUIDs,
             )
 
+            del recordShortName
+            del recordGUID
+
             def disableRecord(record):
-                logging.warn("Record disabled due to conflicting records: %s" % (record,), system="OpenDirectoryService")
+                logging.warn("Record disabled due to conflict: %s" % (record,), system="OpenDirectoryService")
 
                 shortName = record.shortName
                 guid      = record.guid
@@ -514,25 +517,25 @@
                     del guids[guid]
 
             # Check for disabled items
-            if recordShortName in disabled_names or guid in disabled_guids:
+            if record.shortName in disabled_names or record.guid in disabled_guids:
                 disableRecord(record)
             else:
                 # Check for duplicate items and disable all names/guids for mismatched duplicates.
-                if recordShortName in records:
-                    existing_record = records[recordShortName]
-                elif guid in guids:
-                    existing_record = guids[guid]
+                if record.shortName in records:
+                    existing_record = records[record.shortName]
+                elif record.guid in guids:
+                    existing_record = guids[record.guid]
                 else:
                     existing_record = None
 
                 if existing_record is not None:
-                    if guid != existing_record.guid or recordShortName != existing_record.shortName:
+                    if record.guid != existing_record.guid or record.shortName != existing_record.shortName:
                         disableRecord(existing_record)
                         disableRecord(record)
 
-                if recordShortName not in disabled_names:
-                    records[recordShortName] = guids[guid] = record
-                    logging.debug("Populated record: %s" % (records[recordShortName],), system="OpenDirectoryService")
+                if record.shortName not in disabled_names:
+                    records[record.shortName] = guids[record.guid] = record
+                    logging.debug("Populated record: %s" % (records[record.shortName],), system="OpenDirectoryService")
 
         if shortName is None:
             #
@@ -589,7 +592,6 @@
             logging.info("Found %d records for %s record cache" % (len(self._records[recordType]["guids"]), recordType), system="OpenDirectoryService")
 
     def _queryDirectory(self, recordType, shortName=None):
-
         attrs = [
             dsattributes.kDS1AttrGeneratedUID,
             dsattributes.kDS1AttrDistinguishedName,
@@ -715,7 +717,7 @@
     Open Directory implementation of L{IDirectoryRecord}.
     """
     def __init__(
-        self, service, recordType, guid, nodename, shortName, fullName,
+        self, service, recordType, guid, nodeName, shortName, fullName,
         calendarUserAddresses, autoSchedule, enabledForCalendaring,
         memberGUIDs, proxyGUIDs,
     ):
@@ -729,10 +731,26 @@
             autoSchedule          = autoSchedule,
             enabledForCalendaring = enabledForCalendaring,
         )
-        self._nodename = nodename
+        self.nodeName = nodeName
         self._memberGUIDs = tuple(memberGUIDs)
         self._proxyGUIDs = tuple(proxyGUIDs)
 
+    def __repr__(self):
+        if self.service.realmName == self.nodeName:
+            location = self.nodeName
+        else:
+            location = "%s->%s" % (self.service.realmName, self.nodeName)
+
+        return "<%s[%s@%s(%s)] %s(%s) %r>" % (
+            self.__class__.__name__,
+            self.recordType,
+            self.service.guid,
+            location,
+            self.guid,
+            self.shortName,
+            self.fullName
+        )
+
     def members(self):
         if self.recordType != DirectoryService.recordType_groups:
             return
@@ -769,7 +787,7 @@
     def verifyCredentials(self, credentials):
         if isinstance(credentials, UsernamePassword):
             try:
-                return opendirectory.authenticateUserBasic(self.service.directory, self._nodename, self.shortName, credentials.password)
+                return opendirectory.authenticateUserBasic(self.service.directory, self.nodeName, self.shortName, credentials.password)
             except opendirectory.ODError, e:
                 logging.err("Open Directory (node=%s) error while performing basic authentication for user %s: %s"
                             % (self.service.realmName, self.shortName, e), system="OpenDirectoryService")
@@ -800,7 +818,7 @@
 
                 return opendirectory.authenticateUserDigest(
                     self.service.directory,
-                    self._nodename,
+                    self.nodeName,
                     self.shortName,
                     challenge,
                     response,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20071204/2c2570fa/attachment.html


More information about the calendarserver-changes mailing list