[CalendarServer-changes] [8956] CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav /directory/opendirectorybacker.py

source_changes at macosforge.org source_changes at macosforge.org
Fri Mar 30 17:05:56 PDT 2012


Revision: 8956
          http://trac.macosforge.org/projects/calendarserver/changeset/8956
Author:   gaya at apple.com
Date:     2012-03-30 17:05:55 -0700 (Fri, 30 Mar 2012)
Log Message:
-----------
Clean up ABDirectoryQueryResult and its use

Modified Paths:
--------------
    CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py

Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py	2012-03-30 22:08:34 UTC (rev 8955)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py	2012-03-31 00:05:55 UTC (rev 8956)
@@ -232,25 +232,28 @@
             self._dsLocalRecords = []        
             for (recordShortName, value) in results: #@UnusedVariable
                 
-                record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, "/Local/Default")
+                try:
+                    record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, "/Local/Default")
+                except:
+                    traceback.print_exc()
+                    self.log_info("Could not get vcard for record %s" % (record,))
+                    
+                else:
+                    uid = record.vCard().getProperty("UID").value()
 
-                if self.ignoreSystemRecords:
-                    # remove system users and people
-                    if record.guid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
-                        self.log_info("Ignoring vcard for system record %s"  % (record,))
+                    if self.ignoreSystemRecords:
+                        # remove system users and people
+                        if uid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
+                            self.log_info("Ignoring vcard for system record %s"  % (record,))
+                            continue
+
+                    if uid in records:
+                        self.log_info("Record skipped due to duplicate UID: %s" % (record,))
                         continue
+                        
+                    self.log_debug("VCard text =\n%s" % (record.vCardText(), ))
+                    records[uid] = record                   
 
-                if record.guid in records:
-                    self.log_info("Record skipped due to conflict (duplicate uuid): %s" % (record,))
-                else:
-                    try:
-                        vCardText = record.vCardText()
-                    except:
-                        traceback.print_exc()
-                        self.log_info("Could not get vcard for record %s" % (record,))
-                    else:
-                        self.log_debug("VCard text =\n%s" % (vCardText, ))
-                        records[record.guid] = record                   
     
             return records
         
@@ -285,23 +288,33 @@
         
         for (recordShortName, value) in queryResults: #@UnusedVariable
             
-            record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, defaultNodeName=self.defaultNodeName, 
-                                 generateSimpleUIDs=self.generateSimpleUIDs, 
-                                 addDSAttrXProperties=self.addDSAttrXProperties,
-                                 appleInternalServer=self.appleInternalServer,
-                                 )
+            try:
+                record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, 
+                                     defaultNodeName=self.defaultNodeName, 
+                                     generateSimpleUIDs=self.generateSimpleUIDs, 
+                                     addDSAttrXProperties=self.addDSAttrXProperties,
+                                     appleInternalServer=self.appleInternalServer,
+                                     )
+            except:
+                traceback.print_exc()
+                self.log_info("Could not get vcard for record %s" % (record,))
+                
+            else:
+                uid = record.vCard().getProperty("UID").value()
 
-            if self.ignoreSystemRecords:
-                # remove system users and people
-                if record.guid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
-                    self.log_info("Ignoring vcard for system record %s"  % (record,))
+                if self.ignoreSystemRecords:
+                    # remove system users and people
+                    if uid.startswith("FFFFEEEE-DDDD-CCCC-BBBB-AAAA"):
+                        self.log_info("Ignoring vcard for system record %s"  % (record,))
+                        continue
+
+                if uid in records:
+                    self.log_info("Record skipped due to duplicate UID: %s" % (record,))
                     continue
+                    
+                self.log_debug("VCard text =\n%s" % (record.vCardText(), ))
+                records[uid] = record                   
         
-            if record.guid in records:
-                self.log_info("Ignoring vcard for record due to conflict (duplicate uuid): %s" % (record,))
-            else:
-                records[record.guid] = record                   
-        
         self.log_debug("After filtering, %s records (limited=%s)." % (len(records), limited))
         returnValue((records, limited, ))
 
@@ -450,20 +463,11 @@
             maxRecords = int(maxResults * 1.2)
             if self.maxDSQueryRecords and maxRecords > self.maxDSQueryRecords:
                 maxRecords = self.maxDSQueryRecords
