[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