[CalendarServer-changes] [2313] CalendarServer/branches/propfind-cache/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Tue Apr 15 09:55:55 PDT 2008


Revision: 2313
          http://trac.macosforge.org/projects/calendarserver/changeset/2313
Author:   dreid at apple.com
Date:     2008-04-15 09:55:51 -0700 (Tue, 15 Apr 2008)

Log Message:
-----------
Fix a recursion issue with the CalDAVResource.changed implementaiton, also start updating usages of self.updateCTag to self.changed instead.

Modified Paths:
--------------
    CalendarServer/branches/propfind-cache/twistedcaldav/resource.py
    CalendarServer/branches/propfind-cache/twistedcaldav/static.py
    CalendarServer/branches/propfind-cache/twistedcaldav/test/test_resource.py
    CalendarServer/branches/propfind-cache/twistedcaldav/test/test_static.py

Modified: CalendarServer/branches/propfind-cache/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/propfind-cache/twistedcaldav/resource.py	2008-04-15 16:31:23 UTC (rev 2312)
+++ CalendarServer/branches/propfind-cache/twistedcaldav/resource.py	2008-04-15 16:55:51 UTC (rev 2313)
@@ -529,12 +529,12 @@
         @return: A L{Deferred} that fires with None.
         """
         def _gotParentResource(resource):
-            return resource.changed(request,
-                                    uri,
-                                    properties=properties,
-                                    data=data)
-
-        d = self.locateParent(request, uri)
+            if resource is not None:
+                return resource.changed(request,
+                                        uri,
+                                        properties=properties,
+                                        data=data)
+        d = self.locateParent(request, request.urlForResource(self))
         d.addCallback(_gotParentResource)
         return d
 

Modified: CalendarServer/branches/propfind-cache/twistedcaldav/static.py
===================================================================
--- CalendarServer/branches/propfind-cache/twistedcaldav/static.py	2008-04-15 16:31:23 UTC (rev 2312)
+++ CalendarServer/branches/propfind-cache/twistedcaldav/static.py	2008-04-15 16:55:51 UTC (rev 2313)
@@ -120,13 +120,13 @@
                     (caldavxml.caldav_namespace, "calendar-collection-location-ok")
                 ))
 
-            return self.createCalendarCollection()
+            return self.createCalendarCollection(request)
 
         parent = self._checkParents(request, isPseudoCalendarCollectionResource)
         parent.addCallback(_defer)
         return parent
 
-    def createCalendarCollection(self):
+    def createCalendarCollection(self, request):
         #
         # Create the collection once we know it is safe to do so
         #
@@ -135,13 +135,15 @@
                 raise HTTPError(status)
 
             # Initialize CTag on the calendar collection
-            self.updateCTag()
+            d2 = self.changed(request,
+                              request.urlForResource(self),
+                              data=True)
 
             # Create the index so its ready when the first PUTs come in
-            self.index().create()
+            d2.addCallback(lambda ign: self.index().create())
+            d2.addCallback(lambda ign: status)
+            return d2
 
-            return status
-
         d = self.createSpecialCollection(davxml.ResourceType.calendar)
         d.addCallback(onCalendarCollection)
         return d

Modified: CalendarServer/branches/propfind-cache/twistedcaldav/test/test_resource.py
===================================================================
--- CalendarServer/branches/propfind-cache/twistedcaldav/test/test_resource.py	2008-04-15 16:31:23 UTC (rev 2312)
+++ CalendarServer/branches/propfind-cache/twistedcaldav/test/test_resource.py	2008-04-15 16:55:51 UTC (rev 2313)
@@ -30,12 +30,20 @@
 
     def __init__(self, resources=None):
         self.resources = resources or {}
+        self.urls = {}
+        self._loadUrls()
 
-    def locateResource(self, uri):
-        return succeed(self.resources.get(uri))
+    def _loadUrls(self):
+        for k, v in self.resources.iteritems():
+            self.urls[v] = k
 
+    def locateResource(self, url):
+        return succeed(self.resources.get(url))
 
+    def urlForResource(self, resrc):
+        return self.urls.get(resrc)
 
+
 class StubParentResource(object):
     """
     A stub resource that records it's arguments to the changed method.
