[CalendarServer-changes] [13289] twext/trunk/twext/who/opendirectory/_service.py

source_changes at macosforge.org source_changes at macosforge.org
Tue Apr 15 15:06:05 PDT 2014


Revision: 13289
          http://trac.calendarserver.org//changeset/13289
Author:   wsanchez at apple.com
Date:     2014-04-15 15:06:05 -0700 (Tue, 15 Apr 2014)
Log Message:
-----------
Revert to r13280 because NO TESTS grr

Revision Links:
--------------
    http://trac.calendarserver.org//changeset/13280

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-04-15 21:50:44 UTC (rev 13288)
+++ twext/trunk/twext/who/opendirectory/_service.py	2014-04-15 22:06:05 UTC (rev 13289)
@@ -211,7 +211,7 @@
             self._node = node
 
 
-    def _queryStringFromMatchExpression(self, expression):
+    def _queryStringAndRecordTypeFromMatchExpression(self, expression):
         """
         Generates an OD query string from a match expression.
 
@@ -235,12 +235,10 @@
             notOp = u""
 
         # if MatchFlags.caseInsensitive not in flags:
-        #     raise QueryNotSupportedError(
-        #         "Case sensitive searches are not supported by LDAP"
-        #     )
+        #     raise NotImplementedError("Need to handle case sensitive")
 
         if expression.fieldName is self.fieldName.recordType:
-            return (notOp, ODRecordType.fromRecordType(expression.fieldValue))
+            return (notOp, ODRecordType.fromRecordType(expression.fieldValue).value)
 
         if expression.fieldName is self.fieldName.uid:
             odAttr = ODAttribute.guid
@@ -266,7 +264,7 @@
         )
 
 
-    def _queryStringFromCompoundExpression(self, expression, recordTypes):
+    def _queryStringAndRecordTypesFromCompoundExpression(self, expression, recordTypes):
         """
         Generates an OD query string from a compound expression.
 
@@ -280,11 +278,11 @@
         @rtype: (C{unicode}, set(C{unicode}))
         """
         if recordTypes is None:
-            recordTypes = set(ODRecordType.iterconstants())
+            recordTypes = set([t.value for t in ODRecordType.iterconstants()])
 
         queryTokens = []
         for subExpression in expression.expressions:
-            queryToken, subExpRecordTypes = self._queryStringFromExpression(
+            queryToken, subExpRecordTypes = self._queryStringAndRecordTypesFromExpression(
                 subExpression, recordTypes
             )
             if subExpRecordTypes:
@@ -319,7 +317,7 @@
         return (u"".join(queryTokens), recordTypes)
 
 
-    def _queryStringFromExpression(self, expression, recordTypes=None):
+    def _queryStringAndRecordTypesFromExpression(self, expression, recordTypes=set([t.value for t in ODRecordType.iterconstants()])):
         """
         Converts either a MatchExpression or a CompoundExpression into an LDAP
         query string.
@@ -335,12 +333,13 @@
         """
 
         if isinstance(expression, MatchExpression):
-            return self._queryStringFromMatchExpression(
+            queryString, recordType = self._queryStringAndRecordTypeFromMatchExpression(
                 expression
             )
+            return (queryString, recordType if recordType else recordTypes)
 
         if isinstance(expression, CompoundExpression):
-            return self._queryStringFromCompoundExpression(
+            return self._queryStringAndRecordTypesFromCompoundExpression(
                 expression, recordTypes
             )
 
@@ -360,19 +359,24 @@
         @rtype: L{ODQuery}
         """
 
-        queryString, recordTypes = self._queryStringFromExpression(expression)
+        queryString, recordTypes = self._queryStringAndRecordTypesFromExpression(
+            expression,
+        )
         if not recordTypes:
             return None
 
-        if queryString:
-            matchType = ODMatchType.compound.value
-        else:
-            matchType = ODMatchType.any.value
+        attributes = [a.value for a in ODAttribute.iterconstants()]
+        maxResults = 0
 
-        query, error = self._buildQuery(
-            recordTypes=recordTypes,
-            matchType=matchType,
-            queryString=queryString,
+        query, error = ODQuery.queryWithNode_forRecordTypes_attribute_matchType_queryValues_returnAttributes_maximumResults_error_(
+            self.node,
+            recordTypes,
+            None,
+            ODMatchType.compound.value if queryString else ODMatchType.any.value,
+            queryString,
+            attributes,
+            maxResults,
+            None
         )
 
         if error:
@@ -417,6 +421,9 @@
         else:
             caseInsensitive = 0x0
 
+        fetchAttributes = [a.value for a in ODAttribute.iterconstants()]
+        maxResults = 0
+
         # For OpenDirectory, use guid for uid:
         if expression.fieldName is self.fieldName.uid:
             expression.fieldName = self.fieldName.guid
@@ -430,9 +437,11 @@
                     "recordType argument does not match expression"
                 )
 
-            recordTypes = ODRecordType.fromRecordType(expression.fieldValue)
+            recordTypes = ODRecordType.fromRecordType(
+                expression.fieldValue
+            ).value
             if MatchFlags.NOT in flags:
-                recordTypes = None
+                recordTypes = set([t.value for t in ODRecordType.iterconstants()]) - recordTypes
 
             matchType = ODMatchType.any.value
             queryAttribute = None
@@ -443,9 +452,9 @@
                 raise NotImplementedError()
 
             if recordType is None:
-                recordTypes = None
+                recordTypes = [t.value for t in ODRecordType.iterconstants()]
             else:
-                recordTypes = (ODRecordType.fromRecordType(recordType),)
+                recordTypes = ODRecordType.fromRecordType(recordType).value
 
             queryAttribute = ODAttribute.fromFieldName(
                 expression.fieldName
@@ -458,11 +467,15 @@
             else:
                 queryValue = unicode(expression.fieldValue)
 
-        query, error = self._buildQuery(
-            recordTypes=recordTypes,
-            matchType=(matchType | caseInsensitive),
-            queryAttribute=queryAttribute,
-            queryString=queryValue,
+        query, error = ODQuery.queryWithNode_forRecordTypes_attribute_matchType_queryValues_returnAttributes_maximumResults_error_(
+            self.node,
+            recordTypes,
+            queryAttribute,
+            matchType | caseInsensitive,
+            queryValue,
+            fetchAttributes,
+            maxResults,
+            None
         )
 
         if error:
@@ -477,39 +490,6 @@
         return query
 
 
-    def _buildQuery(
-        self, recordTypes, matchType, queryString, queryAttribute=None
-    ):
-        if not hasattr(self, "_odQuery"):
-            self._odQuery = getattr(
-                ODQuery,
-                "queryWithNode_"
-                "forRecordTypes_"
-                "attribute_"
-                "matchType_"
-                "queryValues_"
-                "returnAttributes_"
-                "maximumResults_error_"
-            )
-
-        if not hasattr(self, "_odAttributes"):
-            self._odAttributes = [a.value for a in ODAttribute.iterconstants()]
-
-        if recordTypes is None:
-            recordTypes = ODRecordType.itervalues()
-
-        return self._odQuery(
-            self.node,                       # node
-            (t.value for t in recordTypes),  # record types
-            queryAttribute,                  # attribute
-            matchType,                       # matchType
-            queryString,                     # queryString
-            self._odAttributes,              # return attributes
-            0,                               # max results
-            None                             # error
-        )
-
-
     def _recordsFromQuery(self, query):
         """
         Executes a query and generates directory records from it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140415/75d7bdd4/attachment.html>


More information about the calendarserver-changes mailing list