[CalendarServer-changes] [14109] twext/trunk/twext/who/ldap

source_changes at macosforge.org source_changes at macosforge.org
Mon Oct 27 12:07:48 PDT 2014


Revision: 14109
          http://trac.calendarserver.org//changeset/14109
Author:   sagen at apple.com
Date:     2014-10-27 12:07:48 -0700 (Mon, 27 Oct 2014)
Log Message:
-----------
Allow an extra filter to be ANDed into all LDAP queries

Modified Paths:
--------------
    twext/trunk/twext/who/ldap/_service.py
    twext/trunk/twext/who/ldap/test/test_service.py

Modified: twext/trunk/twext/who/ldap/_service.py
===================================================================
--- twext/trunk/twext/who/ldap/_service.py	2014-10-27 17:06:27 UTC (rev 14108)
+++ twext/trunk/twext/who/ldap/_service.py	2014-10-27 19:07:48 UTC (rev 14109)
@@ -229,6 +229,7 @@
         useTLS=False,
         fieldNameToAttributesMap=DEFAULT_FIELDNAME_ATTRIBUTE_MAP,
         recordTypeSchemas=DEFAULT_RECORDTYPE_SCHEMAS,
+        extraFilter=None,
         ownThreadpool=True,
         threadPoolMax=10,
         connectionMax=10,
@@ -265,12 +266,18 @@
         @param recordTypeSchemas: Schema information for record types.
         @type recordTypeSchemas: mapping from L{NamedConstant} to
             L{RecordTypeSchema}
+
+        @param extraFilter: An extra filter fragment to AND in to any generated
+            queries.
+        @type extraFilter: L{unicode}
+
         """
 
         self.url = url
         self._baseDN = baseDN
         self._credentials = credentials
         self._timeout = timeout
+        self._extraFilter = extraFilter
 
         if tlsCACertificateFile is None:
             self._tlsCACertificateFile = None
@@ -580,6 +587,14 @@
         )
 
 
+    def _addExtraFilter(self, queryString):
+        if self._extraFilter:
+            queryString = "(&{extra}{query})".format(
+                extra=self._extraFilter, query=queryString
+            )
+        return queryString
+
+
     def _recordsFromQueryString_inThread(
         self, queryString, recordTypes=None,
         limitResults=None, timeoutSeconds=None
@@ -587,6 +602,9 @@
         """
         This method is always called in a thread.
         """
+
+        queryString = self._addExtraFilter(queryString)
+
         records = []
 
         with DirectoryService.Connection(self) as connection:

Modified: twext/trunk/twext/who/ldap/test/test_service.py
===================================================================
--- twext/trunk/twext/who/ldap/test/test_service.py	2014-10-27 17:06:27 UTC (rev 14108)
+++ twext/trunk/twext/who/ldap/test/test_service.py	2014-10-27 19:07:48 UTC (rev 14109)
@@ -443,7 +443,22 @@
         self.assertEquals(repr(service), u"<TestService u'ldap://localhost/'>")
 
 
+class ExtraFilterTest(BaseTestCase, unittest.TestCase):
 
+    def test_extra(self):
+        service = self.service(extraFilter="(foo=1)")
+        self.assertEquals(
+            "(&(foo=1)(bar=2))",
+            service._addExtraFilter("(bar=2)")
+        )
+
+        service = self.service(extraFilter=None)
+        self.assertEquals(
+            "(bar=2)",
+            service._addExtraFilter("(bar=2)")
+        )
+
+
 class RecordsFromReplyTest(BaseTestCase, unittest.TestCase):
 
     def test_boolean(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20141027/5119ca5e/attachment.html>


More information about the calendarserver-changes mailing list