[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