[CalendarServer-changes] [5372] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Sat Mar 20 11:36:41 PDT 2010
Revision: 5372
http://trac.macosforge.org/projects/calendarserver/changeset/5372
Author: wsanchez at apple.com
Date: 2010-03-20 11:36:39 -0700 (Sat, 20 Mar 2010)
Log Message:
-----------
Merge matchPrincipal in extentions.py up to the main class.
Modified Paths:
--------------
CalendarServer/trunk/twext/web2/dav/resource.py
CalendarServer/trunk/twistedcaldav/extensions.py
Modified: CalendarServer/trunk/twext/web2/dav/resource.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/resource.py 2010-03-20 18:22:29 UTC (rev 5371)
+++ CalendarServer/trunk/twext/web2/dav/resource.py 2010-03-20 18:36:39 UTC (rev 5372)
@@ -1638,48 +1638,65 @@
"""
# See RFC 3744, section 5.5.1
- principals = (principal1, principal2)
-
# The interesting part of a principal is it's one child
- principal1, principal2 = [p.children[0] for p in principals]
+ principal1 = principal1.children[0]
+ principal2 = principal2.children[0]
- if isinstance(principal2, davxml.All):
- return succeed(True)
+ if not hasattr(request, "matchPrincipals"):
+ request.matchPrincipals = {}
- elif isinstance(principal2, davxml.Authenticated):
- if isinstance(principal1, davxml.Unauthenticated):
- return succeed(False)
- elif isinstance(principal1, davxml.All):
- return succeed(False)
- else:
+ cache_key = (str(principal1), str(principal2))
+
+ match = request.matchPrincipals.get(cache_key, None)
+ if match is not None:
+ return succeed(match)
+
+ def doMatch():
+ if isinstance(principal2, davxml.All):
return succeed(True)
- elif isinstance(principal2, davxml.Unauthenticated):
- if isinstance(principal1, davxml.Unauthenticated):
- return succeed(True)
- else:
+ elif isinstance(principal2, davxml.Authenticated):
+ if isinstance(principal1, davxml.Unauthenticated):
+ return succeed(False)
+ elif isinstance(principal1, davxml.All):
+ return succeed(False)
+ else:
+ return succeed(True)
+
+ elif isinstance(principal2, davxml.Unauthenticated):
+ if isinstance(principal1, davxml.Unauthenticated):
+ return succeed(True)
+ else:
+ return succeed(False)
+
+ elif isinstance(principal1, davxml.Unauthenticated):
return succeed(False)
- elif isinstance(principal1, davxml.Unauthenticated):
- return succeed(False)
+ assert isinstance(principal1, davxml.HRef), (
+ "Not an HRef: %r" % (principal1,)
+ )
- assert isinstance(principal1, davxml.HRef), (
- "Not an HRef: %r" % (principal1,)
- )
+ def resolved(principal2):
+ assert principal2 is not None, "principal2 is None"
- def resolved(principal2):
- assert principal2 is not None, "principal2 is None"
+ # Compare two HRefs and do group membership test as well
+ if principal1 == principal2:
+ return True
- # Compare two HRefs and do group membership test as well
- if principal1 == principal2:
- return True
+ return self.principalIsGroupMember(
+ str(principal1), str(principal2), request
+ )
- return self.principalIsGroupMember(
- str(principal1), str(principal2), request
- )
+ d = self.resolvePrincipal(principal2, request)
+ d.addCallback(resolved)
+ return d
- d = self.resolvePrincipal(principal2, request)
- d.addCallback(resolved)
+ def cache(match):
+ request.matchPrincipals[cache_key] = match
+ return match
+
+ d = doMatch()
+ d.addCallback(cache)
return d
def principalIsGroupMember(self, principal1, principal2, request):
Modified: CalendarServer/trunk/twistedcaldav/extensions.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/extensions.py 2010-03-20 18:22:29 UTC (rev 5371)
+++ CalendarServer/trunk/twistedcaldav/extensions.py 2010-03-20 18:36:39 UTC (rev 5372)
@@ -448,29 +448,6 @@
http_REPORT = http_REPORT
- @inlineCallbacks
- def matchPrincipal(self, principal1, principal2, request):
- """
- Implementation of DAVResource.matchPrincipal that caches the principal match
- for the duration of a request. This avoids having to do repeated group membership
- tests when privileges on multiple resources are determined.
- """
-
- if not hasattr(request, "matchPrincipalCache"):
- request.matchPrincipalCache = {}
-
- # The interesting part of a principal is it's one child
- principals = (principal1, principal2)
- cache_key = tuple([str(p.children[0]) for p in principals])
-
- match = request.matchPrincipalCache.get(cache_key, None)
- if match is None:
- match = (yield super(DAVResource, self).matchPrincipal(principal1, principal2, request))
- request.matchPrincipalCache[cache_key] = match
-
- returnValue(match)
-
-
class DAVPrincipalResource (DirectoryPrincipalPropertySearchMixIn, SuperDAVPrincipalResource, LoggingMixIn):
"""
Extended L{twext.web2.dav.static.DAVFile} implementation.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100320/49bfafe0/attachment.html>
More information about the calendarserver-changes
mailing list