[CalendarServer-changes] [6989] CalendarServer/branches/users/glyph/dalify/txdav
source_changes at macosforge.org
source_changes at macosforge.org
Wed Feb 16 06:36:57 PST 2011
Revision: 6989
http://trac.macosforge.org/projects/calendarserver/changeset/6989
Author: glyph at apple.com
Date: 2011-02-16 06:36:56 -0800 (Wed, 16 Feb 2011)
Log Message:
-----------
dalify ICalendar.resourceNamesSinceToken
Modified Paths:
--------------
CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/common.py
CalendarServer/branches/users/glyph/dalify/txdav/caldav/icalendarstore.py
CalendarServer/branches/users/glyph/dalify/txdav/common/datastore/sql.py
Modified: CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/common.py
===================================================================
--- CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/common.py 2011-02-16 14:36:45 UTC (rev 6988)
+++ CalendarServer/branches/users/glyph/dalify/txdav/caldav/datastore/test/common.py 2011-02-16 14:36:56 UTC (rev 6989)
@@ -1246,12 +1246,26 @@
self.assertEquals((yield obj.dropboxID()), "some-dropbox-id")
+ def token2revision(self, token):
+ """
+ FIXME: the API names for L{syncToken}() and L{resourceNamesSinceToken}()
+ are slightly inaccurate; one doesn't produce input for the other.
+ Actually it should be resource names since I{revision} and you need to
+ understand the structure of the tokens to extract the revision. Right
+ now that logic lives in the protocol layer, so this testing method
+ replicates it.
+ """
+ uuid, rev = token.split("#", 1)
+ rev = int(rev)
+ return rev
+
+
@inlineCallbacks
def test_simpleHomeSyncToken(self):
"""
L{ICalendarHome.resourceNamesSinceToken} will return the names of
- calenars created since L{ICalendarHome.syncToken} last returned a
- particular value.
+ calendar objects created since L{ICalendarHome.syncToken} last returned
+ a particular value.
"""
home = yield self.homeUnderTest()
cal = yield self.calendarUnderTest()
@@ -1262,34 +1276,51 @@
)
yield cal.removeCalendarObjectWithName("2.ics")
+ yield home.createCalendarWithName("other-calendar")
st2 = yield home.syncToken()
self.failIfEquals(st, st2)
- def token2revision(token):
- # FIXME: the API name is a misnomer; there's syncToken() and
- # resourceNamesSinceToken(), but actually it is resource names since
- # *revision* and you need to understand the structure of the tokens
- # to extract the revision.
- uuid, rev = token.split("#", 1)
- rev = int(rev)
- return rev
-
home = yield self.homeUnderTest()
changed, deleted = yield home.resourceNamesSinceToken(
- token2revision(st), "depth_is_ignored")
+ self.token2revision(st), "depth_is_ignored")
self.assertEquals(set(changed), set(["calendar_1/new.ics",
- "calendar_1/2.ics"]))
+ "calendar_1/2.ics",
+ "other-calendar/"]))
self.assertEquals(set(deleted), set(["calendar_1/2.ics"]))
changed, deleted = yield home.resourceNamesSinceToken(
- token2revision(st2), "depth_is_ignored")
+ self.token2revision(st2), "depth_is_ignored")
self.assertEquals(changed, [])
self.assertEquals(deleted, [])
@inlineCallbacks
+ def test_collectionSyncToken(self):
+ """
+ L{ICalendar.resourceNamesSinceToken} will return the names of calendar
+ objects changed or deleted since
+ """
+ cal = yield self.calendarUnderTest()
+ st = yield cal.syncToken()
+ rev = self.token2revision(st)
+ yield cal.createCalendarObjectWithName("new.ics", VComponent.fromString(
+ self.eventWithDropbox
+ )
+ )
+ yield cal.removeCalendarObjectWithName("2.ics")
+ st2 = yield cal.syncToken()
+ rev2 = self.token2revision(st2)
+ changed, deleted = yield cal.resourceNamesSinceToken(rev)
+ self.assertEquals(set(changed), set(["new.ics"]))
+ self.assertEquals(set(deleted), set(["2.ics"]))
+ changed, deleted = yield cal.resourceNamesSinceToken(rev2)
+ self.assertEquals(set(changed), set([]))
+ self.assertEquals(set(deleted), set([]))
+
+
+ @inlineCallbacks
def test_dropboxIDs(self):
"""
L{ICalendarObject.getAllDropboxIDs} returns a L{Deferred} that fires
Modified: CalendarServer/branches/users/glyph/dalify/txdav/caldav/icalendarstore.py
===================================================================
--- CalendarServer/branches/users/glyph/dalify/txdav/caldav/icalendarstore.py 2011-02-16 14:36:45 UTC (rev 6988)
+++ CalendarServer/branches/users/glyph/dalify/txdav/caldav/icalendarstore.py 2011-02-16 14:36:56 UTC (rev 6989)
@@ -306,6 +306,13 @@
"""
+ def resourceNamesSinceToken(revision):
+ """
+ Low-level query to gather names for calendarObjectsSinceToken.
+ """
+
+
+
class ICalendarObject(IDataStoreResource):
"""
Calendar object
Modified: CalendarServer/branches/users/glyph/dalify/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/glyph/dalify/txdav/common/datastore/sql.py 2011-02-16 14:36:45 UTC (rev 6988)
+++ CalendarServer/branches/users/glyph/dalify/txdav/common/datastore/sql.py 2011-02-16 14:36:56 UTC (rev 6989)
@@ -1631,17 +1631,25 @@
raise NotImplementedError()
+ @classproperty
+ def _objectNamesSinceRevisionQuery(cls):
+ """
+ DAL query for (resource, deleted-flag)
+ """
+ rev = cls._revisionsSchema
+ return Select([rev.RESOURCE_NAME, rev.DELETED],
+ From=rev,
+ Where=(rev.REVISION > Parameter("revision")).And(
+ rev.RESOURCE_ID == Parameter("resourceID")))
+
+
@inlineCallbacks
def resourceNamesSinceToken(self, token):
results = [
(name if name else "", deleted)
for name, deleted in
- (yield self._txn.execSQL("""
- select %(column_RESOURCE_NAME)s, %(column_DELETED)s from %(name)s
- where %(column_REVISION)s > %%s and %(column_RESOURCE_ID)s = %%s
- """ % self._revisionsTable,
- [token, self._resourceID],
- ))
+ (yield self._objectNamesSinceRevisionQuery.on(
+ self._txn, revision=token, resourceID=self._resourceID))
]
results.sort(key=lambda x:x[1])
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110216/eba0701d/attachment-0001.html>
More information about the calendarserver-changes
mailing list