[CalendarServer-changes] [11541] CalendarServer/trunk/twistedcaldav/directory

source_changes at macosforge.org source_changes at macosforge.org
Fri Jul 19 23:51:19 PDT 2013


Revision: 11541
          http://trac.calendarserver.org//changeset/11541
Author:   sagen at apple.com
Date:     2013-07-19 23:51:19 -0700 (Fri, 19 Jul 2013)
Log Message:
-----------
Adds three new "contexts" to calendar-principal-search for limiting the scope of the results:  "user", "group", "resource".  We already had "location" and "attendee".

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
    CalendarServer/trunk/twistedcaldav/directory/directory.py
    CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_buildquery.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py
    CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2013-07-19 15:40:18 UTC (rev 11540)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2013-07-20 06:51:19 UTC (rev 11541)
@@ -1314,14 +1314,17 @@
     if len(tokens) == 0:
         return None
 
-    fields = ["fullName", "emailAddresses"]
+    fields = [
+        ("fullName", dsattributes.eDSContains),
+        ("emailAddresses", dsattributes.eDSStartsWith),
+    ]
 
     results = []
     for token in tokens:
         queries = []
-        for field in fields:
+        for field, comparison in fields:
             ODField = mapping[field]['odField']
-            query = dsquery.match(ODField, token, "contains")
+            query = dsquery.match(ODField, token, comparison)
             queries.append(query)
         results.append(dsquery.expression(dsquery.expression.OR, queries))
     return results

Modified: CalendarServer/trunk/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/directory.py	2013-07-19 15:40:18 UTC (rev 11540)
+++ CalendarServer/trunk/twistedcaldav/directory/directory.py	2013-07-20 06:51:19 UTC (rev 11541)
@@ -88,6 +88,9 @@
     recordType_resources = "resources"
 
     searchContext_location = "location"
+    searchContext_resource = "resource"
+    searchContext_user     = "user"
+    searchContext_group    = "group"
     searchContext_attendee = "attendee"
 
     aggregateService = None
@@ -275,13 +278,19 @@
         """
         Map calendarserver-principal-search REPORT context value to applicable record types
 
-        @param context: The context value to map (either "location" or "attendee")
+        @param context: The context value to map
         @type context: C{str}
         @returns: The list of record types the context maps to
         @rtype: C{list} of C{str}
         """
         if context == self.searchContext_location:
             recordTypes = [self.recordType_locations]
+        elif context == self.searchContext_resource:
+            recordTypes = [self.recordType_resources]
+        elif context == self.searchContext_user:
+            recordTypes = [self.recordType_users]
+        elif context == self.searchContext_group:
+            recordTypes = [self.recordType_groups]
         elif context == self.searchContext_attendee:
             recordTypes = [self.recordType_users, self.recordType_groups,
                 self.recordType_resources]

Modified: CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py	2013-07-19 15:40:18 UTC (rev 11540)
+++ CalendarServer/trunk/twistedcaldav/directory/ldapdirectory.py	2013-07-20 06:51:19 UTC (rev 11541)
@@ -1437,16 +1437,20 @@
     if len(tokens) == 0:
         return None
 
-    attributes = ["fullName", "emailAddresses"]
+    attributes = [
+        ("fullName", "(%s=*%s*)"),
+        ("emailAddresses", "(%s=%s*)"),
+    ]
 
     ldapFields = []
-    for attribute in attributes:
+    for attribute, template in attributes:
         ldapField = mapping.get(attribute, None)
         if ldapField:
             if isinstance(ldapField, str):
-                ldapFields.append(ldapField)
+                ldapFields.append((ldapField, template))
             else:
-                ldapFields.extend(ldapField)
+                for lf in ldapField:
+                    ldapFields.append((lf, template))
 
     if len(ldapFields) == 0:
         return None
@@ -1454,8 +1458,8 @@
     tokenFragments = []
     for token in tokens:
         fragments = []
-        for ldapField in ldapFields:
-            fragments.append("(%s=*%s*)" % (ldapField, token))
+        for ldapField, template in ldapFields:
+            fragments.append(template % (ldapField, token))
         if len(fragments) == 1:
             tokenFragment = fragments[0]
         else:

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_buildquery.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_buildquery.py	2013-07-19 15:40:18 UTC (rev 11540)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_buildquery.py	2013-07-20 06:51:19 UTC (rev 11541)
@@ -111,15 +111,15 @@
         results = buildQueriesFromTokens(["foo"], OpenDirectoryService._ODFields)
         self.assertEquals(
             results[0].generate(),
-            "(|(dsAttrTypeStandard:RealName=*foo*)(dsAttrTypeStandard:EMailAddress=*foo*))"
+            "(|(dsAttrTypeStandard:RealName=*foo*)(dsAttrTypeStandard:EMailAddress=foo*))"
         )
 
         results = buildQueriesFromTokens(["foo", "bar"], OpenDirectoryService._ODFields)
         self.assertEquals(
             results[0].generate(),
-            "(|(dsAttrTypeStandard:RealName=*foo*)(dsAttrTypeStandard:EMailAddress=*foo*))"
+            "(|(dsAttrTypeStandard:RealName=*foo*)(dsAttrTypeStandard:EMailAddress=foo*))"
         )
         self.assertEquals(
             results[1].generate(),
-            "(|(dsAttrTypeStandard:RealName=*bar*)(dsAttrTypeStandard:EMailAddress=*bar*))"
+            "(|(dsAttrTypeStandard:RealName=*bar*)(dsAttrTypeStandard:EMailAddress=bar*))"
         )

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py	2013-07-19 15:40:18 UTC (rev 11540)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_directory.py	2013-07-20 06:51:19 UTC (rev 11541)
@@ -842,7 +842,33 @@
         self.assertEquals(records[0].shortNames[0], "apollo")
 
 
