[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