[CalendarServer-changes] [11025] CalendarServer/trunk/txdav
source_changes at macosforge.org
source_changes at macosforge.org
Wed Apr 10 14:28:48 PDT 2013
Revision: 11025
http://trac.calendarserver.org//changeset/11025
Author: cdaboo at apple.com
Date: 2013-04-10 14:28:48 -0700 (Wed, 10 Apr 2013)
Log Message:
-----------
Make sure push notifier ids for shared calendars use the owner uid and owner calendar name.
Modified Paths:
--------------
CalendarServer/trunk/txdav/caldav/datastore/test/common.py
CalendarServer/trunk/txdav/caldav/datastore/test/test_file.py
CalendarServer/trunk/txdav/common/datastore/sql.py
Modified: CalendarServer/trunk/txdav/caldav/datastore/test/common.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/common.py 2013-04-10 16:10:31 UTC (rev 11024)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/common.py 2013-04-10 21:28:48 UTC (rev 11025)
@@ -536,7 +536,6 @@
self.assertEquals(name, "/CalDAV/example.com/home1/")
-
@inlineCallbacks
def test_displayNameNone(self):
"""
@@ -1110,6 +1109,26 @@
@inlineCallbacks
+ def test_sharedNotifierID(self):
+ yield self.test_shareWith()
+ yield self.commit()
+
+ home = yield self.homeUnderTest()
+ self.assertEquals(home.notifierID(), "CalDAV|home1")
+ calendar = yield home.calendarWithName("calendar_1")
+ self.assertEquals(calendar.notifierID(), "CalDAV|home1")
+ self.assertEquals(calendar.notifierID(label="collection"), "CalDAV|home1/calendar_1")
+ yield self.commit()
+
+ home = yield self.homeUnderTest(name=OTHER_HOME_UID)
+ self.assertEquals(home.notifierID(), "CalDAV|%s" % (OTHER_HOME_UID,))
+ calendar = yield home.calendarWithName(self.sharedName)
+ self.assertEquals(calendar.notifierID(), "CalDAV|%s" % (OTHER_HOME_UID,))
+ self.assertEquals(calendar.notifierID(label="collection"), "CalDAV|home1/calendar_1")
+ yield self.commit()
+
+
+ @inlineCallbacks
def test_hasCalendarResourceUIDSomewhereElse(self):
"""
L{ICalendarHome.hasCalendarResourceUIDSomewhereElse} will determine if
Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_file.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/test_file.py 2013-04-10 16:10:31 UTC (rev 11024)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_file.py 2013-04-10 21:28:48 UTC (rev 11025)
@@ -490,6 +490,7 @@
test_asShared = test_shareWith
test_unshareSharerSide = test_shareWith
test_unshareShareeSide = test_shareWith
+ test_sharedNotifierID = test_shareWith
def test_init(self):
Modified: CalendarServer/trunk/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql.py 2013-04-10 16:10:31 UTC (rev 11024)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py 2013-04-10 21:28:48 UTC (rev 11025)
@@ -2467,15 +2467,8 @@
_objectTable = None
- def __init__(self, home, name, resourceID, mode, status, message=None, ownerHome=None):
+ def __init__(self, home, name, resourceID, mode, status, message=None, ownerHome=None, ownerName=None):
- if home._notifiers:
- childID = "%s/%s" % (home.uid(), name)
- notifiers = [notifier.clone(label="collection", id=childID)
- for notifier in home._notifiers]
- else:
- notifiers = None
-
self._home = home
self._name = name
self._resourceID = resourceID
@@ -2483,12 +2476,20 @@
self._bindStatus = status
self._bindMessage = message
self._ownerHome = home if ownerHome is None else ownerHome
+ self._ownerName = name if ownerName is None else ownerName
self._created = None
self._modified = None
self._objects = {}
self._objectNames = None
self._syncTokenRevision = None
- self._notifiers = notifiers
+
+ if self._ownerHome._notifiers:
+ childID = "%s/%s" % (self._ownerHome.uid(), self._ownerName)
+ self._notifiers = [notifier.clone(label="collection", id=childID)
+ for notifier in home._notifiers]
+ else:
+ self._notifiers = None
+
self._index = None # Derived classes need to set this
@@ -3000,17 +3001,18 @@
if bindStatus == _BIND_MODE_OWN:
ownerHome = home
+ ownerName = resourceName
else:
#TODO: get all ownerHomeIDs at once
- ownerHomeID = (yield cls._ownerHomeWithResourceID.on(
- home._txn, resourceID=resourceID))[0][0]
+ ownerHomeID, ownerName = (yield cls._ownerHomeWithResourceID.on(home._txn, resourceID=resourceID))[0]
ownerHome = yield home._txn.homeWithResourceID(home._homeType, ownerHomeID)
child = cls(
home=home,
name=resourceName, resourceID=resourceID,
mode=bindMode, status=bindStatus,
- message=bindMessage, ownerHome=ownerHome
+ message=bindMessage,
+ ownerHome=ownerHome, ownerName=ownerName
)
for attr, value in zip(cls.metadataAttributes(), metadata):
setattr(child, attr, value)
@@ -3059,15 +3061,15 @@
bindMode, homeID, resourceID, resourceName, bindStatus, bindMessage = rows[0] #@UnusedVariable
#TODO: combine with _invitedBindForNameAndHomeID and sort results
- ownerHomeID = (yield cls._ownerHomeWithResourceID.on(
- home._txn, resourceID=resourceID))[0][0]
+ ownerHomeID, ownerName = (yield cls._ownerHomeWithResourceID.on(home._txn, resourceID=resourceID))[0]
ownerHome = yield home._txn.homeWithResourceID(home._homeType, ownerHomeID)
child = cls(
home=home,
name=resourceName, resourceID=resourceID,
mode=bindMode, status=bindStatus,
- message=bindMessage, ownerHome=ownerHome,
+ message=bindMessage,
+ ownerHome=ownerHome, ownerName=ownerName,
)
yield child.initFromStore()
returnValue(child)
@@ -3114,10 +3116,12 @@
# get ownerHomeID
if bindMode == _BIND_MODE_OWN:
ownerHomeID = homeID
+ ownerName = resourceName
else:
- ownerHomeID = (yield cls._ownerHomeWithResourceID.on(
- home._txn, resourceID=resourceID))[0][0]
+ ownerHomeID, ownerName = (yield cls._ownerHomeWithResourceID.on(
+ home._txn, resourceID=resourceID))[0]
rows[0].append(ownerHomeID)
+ rows[0].append(ownerName)
if rows and queryCacher:
# Cache the result
@@ -3126,7 +3130,7 @@
if not rows:
returnValue(None)
- bindMode, homeID, resourceID, resourceName, bindStatus, bindMessage, ownerHomeID = rows[0] #@UnusedVariable
+ bindMode, homeID, resourceID, resourceName, bindStatus, bindMessage, ownerHomeID, ownerName = rows[0] #@UnusedVariable
if bindMode == _BIND_MODE_OWN:
ownerHome = home
@@ -3137,7 +3141,8 @@
home=home,
name=name, resourceID=resourceID,
mode=bindMode, status=bindStatus,
- message=bindMessage, ownerHome=ownerHome,
+ message=bindMessage,
+ ownerHome=ownerHome, ownerName=ownerName,
)
yield child.initFromStore()
returnValue(child)
@@ -3176,15 +3181,16 @@
if bindMode == _BIND_MODE_OWN:
ownerHome = home
+ ownerName = resourceName
else:
- ownerHomeID = (yield cls._ownerHomeWithResourceID.on(
- home._txn, resourceID=resourceID))[0][0]
+ ownerHomeID, ownerName = (yield cls._ownerHomeWithResourceID.on(home._txn, resourceID=resourceID))[0]
ownerHome = yield home._txn.homeWithResourceID(home._homeType, ownerHomeID)
child = cls(
home=home,
name=resourceName, resourceID=resourceID,
mode=bindMode, status=bindStatus,
- message=bindMessage, ownerHome=ownerHome,
+ message=bindMessage,
+ ownerHome=ownerHome, ownerName=ownerName,
)
yield child.initFromStore()
returnValue(child)
@@ -3435,15 +3441,16 @@
@classproperty
def _ownerHomeWithResourceID(cls): #@NoSelf
"""
- DAL query to retrieve the home resource ID of the owner from the bound
+ DAL query to retrieve the home resource ID and resource name of the owner from the bound
home-child ID.
"""
bind = cls._bindSchema
- return Select([bind.HOME_RESOURCE_ID],
- From=bind,
- Where=(bind.RESOURCE_ID ==
- Parameter("resourceID")).And(
- bind.BIND_MODE == _BIND_MODE_OWN))
+ return Select(
+ [bind.HOME_RESOURCE_ID, bind.RESOURCE_NAME, ],
+ From=bind,
+ Where=(bind.RESOURCE_ID == Parameter("resourceID")).And(
+ bind.BIND_MODE == _BIND_MODE_OWN)
+ )
@inlineCallbacks
@@ -3459,8 +3466,7 @@
# we already know who the owner is.
returnValue(self._home._resourceID)
else:
- rid = (yield self._ownerHomeWithResourceID.on(
- self._txn, resourceID=self._resourceID))[0][0]
+ rid, _ignore_rname = (yield self._ownerHomeWithResourceID.on(self._txn, resourceID=self._resourceID))[0]
returnValue(rid)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130410/264b54c3/attachment-0001.html>
More information about the calendarserver-changes
mailing list