-
+            
             records, limited = (yield self._getDirectoryRecords(dsFilter, attributes, maxRecords))
             
-            #filter out bad records --- should only happen during development
             for record in records.values():
-                try:
-                    vCardText = record.vCardText()
-                except:
-                    traceback.print_exc()
-                    self.log_info("Could not get vcard for record %s" % (record,))
-                else:
-                    if not record.firstValueForAttribute(dsattributes.kDSNAttrMetaNodeLocation).startswith("/Local"):
-                        self.log_debug("VCard text =\n%s" % (vCardText, ))
-                    queryRecords.append(record)
+                queryRecords.append(record)
                         
         returnValue((queryRecords, limited,))        
 
@@ -1002,9 +1006,6 @@
 
         self._directoryBackedAddressBook = directoryBackedAddressBook
         self._vCard = None
-        self._vCardText = None
-        self._uriName = None
-        self._hRef = None
         
         #clean attributes
         self.attributes = {}
@@ -1034,20 +1035,17 @@
                 guid =  ABDirectoryQueryResult.peopleUIDSeparator.join([nodeUUIDStr, nameUUIDStr,])
             
             self.attributes[dsattributes.kDS1AttrGeneratedUID] = guid
-        self.guid = guid
-            
         
+        #generate a vCard here.  May throw an exception
+        self.vCard()
         
 
 
     def __repr__(self):
-        return "<%s[%s(%s)] %s" % (
+        return "<%s[%s(%s)]>" % (
             self.__class__.__name__,
-            self.firstValueForAttribute(dsattributes.kDSNAttrRecordType),
-            self.firstValueForAttribute(dsattributes.kDSNAttrMetaNodeLocation),
-            self.guid,
-            #self.shortNames,
-            #self.fullName
+            self.vCard().getProperty("FN").value(),
+            self.vCard().getProperty("UID").value()
         )
     
     def __hash__(self):
@@ -1057,12 +1055,6 @@
               ])
         return hash(s)
 
-    """
-    def nextFileName(self):
-        self.renameCounter += 1
-        self.fileName = self.baseFileName + "-" + str(self.renameCounter)
-        self.fileNameLower = self.fileName.lower()
-    """
     
     def hasAttribute(self, attributeName ):
         return self.valuesForAttribute(attributeName, None) is not None
@@ -1468,9 +1460,10 @@
             # dsattributes.kDS1AttrGeneratedUID,        # Used for 36 character (128 bit) unique ID. Usually found in user, 
                                                         #      group, and computer records. An example value is "A579E95E-CDFE-4EBC-B7E7-F2158562170F".
                                                         #      The standard format contains 32 hex characters and four hyphen characters.
-            # !! don't use self.guid which is URL encoded
+                                                        
             vcard.addProperty(Property("UID", self.firstValueForAttribute(dsattributes.kDS1AttrGeneratedUID)))
     
+    
             # 3.6.8 URL Type Definition 
             # dsattributes.kDSNAttrURL,                    # List of URLs.
             # dsattributes.kDS1AttrWeblogURI,            # Single-valued attribute that defines the URI of a user's weblog.
@@ -1601,25 +1594,16 @@
         return self._vCard
     
     def vCardText(self):
-        if not self._vCardText:
-            self._vCardText = str(self.vCard())
-        
-        return self._vCardText
-
+        return str(self.vCard())
+    
     def uriName(self):
-        if not self._uriName:
-            self._uriName = self.vCard().getProperty("UID").value() + ".vcf"
-        #print("uriName():self._uriName=%s" % self._uriName)
-        return self._uriName
+        return self.vCard().getProperty("UID").value() + ".vcf"
         
-    
     def hRef(self, parentURI="/directory/"):
-        if not self._hRef:
-            self._hRef = davxml.HRef.fromString(joinURL(parentURI, self.uriName()))
-            
-        return self._hRef
-
-
+        # FIXME: Get the parent URI from self._directoryBackedAddressBook
+        return davxml.HRef.fromString(joinURL(parentURI, self.uriName()))
+ 
+                       
     def readProperty(self, property, request):
         
         if type(property) is tuple:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120330/4f84e0db/attachment-0001.html>


More information about the calendarserver-changes mailing list