[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