[CalendarServer-changes] [8960] CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav /directory

source_changes at macosforge.org source_changes at macosforge.org
Mon Apr 2 14:36:47 PDT 2012


Revision: 8960
          http://trac.macosforge.org/projects/calendarserver/changeset/8960
Author:   gaya at apple.com
Date:     2012-04-02 14:36:47 -0700 (Mon, 02 Apr 2012)
Log Message:
-----------
change "record" to "result" when referring to ABDirectoryQueryResult

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

Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py	2012-04-02 21:15:14 UTC (rev 8959)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py	2012-04-02 21:36:47 UTC (rev 8960)
@@ -75,7 +75,7 @@
 
             },
             "appleInternalServer":False,    # does magic in ABDirectoryQueryResult
-            "maxQueryRecords":0,            # max records returned
+            "maxQueryResults":0,            # max records returned
             "fakeETag":True,                # eTag is fake, otherwise it is md5(all attributes)
             "generateSimpleUIDs":False,     # if UID is faked, use simple method for generating
        }
@@ -97,8 +97,8 @@
         del params["directoryBackedAddressBook"]
         appleInternalServer=params["appleInternalServer"]
         del params["appleInternalServer"] 
-        maxQueryRecords=params["maxQueryRecords"]
-        del params["maxQueryRecords"]
+        maxQueryResults=params["maxQueryResults"]
+        del params["maxQueryResults"]
         fakeETag=params["fakeETag"]
         del params["fakeETag"]
         generateSimpleUIDs=params["generateSimpleUIDs"]
@@ -133,7 +133,7 @@
         assert directoryBackedAddressBook is not None
         self.directoryBackedAddressBook = directoryBackedAddressBook
         
-        self.maxQueryRecords = maxQueryRecords
+        self.maxQueryResults = maxQueryResults
 
                 
         self.realmName = None # needed for super        
