[CalendarServer-changes] [9017] CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav /directory/ldapdirectorybacker.py
source_changes at macosforge.org
source_changes at macosforge.org
Tue Apr 10 14:33:31 PDT 2012
Revision: 9017
http://trac.macosforge.org/projects/calendarserver/changeset/9017
Author: gaya at apple.com
Date: 2012-04-10 14:33:30 -0700 (Tue, 10 Apr 2012)
Log Message:
-----------
ignore results with duplicate uids
Modified Paths:
--------------
CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py
Modified: CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py
===================================================================
--- CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py 2012-04-10 21:17:16 UTC (rev 9016)
+++ CalendarServer/branches/users/gaya/ldapdirectorybacker/twistedcaldav/directory/ldapdirectorybacker.py 2012-04-10 21:33:30 UTC (rev 9017)
@@ -257,7 +257,7 @@
resultsDictionary[uid] = result
self.log_debug("%s results (limited=%s)." % (len(resultsDictionary), limited))
- returnValue((resultsDictionary.values(), limited, ))
+ returnValue((resultsDictionary, limited, ))
@inlineCallbacks
def doAddressBookQuery(self, addressBookFilter, addressBookQuery, maxResults ):
@@ -265,9 +265,8 @@
Get vCards for a given addressBookFilter and addressBookQuery
"""
- results = []
+ resultsDictionary = {}
limited = False
- remainingMaxResults = maxResults
#one ldap query for each rnd in queries
for queryMap in self.rdnSchema["queries"]:
@@ -309,30 +308,35 @@
# keep trying ldap query till we get results based on filter. Especially when doing "all results" query
- remainingMaxResults = maxResults - len(results) if maxResults else 0
+ remainingMaxResults = maxResults - len(resultsDictionary) if maxResults else 0
maxLdapResults = int(remainingMaxResults * 1.2)
while True:
- ldapQueryResults, ldapQueryLimited = (yield self._getLdapQueryResults(base=base, queryStr=queryStr, attributes=attributes, maxResults=maxLdapResults, ldapAttrToDSAttrMap=ldapAttrToDSAttrMap))
+ ldapQueryResultsDictionary, ldapQueryLimited = (yield self._getLdapQueryResults(base=base, queryStr=queryStr, attributes=attributes, maxResults=maxLdapResults, ldapAttrToDSAttrMap=ldapAttrToDSAttrMap))
- filteredResults = []
- for ldapQueryResult in ldapQueryResults:
- # to do: filter duplicate UIDs
- if addressBookFilter.match(ldapQueryResult.vCard()):
- filteredResults.append(ldapQueryResult)
- else:
- self.log_debug("doAddressBookQuery did not match filter: %s (%s)" % (ldapQueryResult.vCard().propertyValue("FN"), ldapQueryResult.vCard().propertyValue("UID"),))
+ for uid, ldapQueryResult in ldapQueryResultsDictionary.iteritems():
+
+ if uid in resultsDictionary:
+ self.log_info("Record skipped due to duplicate UID: %s" % (dn,))
+ continue
+ if not addressBookFilter.match(ldapQueryResult.vCard()):
+ self.log_debug("doAddressBookQuery did not match filter: %s (%s)" % (ldapQueryResult.vCard().propertyValue("FN"), uid,))
+ continue
+
+ resultsDictionary[uid] = ldapQueryResult
+
+
#no more results
if not ldapQueryLimited:
break;
# more than requested results
- if maxResults and len(filteredResults) > remainingMaxResults:
+ if maxResults and len(resultsDictionary) >= maxResults:
break
# more than max report results
- if len(filteredResults) > config.MaxQueryWithDataResults:
+ if len(resultsDictionary) >= config.MaxQueryWithDataResults:
break
# more than self limit
@@ -344,13 +348,12 @@
if self.maxQueryResults and maxLdapResults > self.maxQueryResults:
maxLdapResults = self.maxQueryResults
- results += filteredResults
- if maxResults and len(results) > maxResults:
+ if maxResults and len(resultsDictionary) >= maxResults:
break
- limited = maxResults and len(results) >= maxResults
+ limited = maxResults and len(resultsDictionary) >= maxResults
- self.log_info("limited %s len(results) %s" % (limited,len(results),))
- returnValue((results, limited,))
+ self.log_info("limited %s len(resultsDictionary) %s" % (limited,len(resultsDictionary),))
+ returnValue((resultsDictionary.values(), limited,))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120410/e8dc5f54/attachment.html>
More information about the calendarserver-changes
mailing list