@@ -56,12 +64,15 @@
     """
     def setUp(self):
         self.calendarHome = StubParentResource()
-        self.request = StubLocatingRequest({
-                '/calendars/users/dreid/': self.calendarHome})
         self.myCalendar = CalDAVResource()
         self.myCalendarURI = '/calendars/users/dreid/calendar'
 
+        self.request = StubLocatingRequest({
+                '/calendars/users/dreid/': self.calendarHome,
+                self.myCalendarURI: self.myCalendar
+                })
 
+
     def _test(self, changedArgs, changedKwargs,
               expectedArgs, expectedKwargs):
         def _ranTest(result):
@@ -91,3 +102,18 @@
                           {'data': True},
                           (self.request, self.myCalendarURI),
                           {'properties': False, 'data': True})
+
+    def test_changedOnRootResource(self):
+        self.request.resources = {'/': self.myCalendar}
+        self.request._loadUrls()
+        d = self.myCalendar.changed(self.request, '/', data=True)
+        return d
+
+    def test_deepChanged(self):
+        self.request.resources['/calendars/users/dreid/'] = CalDAVResource()
+        self.request.resources['/calendars/users/'] = CalDAVResource()
+        self.request.resources['/calendars/'] = CalDAVResource()
+        self.request.resources['/'] = CalDAVResource()
+        self.request._loadUrls()
+        d = self.myCalendar.changed(self.request, self.myCalendarURI, data=True)
+        return d

Modified: CalendarServer/branches/propfind-cache/twistedcaldav/test/test_static.py
===================================================================
--- CalendarServer/branches/propfind-cache/twistedcaldav/test/test_static.py	2008-04-15 16:31:23 UTC (rev 2312)
+++ CalendarServer/branches/propfind-cache/twistedcaldav/test/test_static.py	2008-04-15 16:55:51 UTC (rev 2313)
@@ -129,7 +129,6 @@
                           expectedTokens='propertyToken0:dataToken0')
 
 
-
 class CalDAVFileChangedTests(TestCase):
     """
     Ensure that CalDAVFile's changed method updates the ctag on collections
@@ -138,13 +137,17 @@
     def setUp(self):
         self.parent = StubParentResource()
         self.parent.principalCollections = (lambda: [])
-        self.request = StubLocatingRequest({'/calendars/users/': self.parent})
 
         self.myCalDAVFile = CalDAVFile(self.mktemp())
         self.properties = InMemoryPropertyStore(self.myCalDAVFile)
         self.myCalDAVFile._dead_properties = self.properties
 
+        self.request = StubLocatingRequest({
+                '/calendars/users/': self.parent,
+                '/calendars/users/dreid': self.myCalDAVFile
+                })
 
+
     def test_propogatesToParent(self):
         def _checkParentChanged(result):
             self.assertEquals(self.parent.changedArgs,
@@ -170,13 +173,33 @@
 
 
     def test_doesNotUpdateCTagOnNonCollection(self):
+        def _checkCTag(result):
+            ctag = self.properties._properties.get(GETCTag.qname())
+            self.assertEquals(ctag, None)
+
         self.myCalDAVFile.isCollection = (lambda: False)
         d = self.myCalDAVFile.changed(self.request, '/calendars/users/dreid')
         return d
 
 
     def test_doesNotUpdateCTagOnPropertyChange(self):
+        def _checkCTag(result):
+            ctag = self.properties._properties.get(GETCTag.qname())
+            self.assertEquals(ctag, None)
+
         self.myCalDAVFile.isCollection = (lambda: True)
         d = self.myCalDAVFile.changed(self.request, '/calendars/users/dreid',
                                       properties=True)
         return d
+
+
+    def test_createCalendarCollectionCallsChanged(self):
+        def _checkChangedOnParent(result):
+            self.assertEquals(self.parent.changedArgs,
+                              (self.request, '/calendars/users/dreid'))
+            self.assertEquals(self.parent.changedKwArgs,
+                              {'properties': False, 'data': True})
+
+        d = self.myCalDAVFile.createCalendarCollection(self.request)
+        d.addCallback(_checkChangedOnParent)
+        return d

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080415/f64ae26c/attachment-0001.html


More information about the calendarserver-changes mailing list