@@ -197,13 +197,13 @@
         Get vCards for a given addressBookFilter and addressBookQuery
         """
     
-        queryRecords = []
+        queryResults = []
         limited = False
 
-         #calc maxRecords from passed in maxResults allowing extra for second stage filtering in caller
-        maxRecords = int(maxResults * 1.2)
-        if self.maxQueryRecords and maxRecords > self.maxQueryRecords:
-            maxRecords = self.maxQueryRecords
+         #calc maxResults from passed in maxResults allowing extra for second stage filtering in caller
+        maxResults = int(maxResults * 1.2)
+        if self.maxQueryResults and maxResults > self.maxQueryResults:
+            maxResults = self.maxQueryResults
 
         for queryMap in self.rdnSchema["queries"]:
 
@@ -242,18 +242,18 @@
                 elif dsFilter:
                     filterstr = dsFilter.generate()
                 
-                # can't resist also using a timeout, 1 sec per requested record for now
-                timeout = maxRecords
+                # can't resist also using a timeout, 1 sec per request result for now
+                timeout = maxResults
 
-                self.log_debug("doAddressBookQuery:LDAP query base=%s and filter=%s and attributes=%s timeout=%s resultLimit=%s" % (ldap.dn.dn2str(base), filterstr, attributes, timeout, maxRecords))
+                self.log_debug("doAddressBookQuery:LDAP query base=%s and filter=%s and attributes=%s timeout=%s resultLimit=%s" % (ldap.dn.dn2str(base), filterstr, attributes, timeout, maxResults))
                 
-                ldapSearchResult = (yield self.timedSearch(ldap.dn.dn2str(base), ldap.SCOPE_SUBTREE, filterstr=filterstr, attrlist=attributes, timeoutSeconds=timeout, resultLimit=maxRecords))
+                ldapSearchResult = (yield self.timedSearch(ldap.dn.dn2str(base), ldap.SCOPE_SUBTREE, filterstr=filterstr, attrlist=attributes, timeoutSeconds=timeout, resultLimit=maxResults))
     
                 self.log_debug("doAddressBookQuery: ldapSearchResult=%s" % (ldapSearchResult,))
                 
                 for dn, ldapAttributes in ldapSearchResult:
                     #dn = normalizeDNstr(dn)
-                    dsRecord = None
+                    result = None
                     try:
                         # make a dsRecordAttributes dict from the ldap attributes
                         dsRecordAttributes = {}
@@ -285,22 +285,21 @@
                                         self.log_debug("doAddressBookQuery: dsRecordAttributes[%s] = %s" % (dsAttributeName, dsRecordAttributes[dsAttributeName],))
  
                         # get a record for dsRecordAttributes 
-                        dsRecord = ABDirectoryQueryResult(self.directoryBackedAddressBook, dsRecordAttributes, defaultNodeName=None, generateSimpleUIDs=self.generateSimpleUIDs, appleInternalServer=self.appleInternalServer)
-                        vCardText = dsRecord.vCardText()
+                        result = ABDirectoryQueryResult(self.directoryBackedAddressBook, dsRecordAttributes, defaultNodeName=None, generateSimpleUIDs=self.generateSimpleUIDs, appleInternalServer=self.appleInternalServer)
                     except:
                         traceback.print_exc()
-                        self.log_info("Could not get vcard for ds record %s" % (dsRecord,))
+                        self.log_info("Could not get vcard for %s" % (dn,))
                     else:
-                        self.log_debug("doAddressBookQuery: VCard text =\n%s" % (vCardText, ))
-                        queryRecords.append(dsRecord)
+                        self.log_debug("doAddressBookQuery: VCard text =\n%s" % (result.vCardText(),))
+                        queryResults.append(result)
                 
                 # only get requested number of record results
-                maxRecords -= len(ldapSearchResult)
-                if maxRecords <= 0:
+                maxResults -= len(ldapSearchResult)
+                if maxResults <= 0:
                     limited = True
                     break
 
                          
-        self.log_info("limited  %s len(queryRecords) %s" % (limited,len(queryRecords),))
-        returnValue((queryRecords, limited,))        
+        self.log_info("limited  %s len(queryResults) %s" % (limited,len(queryResults),))
+        returnValue((queryResults, limited,))        
 

Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py	2012-04-02 21:15:14 UTC (rev 8959)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/opendirectorybacker.py	2012-04-02 21:36:47 UTC (rev 8960)
@@ -206,11 +206,11 @@
     def createCache(self):
          succeed(None)
 
-    def _getDSLocalRecords(self):
+    def _getAllDSLocalResults(self):
         
-        def generateDSLocalRecords():
+        def generateDSLocalResults():
                         
-            records = {}
+            resultsDictionary = {}
             
             recordTypes = [dsattributes.kDSStdRecordTypePeople, dsattributes.kDSStdRecordTypeUsers, ]
             try:
@@ -220,7 +220,7 @@
                         recordTypes,
                         self.returnedAttributes,
                     ))
-                results = list(self.odModule.listAllRecordsWithAttributes_list(
+                records = list(self.odModule.listAllRecordsWithAttributes_list(
                         localNodeDirectory,
                         recordTypes,
                         self.returnedAttributes,
@@ -230,39 +230,39 @@
                 raise
             
             self._dsLocalRecords = []        
-            for (recordShortName, value) in results: #@UnusedVariable
+            for (recordShortName, value) in records: #@UnusedVariable
                 
                 try:
-                    record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, "/Local/Default")
+                    result = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, defaultNodeName="/Local/Default")
                 except:
                     traceback.print_exc()
-                    self.log_info("Could not get vcard for record %s" % (record,))
+                    self.log_info("Could not get vcard for record %s" % (recordShortName,))
                     
                 else:
-                    uid = record.vCard().getProperty("UID").value()
+                    uid = result.vCard().getProperty("UID").value()
 
                     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,))
+                            self.log_info("Ignoring vcard for system record %s"  % (recordShortName,))
                             continue
 
-                    if uid in records:
-                        self.log_info("Record skipped due to duplicate UID: %s" % (record,))
+                    if uid in resultsDictionary:
+                        self.log_info("Record skipped due to duplicate UID: %s" % (recordShortName,))
                         continue
                         
-                    self.log_debug("VCard text =\n%s" % (record.vCardText(), ))
-                    records[uid] = record                   
+                    self.log_debug("VCard text =\n%s" % (result.vCardText(), ))
+                    resultsDictionary[uid] = result                   
 
     
-            return records
+            return resultsDictionary
         
 
         if not self.queryDSLocal:
             return {}
         
         if time.time() > self._nextDSLocalQueryTime:
-            self._dsLocalRecords = generateDSLocalRecords()
+            self._dsLocalRecords = generateDSLocalResults()
             # Add jitter/fuzz factor 
             self._nextDSLocalQueryTime = time.time() + self.dsLocalCacheTimeout * (random() + 0.5)  * 60
 
@@ -270,26 +270,26 @@
     
 
     @inlineCallbacks
-    def _getDirectoryRecords(self, query=None, attributes=None, maxRecords=0 ):
+    def _getDirectoryQueryResults(self, query=None, attributes=None, maxRecords=0 ):
         """
         Get a list of filtered ABDirectoryQueryResult for the given query with the given attributes.
         query == None gets all records. attribute == None gets ABDirectoryQueryResult.allDSQueryAttributes
         """
         limited = False
-        queryResults = (yield self._queryDirectory(query, attributes, maxRecords ))
-        if maxRecords and len(queryResults) >= maxRecords:
+        records = (yield self._queryDirectory(query, attributes, maxRecords ))
+        if maxRecords and len(records) >= maxRecords:
             limited = True
             self.log_debug("Directory address book record limit (= %d) reached." % (maxRecords, ))
 
-        self.log_debug("Query done. Inspecting %s results" % len(queryResults))
+        self.log_debug("Query done. Inspecting %s records" % len(records))
 
-        records = self._getDSLocalRecords().copy()
-        self.log_debug("Adding %s DSLocal results" % len(records.keys()))
+        resultsDictionary = self._getAllDSLocalResults().copy()
+        self.log_debug("Adding %s DSLocal results" % len(resultsDictionary.keys()))
         
-        for (recordShortName, value) in queryResults: #@UnusedVariable
+        for (recordShortName, value) in records: #@UnusedVariable
             
             try:
-                record = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, 
+                result = ABDirectoryQueryResult(self.directoryBackedAddressBook, value, 
                                      defaultNodeName=self.defaultNodeName, 
                                      generateSimpleUIDs=self.generateSimpleUIDs, 
                                      addDSAttrXProperties=self.addDSAttrXProperties,
@@ -297,26 +297,26 @@
                                      )
             except:
                 traceback.print_exc()
-                self.log_info("Could not get vcard for record %s" % (record,))
+                self.log_info("Could not get vcard for record %s" % (recordShortName,))
                 
             else:
-                uid = record.vCard().getProperty("UID").value()
+                uid = result.vCard().getProperty("UID").value()
 
                 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,))
+                        self.log_info("Ignoring vcard for system record %s"  % (recordShortName,))
                         continue
 
-                if uid in records:
-                    self.log_info("Record skipped due to duplicate UID: %s" % (record,))
+                if uid in resultsDictionary:
+                    self.log_info("Record skipped due to duplicate UID: %s" % (recordShortName,))
                     continue
                     
-                self.log_debug("VCard text =\n%s" % (record.vCardText(), ))
-                records[uid] = record                   
+                self.log_debug("VCard text =\n%s" % (result.vCardText(), ))
+                resultsDictionary[uid] = result                   
         
-        self.log_debug("After filtering, %s records (limited=%s)." % (len(records), limited))
-        returnValue((records, limited, ))
+        self.log_debug("After filtering, %s results (limited=%s)." % (len(resultsDictionary), limited))
+        returnValue((resultsDictionary.values(), limited, ))
 
 
     def _queryDirectory(self, query=None, attributes=None, maxRecords=0 ):
@@ -452,10 +452,24 @@
             dsFilter = None #  None expression == all Records
         clear = not allRecords and not dsFilter
         
-        queryRecords = []
+        results = []
         limited = False
 
         if not clear:
+            
+            # add filter to ignore system records rather than post filtering
+            # but this appears to be broken in open directory
+            '''
+            if self.ignoreSystemRecords:
+                ignoreExpression = dsquery.expression( dsquery.expression.NOT, 
+                                                       dsquery.match(dsattributes.kDS1AttrGeneratedUID, "FFFFEEEE-DDDD-CCCC-BBBB-AAAA", dsattributes.eDSStartsWith)
+                                                       )
+                filterAttributes = list(set(filterAttributes).union(dsattributes.kDS1AttrGeneratedUID))
+                
+                dsFilter = dsquery.expression( dsquery.expression.AND, (dsFilter, ignoreExpression,) ) if dsFilter else ignoreExpression
+                #dsFilter = ignoreExpression
+            '''
+
             queryAttributes = self._attributesForAddressBookQuery( addressBookQuery )
             attributes = filterAttributes + queryAttributes
             
@@ -464,12 +478,9 @@
             if self.maxDSQueryRecords and maxRecords > self.maxDSQueryRecords:
                 maxRecords = self.maxDSQueryRecords
             
-            records, limited = (yield self._getDirectoryRecords(dsFilter, attributes, maxRecords))
-            
-            for record in records.values():
-                queryRecords.append(record)
+            results, limited = (yield self._getDirectoryQueryResults(dsFilter, attributes, maxRecords))
                         
-        returnValue((queryRecords, limited,))        
+        returnValue((results, limited,))        
 
 
 #utility
@@ -520,6 +531,7 @@
                 else:
                     matchList = list(set([dsquery.match(attrName, "", dsattributes.eDSStartsWith) for attrName in allAttrStrings]))
                     if defined:
+                        # TODO:  Investigate what happens when andOrExpresion() does not return an expression
                         return andOrExpression(allOf, queryAttributes, matchList)
                     else:
                         if len(matchList) > 1:

Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/xmldirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/xmldirectorybacker.py	2012-04-02 21:15:14 UTC (rev 8959)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/xmldirectorybacker.py	2012-04-02 21:36:47 UTC (rev 8960)
@@ -272,18 +272,16 @@
                                 pass
                         return dsRecordAttributes
 
-                    dsRecord = None
+                    result = None
                     dsRecordAttributes = dsRecordAttributesFromDirectoryRecord( xmlDirectoryRecord )
                     try:
-                        dsRecord = ABDirectoryQueryResult(self.directoryBackedAddressBook, dsRecordAttributes,)
-                        vCardText = dsRecord.vCardText()
-                   
+                        result = ABDirectoryQueryResult(self.directoryBackedAddressBook, dsRecordAttributes,)
                     except:
                         traceback.print_exc()
-                        self.log_info("Could not get vcard for ds record %s" % (dsRecord,))
+                        self.log_info("Could not get vcard for %s" % (xmlDirectoryRecord,))
                     else:
-                        self.log_debug("doAddressBookQuery: VCard text =\n%s" % (vCardText, ))
-                        queryResults.append(dsRecord)
+                        self.log_debug("doAddressBookQuery: VCard text =\n%s" % (result.vCardText(),))
+                        queryResults.append(result)
                 
                 
                 # only get requested number of record results
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120402/47893847/attachment-0001.html>


More information about the calendarserver-changes mailing list