[CalendarServer-changes] [13835] twext/trunk/twext/who/opendirectory/_service.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Aug 4 17:17:30 PDT 2014
Revision: 13835
http://trac.calendarserver.org//changeset/13835
Author: sagen at apple.com
Date: 2014-08-04 17:17:30 -0700 (Mon, 04 Aug 2014)
Log Message:
-----------
deferToThread for OD queries
Modified Paths:
--------------
twext/trunk/twext/who/opendirectory/_service.py
Modified: twext/trunk/twext/who/opendirectory/_service.py
===================================================================
--- twext/trunk/twext/who/opendirectory/_service.py 2014-08-05 00:15:20 UTC (rev 13834)
+++ twext/trunk/twext/who/opendirectory/_service.py 2014-08-05 00:17:30 UTC (rev 13835)
@@ -25,6 +25,7 @@
from zope.interface import implementer
from twisted.internet.defer import succeed, fail, inlineCallbacks, returnValue
+from twisted.internet.threads import deferToThread
from twisted.web.guard import DigestCredentialFactory
from twext.python.log import Logger
@@ -52,6 +53,7 @@
ODSearchPath, ODRecordType, ODAttribute, ODMatchType, ODAuthMethod,
)
+DEFER_TO_THREAD = True
#
@@ -641,6 +643,7 @@
return False
+ @inlineCallbacks
def _recordsFromQuery(self, query):
"""
Executes a query and generates directory records from it.
@@ -652,23 +655,35 @@
@rtype: list of L{DirectoryRecord}
"""
- # FIXME: This is blocking.
# We can call scheduleInRunLoop:forMode:, which will call back to
# its delegate...
if query is None:
- return succeed([])
+ returnValue(None)
- odRecords, error = query.resultsAllowingPartial_error_(False, None)
+ if DEFER_TO_THREAD:
+ odRecords, error = (
+ yield deferToThread(
+ query.resultsAllowingPartial_error_,
+ False,
+ None
+ )
+ )
+ else:
+ odRecords, error = query.resultsAllowingPartial_error_(False, None)
if error:
self.log.error(
"Error while executing OpenDirectory query: {error}",
error=error
)
- return fail(OpenDirectoryQueryError(
- "Unable to execute OpenDirectory query", error
- ))
+ returnValue(
+ fail(
+ OpenDirectoryQueryError(
+ "Unable to execute OpenDirectory query", error
+ )
+ )
+ )
result = []
for odRecord in odRecords:
@@ -689,7 +704,7 @@
result.append(record)
- return succeed(result)
+ returnValue(result)
def recordsFromNonCompoundExpression(self, expression, recordTypes=None, records=None):
@@ -974,15 +989,27 @@
# Verifiers for twext.who.checker stuff.
#
+ @inlineCallbacks
def verifyPlaintextPassword(self, password):
- result, error = self._odRecord.verifyPassword_error_(password, None)
+ if DEFER_TO_THREAD:
+ result, error = (
+ yield deferToThread(
+ self._odRecord.verifyPassword_error_,
+ password,
+ None
+ )
+ )
+ else:
+ result, error = self._odRecord.verifyPassword_error_(password, None)
+
if error:
- return succeed(False)
+ returnValue(False)
- return succeed(result)
+ returnValue(result)
+ @inlineCallbacks
def verifyHTTPDigest(
self, username, realm, uri, nonce, cnonce,
algorithm, nc, qop, response, method,
@@ -1016,16 +1043,26 @@
response=response
)
- result, _ignore_m1, _ignore_m2, error = self._odRecord.verifyExtendedWithAuthenticationType_authenticationItems_continueItems_context_error_(
- ODAuthMethod.digestMD5.value,
- [username, challenge, responseArg, method],
- None, None, None
- )
+ if DEFER_TO_THREAD:
+ result, _ignore_m1, _ignore_m2, error = (
+ yield deferToThread(
+ self._odRecord.verifyExtendedWithAuthenticationType_authenticationItems_continueItems_context_error_,
+ ODAuthMethod.digestMD5.value,
+ [username, challenge, responseArg, method],
+ None, None, None
+ )
+ )
+ else:
+ result, _ignore_m1, _ignore_m2, error = self._odRecord.verifyExtendedWithAuthenticationType_authenticationItems_continueItems_context_error_(
+ ODAuthMethod.digestMD5.value,
+ [username, challenge, responseArg, method],
+ None, None, None
+ )
if error:
- return succeed(False)
+ returnValue(False)
- return succeed(result)
+ returnValue(result)
@inlineCallbacks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140804/dc398e7b/attachment-0001.html>
More information about the calendarserver-changes
mailing list