+    def test_recordTypesForSearchContext(self):
+        self.assertEquals(
+            [self.directoryService.recordType_locations],
+            self.directoryService.recordTypesForSearchContext("location")
+        )
+        self.assertEquals(
+            [self.directoryService.recordType_resources],
+            self.directoryService.recordTypesForSearchContext("resource")
+        )
+        self.assertEquals(
+            [self.directoryService.recordType_users],
+            self.directoryService.recordTypesForSearchContext("user")
+        )
+        self.assertEquals(
+            [self.directoryService.recordType_groups],
+            self.directoryService.recordTypesForSearchContext("group")
+        )
+        self.assertEquals(
+            set([
+                self.directoryService.recordType_resources,
+                self.directoryService.recordType_users,
+                self.directoryService.recordType_groups
+            ]),
+            set(self.directoryService.recordTypesForSearchContext("attendee"))
+        )
 
+
 class GUIDTests(TestCase):
 
     def setUp(self):

Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py	2013-07-19 15:40:18 UTC (rev 11540)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_ldapdirectory.py	2013-07-20 06:51:19 UTC (rev 11541)
@@ -207,7 +207,7 @@
                         "fullName" : "cn",
                         "emailAddresses" : "mail",
                     },
-                    "expected" : "(|(cn=*foo*)(mail=*foo*))",
+                    "expected" : "(|(cn=*foo*)(mail=foo*))",
                 },
                 {
                     "tokens" : ["foo"],
@@ -215,7 +215,7 @@
                         "fullName" : "cn",
                         "emailAddresses" : ["mail", "mailAliases"],
                     },
-                    "expected" : "(|(cn=*foo*)(mail=*foo*)(mailAliases=*foo*))",
+                    "expected" : "(|(cn=*foo*)(mail=foo*)(mailAliases=foo*))",
                 },
                 {
                     "tokens" : [],
@@ -235,7 +235,7 @@
                     "mapping" : {
                         "emailAddresses" : "mail",
                     },
-                    "expected" : "(&(mail=*foo*)(mail=*bar*))",
+                    "expected" : "(&(mail=foo*)(mail=bar*))",
                 },
                 {
                     "tokens" : ["foo", "bar"],
@@ -243,7 +243,7 @@
                         "fullName" : "cn",
                         "emailAddresses" : "mail",
                     },
-                    "expected" : "(&(|(cn=*foo*)(mail=*foo*))(|(cn=*bar*)(mail=*bar*)))",
+                    "expected" : "(&(|(cn=*foo*)(mail=foo*))(|(cn=*bar*)(mail=bar*)))",
                 },
                 {
                     "tokens" : ["foo", "bar"],
@@ -251,7 +251,7 @@
                         "fullName" : "cn",
                         "emailAddresses" : ["mail", "mailAliases"],
                     },
-                    "expected" : "(&(|(cn=*foo*)(mail=*foo*)(mailAliases=*foo*))(|(cn=*bar*)(mail=*bar*)(mailAliases=*bar*)))",
+                    "expected" : "(&(|(cn=*foo*)(mail=foo*)(mailAliases=foo*))(|(cn=*bar*)(mail=bar*)(mailAliases=bar*)))",
                 },
                 {
                     "tokens" : ["foo", "bar", "baz("],
@@ -259,7 +259,7 @@
                         "fullName" : "cn",
                         "emailAddresses" : "mail",
                     },
-                    "expected" : "(&(|(cn=*foo*)(mail=*foo*))(|(cn=*bar*)(mail=*bar*))(|(cn=*baz\\28*)(mail=*baz\\28*)))",
+                    "expected" : "(&(|(cn=*foo*)(mail=foo*))(|(cn=*bar*)(mail=bar*))(|(cn=*baz\\28*)(mail=baz\\28*)))",
                 },
             ]
             for entry in entries:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130719/642f0a75/attachment-0001.html>


More information about the calendarserver-changes mailing list