[CalendarServer-changes] [2086]
CalendarServer/branches/users/cdaboo/private_events-2081
source_changes at macosforge.org
source_changes at macosforge.org
Wed Jan 2 13:40:45 PST 2008
Revision: 2086
http://trac.macosforge.org/projects/calendarserver/changeset/2086
Author: cdaboo at apple.com
Date: 2008-01-02 13:40:42 -0800 (Wed, 02 Jan 2008)
Log Message:
-----------
Add DAV:owner property on calendar homes and resources within those.
Modified Paths:
--------------
CalendarServer/branches/users/cdaboo/private_events-2081/lib-patches/Twisted/twisted.web2.dav.test.test_prop.patch
CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/directory/calendar.py
CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/resource.py
Modified: CalendarServer/branches/users/cdaboo/private_events-2081/lib-patches/Twisted/twisted.web2.dav.test.test_prop.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/private_events-2081/lib-patches/Twisted/twisted.web2.dav.test.test_prop.patch 2008-01-02 17:22:57 UTC (rev 2085)
+++ CalendarServer/branches/users/cdaboo/private_events-2081/lib-patches/Twisted/twisted.web2.dav.test.test_prop.patch 2008-01-02 21:40:42 UTC (rev 2086)
@@ -11,7 +11,7 @@
import random
-@@ -37,8 +39,14 @@
+@@ -37,8 +39,13 @@
from twisted.web2.dav.test.util import serialize
import twisted.web2.dav.test.util
@@ -22,8 +22,48 @@
+ (dav_namespace, "quota-used-bytes" ),
+)
-+live_properties = [lookupElement(qname)() for qname in DAVResource.liveProperties if (qname[0] == dav_namespace) and qname not in dynamicLiveProperties]
+
#
# See whether dead properties are available
#
+@@ -49,6 +56,10 @@
+ """
+ PROPFIND, PROPPATCH requests
+ """
++
++ def liveProperties(self):
++ return [lookupElement(qname)() for qname in self.resource_class.liveProperties if (qname[0] == dav_namespace) and qname not in dynamicLiveProperties]
++
+ def test_PROPFIND_basic(self):
+ """
+ PROPFIND request
+@@ -85,7 +96,7 @@
+ self.fail("PROPFIND failed (status %s) to locate live properties: %s"
+ % (status.code, properties))
+
+- properties_to_find = [p.qname() for p in live_properties]
++ properties_to_find = [p.qname() for p in self.liveProperties()]
+
+ for property in properties:
+ qname = property.qname()
+@@ -102,7 +113,7 @@
+ else:
+ self.fail("No response for URI /")
+
+- query = davxml.PropertyFind(davxml.PropertyContainer(*live_properties))
++ query = davxml.PropertyFind(davxml.PropertyContainer(*self.liveProperties()))
+
+ request = SimpleRequest(self.site, "PROPFIND", "/")
+
+@@ -146,9 +157,9 @@
+ % (status.code, properties))
+
+ if which.name == "allprop":
+- properties_to_find = [p.qname() for p in live_properties if not p.hidden]
++ properties_to_find = [p.qname() for p in self.liveProperties() if not p.hidden]
+ else:
+- properties_to_find = [p.qname() for p in live_properties]
++ properties_to_find = [p.qname() for p in self.liveProperties()]
+
+ for property in properties:
+ qname = property.qname()
Modified: CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/directory/calendar.py
===================================================================
--- CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/directory/calendar.py 2008-01-02 17:22:57 UTC (rev 2085)
+++ CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/directory/calendar.py 2008-01-02 21:40:42 UTC (rev 2086)
@@ -24,6 +24,7 @@
"DirectoryCalendarHomeResource",
]
+from twisted.internet.defer import succeed
from twisted.web2.dav import davxml
from twisted.web2.dav.util import joinURL
from twisted.web2.dav.resource import TwistedACLInheritable, TwistedQuotaRootProperty
@@ -255,6 +256,9 @@
# ACL
##
+ def owner(self, request):
+ return succeed(davxml.HRef(self.principalForRecord().principalURL()))
+
def defaultAccessControlList(self):
# FIXME: directory.principalCollection smells like a hack
# See DirectoryPrincipalProvisioningResource.__init__()
Modified: CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/resource.py 2008-01-02 17:22:57 UTC (rev 2085)
+++ CalendarServer/branches/users/cdaboo/private_events-2081/twistedcaldav/resource.py 2008-01-02 21:40:42 UTC (rev 2086)
@@ -31,6 +31,8 @@
from twisted.internet import reactor
from twisted.internet.defer import Deferred, maybeDeferred, succeed
+from twisted.internet.defer import waitForDeferred
+from twisted.internet.defer import deferredGenerator
from twisted.web2 import responsecode
from twisted.web2.dav import davxml
from twisted.web2.dav.idav import IDAVPrincipalCollectionResource
@@ -133,6 +135,7 @@
return tuple(super(CalDAVResource, self).davComplianceClasses()) + self.caldavComplianceClasses()
liveProperties = DAVResource.liveProperties + (
+ (dav_namespace, "owner"), # Private Events needs this but it is also OK to return empty
(caldav_namespace, "supported-calendar-component-set"),
(caldav_namespace, "supported-calendar-data" ),
)
@@ -149,7 +152,13 @@
namespace, name = qname
- if namespace == caldav_namespace:
+ if namespace == dav_namespace:
+ if name == "owner":
+ d = self.owner(request)
+ d.addCallback(lambda x: davxml.Owner(x))
+ return d
+
+ elif namespace == caldav_namespace:
if name == "supported-calendar-component-set":
# CalDAV-access-09, section 5.2.3
if self.hasDeadProperty(qname):
@@ -235,6 +244,21 @@
return super(CalDAVResource, self).accessControlList(*args, **kwargs)
+ @deferredGenerator
+ def owner(self, request):
+ """
+ Return the DAV:owner property value (MUST be a DAV:href or None).
+ """
+ d = waitForDeferred(self.locateParent(request, request.urlForResource(self)))
+ yield d
+ parent = d.getResult()
+ if parent and isinstance(parent, CalDAVResource):
+ d = waitForDeferred(parent.owner(request))
+ yield d
+ yield d.getResult()
+ else:
+ yield None
+
##
# CalDAV
##
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080102/1128bb02/attachment-0001.html
More information about the calendarserver-changes
mailing list