[CalendarServer-changes] [4892] CalendarServer/trunk/twistedcaldav/directory
source_changes at macosforge.org
source_changes at macosforge.org
Wed Dec 23 12:11:57 PST 2009
Revision: 4892
http://trac.macosforge.org/projects/calendarserver/changeset/4892
Author: glyph at apple.com
Date: 2009-12-23 12:11:53 -0800 (Wed, 23 Dec 2009)
Log Message:
-----------
Cache the principal resources created from the directory so that subsequent resources will compare the same if their records compare the same.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directory/principal.py
CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py 2009-12-23 19:13:47 UTC (rev 4891)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py 2009-12-23 20:11:53 UTC (rev 4892)
@@ -35,6 +35,8 @@
from urllib import unquote
from urlparse import urlparse
+from weakref import WeakValueDictionary
+
from twisted.cred.credentials import UsernamePassword
from twisted.python.failure import Failure
from twisted.internet.defer import inlineCallbacks, returnValue
@@ -441,6 +443,7 @@
)
self.parent = parent
+ self._principalResourceCache = WeakValueDictionary()
def principalForUID(self, uid):
return self.parent.principalForUID(uid)
@@ -452,10 +455,13 @@
if record is None:
return None
+ if record in self._principalResourceCache:
+ return self._principalResourceCache[record]
if record.enabledForCalendaring:
principal = DirectoryCalendarPrincipalResource(self, record)
else:
principal = DirectoryPrincipalResource(self, record)
+ self._principalResourceCache[record] = principal
return principal
##
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2009-12-23 19:13:47 UTC (rev 4891)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2009-12-23 20:11:53 UTC (rev 4892)
@@ -187,6 +187,19 @@
self.failIf(principal is None)
self.assertEquals(record, principal.record)
+
+ def test_principalForUIDCache(self):
+ """
+ L{DirectoryPrincipalUIDProvisioningResource.principalForUID} should
+ return an identical principal resource when passed the same principal.
+ """
+ for provisioningResource, recordType, recordResource, record in self._allRecords():
+ principal = provisioningResource.principalForRecord(record)
+ principal2 = provisioningResource.principalForRecord(record)
+ self.assertIdentical(principal, principal2,
+ ("mismatch from %s" % (provisioningResource,)))
+
+
def test_principalForRecord(self):
"""
DirectoryPrincipalProvisioningResource.principalForRecord()
@@ -476,13 +489,12 @@
self.fail("%s should have %s privilege on %r" % (principal.sname(), privilege.sname(), resource))
d.addErrback(onError)
else:
- def onError(f):
+ def expectAccessDenied(f):
f.trap(AccessDeniedError)
def onSuccess(_):
#print resource.readDeadProperty(davxml.ACL)
self.fail("%s should not have %s privilege on %r" % (principal.sname(), privilege.sname(), resource))
- d.addCallback(onSuccess)
- d.addErrback(onError)
+ d.addCallbacks(onSuccess, expectAccessDenied)
return d
d = request.locateResource(url)
@@ -492,12 +504,8 @@
def _authReadOnlyPrivileges(self, resource, url):
items = []
for provisioningResource, recordType, recordResource, record in self._allRecords():
- if recordResource == resource:
- items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Read() , True ))
- items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Write() , True ))
- else:
- items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Read() , True ))
- items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Write() , False ))
+ items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Read() , True ))
+ items.append(( davxml.HRef().fromString(recordResource.principalURL()), davxml.Write() , False ))
items.append(( davxml.Unauthenticated() , davxml.Read() , False ))
items.append(( davxml.Unauthenticated() , davxml.Write() , False ))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20091223/2e30e743/attachment.html>
More information about the calendarserver-changes
mailing list