[CalendarServer-changes] [7158] CalendarServer/trunk/twistedcaldav/directory
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 8 17:15:27 PST 2011
Revision: 7158
http://trac.macosforge.org/projects/calendarserver/changeset/7158
Author: sagen at apple.com
Date: 2011-03-08 17:15:26 -0800 (Tue, 08 Mar 2011)
Log Message:
-----------
Handle non-ascii principal urls
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directory/principal.py
CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml
CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py 2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py 2011-03-09 01:15:26 UTC (rev 7158)
@@ -992,7 +992,8 @@
return self
if config.EnableProxyPrincipals and name in ("calendar-proxy-read", "calendar-proxy-write"):
- return CalendarUserProxyPrincipalResource(self, name)
+ # name is required to be str
+ return CalendarUserProxyPrincipalResource(self, str(name))
else:
return None
Modified: CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml 2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/test/accounts.xml 2011-03-09 01:15:26 UTC (rev 7158)
@@ -95,6 +95,14 @@
<name>a adbkonly</name>
<email-address>a-adbkonly at example.com</email-address>
</user>
+ <user>
+ <uid>nonascii</uid>
+ <uid>nonascii佐藤</uid>
+ <guid>320B73A1-46E2-4180-9563-782DFDBE1F63</guid>
+ <password>a</password>
+ <name>佐藤佐藤佐藤</name>
+ <email-address>nonascii at example.com</email-address>
+ </user>
<user repeat="2">
<uid>user%02d</uid>
<guid>user%02d</guid>
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2011-03-09 01:15:26 UTC (rev 7158)
@@ -42,8 +42,10 @@
import twistedcaldav.test.util
from txdav.common.datastore.file import CommonDataStore
+from urllib import quote
+
class ProvisionedPrincipals (twistedcaldav.test.util.TestCase):
"""
Directory service provisioned principals.
@@ -115,14 +117,19 @@
self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
shortNames = set((yield typeResource.listChildren()))
- self.assertEquals(shortNames, set(r.shortNames[0] for r in directory.listRecords(recordType)))
+ # Handle records with mulitple shortNames
+ expected = []
+ for r in directory.listRecords(recordType):
+ expected.extend(r.shortNames)
+ self.assertEquals(shortNames, set(expected))
for shortName in shortNames:
#print " -> %s" % (shortName,)
recordResource = typeResource.getChild(shortName)
self.failUnless(isinstance(recordResource, DirectoryPrincipalResource))
- recordURL = typeURL + shortName + "/"
+ # shortName may be non-ascii
+ recordURL = typeURL + quote(shortName) + "/"
self.assertIn(recordURL, (recordResource.principalURL(),) + tuple(recordResource.alternateURIs()))
principalCollections = recordResource.principalCollections()
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2011-03-09 01:15:26 UTC (rev 7158)
@@ -547,3 +547,25 @@
yield self._clearProxy(principal, proxyType)
yield self._clearProxy(fakePrincipal, proxyType)
+
+
+ @inlineCallbacks
+ def test_NonAsciiProxy(self):
+ """
+ Ensure that principalURLs with non-ascii don't cause problems
+ within CalendarUserProxyPrincipalResource
+ """
+
+ recordType = DirectoryService.recordType_users
+ proxyType = "calendar-proxy-read"
+
+ record = self.directoryService.recordWithGUID("320B73A1-46E2-4180-9563-782DFDBE1F63")
+ provisioningResource = self.principalRootResources[self.directoryService.__class__.__name__]
+ principal = provisioningResource.principalForRecord(record)
+ proxyPrincipal = provisioningResource.principalForShortName(recordType,
+ "wsanchez")
+
+ yield self._addProxy(principal, proxyType, proxyPrincipal)
+ memberships = yield proxyPrincipal._calendar_user_proxy_index().getMemberships(proxyPrincipal.principalUID())
+ for uid in memberships:
+ subPrincipal = provisioningResource.principalForUID(uid)
Modified: CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/xmlfile.py 2011-03-09 00:37:33 UTC (rev 7157)
+++ CalendarServer/trunk/twistedcaldav/directory/xmlfile.py 2011-03-09 01:15:26 UTC (rev 7158)
@@ -358,7 +358,7 @@
element = addSubElement(parent, xmlType)
for value in principal.shortNames:
- addSubElement(element, "uid", text=value)
+ addSubElement(element, "uid", text=value.decode("utf-8"))
addSubElement(element, "guid", text=principal.guid)
if principal.fullName is not None:
addSubElement(element, "name", text=principal.fullName.decode("utf-8"))
@@ -367,11 +367,11 @@
if principal.lastName is not None:
addSubElement(element, "last-name", text=principal.lastName.decode("utf-8"))
for value in principal.emailAddresses:
- addSubElement(element, "email-address", text=value)
+ addSubElement(element, "email-address", text=value.decode("utf-8"))
if principal.extras:
extrasElement = addSubElement(element, "extras")
for key, value in principal.extras.iteritems():
- addSubElement(extrasElement, key, text=value)
+ addSubElement(extrasElement, key, text=value.decode("utf-8"))
return element
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110308/707b0813/attachment-0001.html>
More information about the calendarserver-changes
mailing list