[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