[CalendarServer-changes] [12162] twext/trunk/twext/who
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 12 11:21:06 PDT 2014
Revision: 12162
http://trac.calendarserver.org//changeset/12162
Author: wsanchez at apple.com
Date: 2013-12-19 18:31:41 -0800 (Thu, 19 Dec 2013)
Log Message:
-----------
recordsFromCompoundExpression() calls recordsFromExpression() instead of recordsFromNonCompoundExpression() so as to handle nested CompoundExpressions.
This means we need to add the records argument to recordsFromExpression()...
Modified Paths:
--------------
twext/trunk/twext/who/aggregate.py
twext/trunk/twext/who/directory.py
twext/trunk/twext/who/opendirectory/_service.py
twext/trunk/twext/who/test/test_directory.py
Modified: twext/trunk/twext/who/aggregate.py
===================================================================
--- twext/trunk/twext/who/aggregate.py 2013-12-20 02:06:01 UTC (rev 12161)
+++ twext/trunk/twext/who/aggregate.py 2013-12-20 02:31:41 UTC (rev 12162)
@@ -78,10 +78,10 @@
return self._recordType
- def recordsFromExpression(self, expression):
+ def recordsFromExpression(self, expression, records=None):
ds = []
for service in self.services:
- d = service.recordsFromExpression(expression)
+ d = service.recordsFromExpression(expression, records=records)
ds.append(d)
def unwrapFirstError(f):
Modified: twext/trunk/twext/who/directory.py
===================================================================
--- twext/trunk/twext/who/directory.py 2013-12-20 02:06:01 UTC (rev 12161)
+++ twext/trunk/twext/who/directory.py 2013-12-20 02:31:41 UTC (rev 12162)
@@ -157,16 +157,27 @@
@inlineCallbacks
- def recordsFromCompoundExpression(self, expression):
+ def recordsFromCompoundExpression(self, expression, records=None):
"""
Finds records matching a compound expression.
@note: This method is called by L{recordsFromExpression} to handle
all L{CompoundExpression}s.
+ @note: This interface is the same as L{recordsFromExpression}, except
+ for the additional C{records} argument.
+
@param expression: an expression to apply
@type expression: L{CompoundExpression}
+ @param records: a set of records to limit the search to. C{None} if
+ the whole directory should be searched.
+ This is provided by L{recordsFromExpression} when it has already
+ narrowed down results to a set of records.
+ That is, it's a performance optimization; ignoring this and
+ searching the entire directory will also work.
+ @type records: L{set} or L{frozenset}
+
@return: The matching records.
@rtype: deferred iterable of L{IDirectoryRecord}s
@@ -182,7 +193,7 @@
returnValue(())
results = set((
- yield self.recordsFromNonCompoundExpression(subExpression)
+ yield self.recordsFromExpression(subExpression, records=records)
))
for subExpression in subExpressions:
@@ -196,9 +207,8 @@
records = None
recordsMatchingExpression = frozenset((
- yield self.recordsFromNonCompoundExpression(
- subExpression,
- records=records
+ yield self.recordsFromExpression(
+ subExpression, records=records
)
))
@@ -214,16 +224,18 @@
returnValue(results)
- @inlineCallbacks
- def recordsFromExpression(self, expression):
+ def recordsFromExpression(self, expression, records=None):
+ """
+ @note: This interface is the same as
+ L{IDirectoryService.recordsFromExpression}, except for the
+ additional C{records} argument.
+ """
if isinstance(expression, CompoundExpression):
- results = yield self.recordsFromCompoundExpression(expression)
+ return self.recordsFromCompoundExpression(expression)
else:
- results = yield self.recordsFromNonCompoundExpression(expression)
+ return self.recordsFromNonCompoundExpression(expression)
- returnValue(results)
-
def recordsWithFieldValue(self, fieldName, value):
return self.recordsFromExpression(
MatchExpression(fieldName, value)
Modified: twext/trunk/twext/who/opendirectory/_service.py
===================================================================
--- twext/trunk/twext/who/opendirectory/_service.py 2013-12-20 02:06:01 UTC (rev 12161)
+++ twext/trunk/twext/who/opendirectory/_service.py 2013-12-20 02:31:41 UTC (rev 12162)
@@ -532,7 +532,7 @@
- def recordsFromExpression(self, expression):
+ def recordsFromExpression(self, expression, records=None):
"""
@param expression: an expression to apply
@type expression: L{MatchExpression} or L{CompoundExpression}
Modified: twext/trunk/twext/who/test/test_directory.py
===================================================================
--- twext/trunk/twext/who/test/test_directory.py 2013-12-20 02:06:01 UTC (rev 12161)
+++ twext/trunk/twext/who/test/test_directory.py 2013-12-20 02:31:41 UTC (rev 12162)
@@ -54,11 +54,11 @@
super(StubDirectoryService, self).__init__(realmName)
self.records = RecordStorage(self, DirectoryRecord)
-
-
- def recordsFromExpression(self, expression):
self.seenExpressions = []
+
+ def recordsFromExpression(self, expression, records=None):
+ self.seenExpressions.append(expression)
return (
super(StubDirectoryService, self)
.recordsFromExpression(expression)
@@ -75,8 +75,6 @@
will match records that have an email address ending with the
given expression.
"""
- self.seenExpressions.append(expression)
-
if expression == u"None":
return succeed([])
@@ -368,24 +366,24 @@
"""
service = self.service()
- result = yield service.recordsFromExpression(
- CompoundExpression(
- (
- u"twistedmatrix.com",
- u"None",
- u"calendarserver.org",
- ),
- Operand.AND
- )
+ compoundExpression = CompoundExpression(
+ (
+ u"twistedmatrix.com",
+ u"None",
+ u"calendarserver.org",
+ ),
+ Operand.AND
)
+ result = yield service.recordsFromExpression(compoundExpression)
+
self.assertEquals(
set(()),
set((record.uid for record in result))
)
self.assertEquals(
- [u"twistedmatrix.com", u"None"],
+ [compoundExpression, u"twistedmatrix.com", u"None"],
service.seenExpressions
)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/cc6a3021/attachment.html>
More information about the calendarserver-changes
mailing list