[CalendarServer-changes] [9524] CalendarServer/branches/users/gaya/inviteclean
source_changes at macosforge.org
source_changes at macosforge.org
Fri Aug 3 13:52:43 PDT 2012
Revision: 9524
http://trac.macosforge.org/projects/calendarserver/changeset/9524
Author: gaya at apple.com
Date: 2012-08-03 13:52:41 -0700 (Fri, 03 Aug 2012)
Log Message:
-----------
remove SQLLegacyShares and references
Modified Paths:
--------------
CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/resource.py
CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
CalendarServer/branches/users/gaya/inviteclean/txdav/caldav/datastore/sql.py
CalendarServer/branches/users/gaya/inviteclean/txdav/carddav/datastore/sql.py
CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py
CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql_legacy.py
Modified: CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/resource.py 2012-08-03 17:38:10 UTC (rev 9523)
+++ CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/resource.py 2012-08-03 20:52:41 UTC (rev 9524)
@@ -2121,15 +2121,6 @@
return props
- def sharesDB(self):
- """
- Retrieve the new-style shares DB wrapper.
- """
- if not hasattr(self, "_sharesDB"):
- self._sharesDB = self._newStoreHome.retrieveOldShares()
- return self._sharesDB
-
-
def url(self):
return joinURL(self.parent.url(), self.name, "/")
Modified: CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py 2012-08-03 17:38:10 UTC (rev 9523)
+++ CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py 2012-08-03 20:52:41 UTC (rev 9524)
@@ -36,7 +36,7 @@
_BIND_STATUS_INVALID
from txdav.xml import element
-from twisted.internet.defer import succeed, inlineCallbacks, DeferredList,\
+from twisted.internet.defer import succeed, inlineCallbacks, DeferredList, \
returnValue
from twistedcaldav import customxml, caldavxml
@@ -51,11 +51,13 @@
import os
import types
-#FIXME: Get rid of this!
-#from txdav.common.datastore.sql import EADDRESSBOOKTYPE
+#FIXME: Get rid of these imports
+from twistedcaldav.directory.util import TRANSACTION_KEY
+# circular import
+#from txdav.common.datastore.sql import ECALENDARTYPE, EADDRESSBOOKTYPE
ECALENDARTYPE = 0
EADDRESSBOOKTYPE = 1
-ENOTIFICATIONTYPE = 2
+#ENOTIFICATIONTYPE = 2
class SharedCollectionMixin(object):
@@ -272,7 +274,7 @@
if isVirt:
rtype = element.ResourceType(
*(
- tuple([child for child in rtype.children if child.qname() != customxml.SharedOwner.qname()]) +
+ tuple([child for child in rtype.children if child.qname() != customxml.SharedOwner.qname()]) +
(customxml.Shared(),)
)
)
@@ -468,10 +470,10 @@
elif self.isAddressBookCollection():
shareeHome = yield self._newStoreObject._txn.addressbookHomeWithUID(shareeUID, create=True)
- sharedName = yield self._newStoreObject.shareWith(shareeHome,
+ sharedName = yield self._newStoreObject.shareWith(shareeHome,
mode=invitationAccessToBindModeMap[access],
status=_BIND_STATUS_INVITED,
- message=summary )
+ message=summary)
shareeHomeChild = yield shareeHome.invitedChildWithName(sharedName)
invitation = Invitation(shareeHomeChild)
@@ -482,7 +484,7 @@
mode = None if access is None else invitationAccessToBindModeMap[access]
status = None if state is None else invitationStateToBindStatusMap[state]
- yield self._newStoreObject.updateShare(invitation._shareeHomeChild, mode=mode, status=status, message=summary )
+ yield self._newStoreObject.updateShare(invitation._shareeHomeChild, mode=mode, status=status, message=summary)
assert not access or access == invitation.access(), "access=%s != invitation.access()=%s" % (access, invitation.access())
assert not state or state == invitation.state(), "state=%s != invitation.state()=%s" % (state, invitation.state())
assert not summary or summary == invitation.summary(), "summary=%s != invitation.summary()=%s" % (summary, invitation.summary())
@@ -549,8 +551,8 @@
if invitation:
yield self._updateInvitation(invitation, access=invitationAccessMapFromXML[type(ace)], summary=summary)
else:
- invitation = yield self._createInvitation(
- shareeUID=shareeUID,
+ invitation = yield self._createInvitation(
+ shareeUID=shareeUID,
access=invitationAccessMapFromXML[type(ace)],
summary=summary)
# Send invite notification
@@ -846,7 +848,7 @@
xmlDocHandlers = {
customxml.InviteShare: _xmlHandleInvite,
- customxml.InviteReply: _xmlHandleInviteReply,
+ customxml.InviteReply: _xmlHandleInviteReply,
}
def POST_handler_content_type(self, request, contentType):
@@ -869,7 +871,7 @@
"read-only" : customxml.ReadAccess,
"read-write" : customxml.ReadWriteAccess,
}
-invitationAccessMapFromXML = dict([(v,k) for k,v in invitationAccessMapToXML.iteritems()])
+invitationAccessMapFromXML = dict([(v, k) for k, v in invitationAccessMapToXML.iteritems()])
invitationStatusMapToXML = {
"NEEDS-ACTION" : customxml.InviteStatusNoResponse,
@@ -878,7 +880,7 @@
"DELETED" : customxml.InviteStatusDeleted,
"INVALID" : customxml.InviteStatusInvalid,
}
-invitationStatusMapFromXML = dict([(v,k) for k,v in invitationStatusMapToXML.iteritems()])
+invitationStatusMapFromXML = dict([(v, k) for k, v in invitationStatusMapToXML.iteritems()])
invitationStateToBindStatusMap = {
"NEEDS-ACTION": _BIND_STATUS_INVITED,
@@ -886,13 +888,13 @@
"DECLINED": _BIND_STATUS_DECLINED,
"INVALID": _BIND_STATUS_INVALID,
}
-invitationStateFromBindStatusMap = dict((v,k) for k, v in invitationStateToBindStatusMap.iteritems())
+invitationStateFromBindStatusMap = dict((v, k) for k, v in invitationStateToBindStatusMap.iteritems())
invitationAccessToBindModeMap = {
"own": _BIND_MODE_OWN,
"read-only": _BIND_MODE_READ,
"read-write": _BIND_MODE_WRITE,
}
-invitationAccessFromBindModeMap = dict((v,k) for k, v in invitationAccessToBindModeMap.iteritems())
+invitationAccessFromBindModeMap = dict((v, k) for k, v in invitationAccessToBindModeMap.iteritems())
class Invitation(object):
"""
@@ -1102,7 +1104,6 @@
# FIXEME: Fake up a request that can be used to get the sharer home resource
class FakeRequest(object):pass
fakeRequest = FakeRequest()
- from twistedcaldav.directory.util import TRANSACTION_KEY
setattr(fakeRequest, TRANSACTION_KEY, self._newStoreHome._txn)
if self._newStoreHome._homeType == ECALENDARTYPE:
@@ -1110,13 +1111,14 @@
elif self._newStoreHome._homeType == EADDRESSBOOKTYPE:
sharerHomeCollection = yield principal.addressBookHome(fakeRequest)
- url = joinURL(sharerHomeCollection.url(), sharerHomeChild.name())
+ url = joinURL(sharerHomeCollection.url(), sharerHomeChild.name())
share = Share(shareeHomeChild=shareeHomeChild, sharerHomeChild=sharerHomeChild, url=url)
shares.append(share)
# DEBUG ONLY
+ '''
shares.sort(key=lambda share:share.uid())
allRecords = yield self.sharesDB().allRecords()
@@ -1138,8 +1140,8 @@
print("MISMATCH old: %s" % oTestStrings)
print("MISMATCH new: %s" % testStrings)
assert False
+ '''
-
self._allShares = dict([(share.name(), share) for share in shares])
returnValue(self._allShares)
@@ -1192,17 +1194,20 @@
share = oldShare
else:
if direct:
- sharedName = yield sharedCollection._newStoreObject.shareWith(shareeHome=self._newStoreHome,
+ sharedName = yield sharedCollection._newStoreObject.shareWith(shareeHome=self._newStoreHome,
mode=_BIND_MODE_DIRECT,
status=_BIND_STATUS_ACCEPTED,
- message=displayname )
+ message=displayname)
else:
- # nothing to do here. Invite is accepted is already accepted
- # legacy code always renamed share here:
- # sharedName = yield sharedCollection._newStoreObject.updateShare(invitation._shareeHomeChild, name=str(uuid4()) )
+ # FIXME: clean the logic up here. Add or update the share in caller acceptInviteShare() or (acceptDirectShare() or directShare())
+ # Nothing to do here. Invite is accepted, sync token inited
+ # legacy code always renamed share here with side effect of calling shareeHomeChild._initSyncToken().
+ # sharedName = yield sharedCollection._newStoreObject.updateShare(invitation._shareeHomeChild, name=str(uuid4()) )
# without rename, share name is the same as inviteUID
- # share name is the same as inviteUID
+ #
+ # NOTE: if bind.RESOURCE_NAME is not changed to be != invite.inviteUID the entire INVITE table is not needed
+ #
sharedName = shareUID
# this is similar to legacy code
@@ -1238,8 +1243,8 @@
# Return the URL of the shared collection
returnValue(XMLResponse(
- code = responsecode.OK,
- element = customxml.SharedAs(
+ code=responsecode.OK,
+ element=customxml.SharedAs(
element.HRef.fromString(joinURL(self.url(), share.name()))
)
))
@@ -1281,7 +1286,7 @@
if share.direct():
yield share._sharerHomeChild.unshareWith(share._shareeHomeChild._home)
else:
- yield share._sharerHomeChild.updateShare(share._shareeHomeChild, status=_BIND_STATUS_DECLINED )
+ yield share._sharerHomeChild.updateShare(share._shareeHomeChild, status=_BIND_STATUS_DECLINED)
@inlineCallbacks
Modified: CalendarServer/branches/users/gaya/inviteclean/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/txdav/caldav/datastore/sql.py 2012-08-03 17:38:10 UTC (rev 9523)
+++ CalendarServer/branches/users/gaya/inviteclean/txdav/caldav/datastore/sql.py 2012-08-03 20:52:41 UTC (rev 9524)
@@ -53,7 +53,7 @@
from txdav.common.datastore.sql import CommonHome, CommonHomeChild,\
CommonObjectResource, ECALENDARTYPE
from txdav.common.datastore.sql_legacy import PostgresLegacyIndexEmulator,\
- SQLLegacyCalendarShares, PostgresLegacyInboxIndexEmulator
+ PostgresLegacyInboxIndexEmulator
from txdav.common.datastore.sql_tables import CALENDAR_TABLE,\
CALENDAR_BIND_TABLE, CALENDAR_OBJECT_REVISIONS_TABLE, CALENDAR_OBJECT_TABLE,\
_ATTACHMENTS_MODE_NONE, _ATTACHMENTS_MODE_READ, _ATTACHMENTS_MODE_WRITE,\
@@ -114,7 +114,6 @@
self._childClass = Calendar
super(CalendarHome, self).__init__(transaction, ownerUID, notifiers)
- self._shares = SQLLegacyCalendarShares(self)
createCalendarWithName = CommonHome.createChildWithName
Modified: CalendarServer/branches/users/gaya/inviteclean/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/txdav/carddav/datastore/sql.py 2012-08-03 17:38:10 UTC (rev 9523)
+++ CalendarServer/branches/users/gaya/inviteclean/txdav/carddav/datastore/sql.py 2012-08-03 20:52:41 UTC (rev 9524)
@@ -38,8 +38,7 @@
from twistedcaldav.memcacher import Memcacher
from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError
-from txdav.common.datastore.sql_legacy import \
- PostgresLegacyABIndexEmulator, SQLLegacyAddressBookShares
+from txdav.common.datastore.sql_legacy import PostgresLegacyABIndexEmulator
from txdav.carddav.datastore.util import validateAddressBookComponent
from txdav.carddav.iaddressbookstore import IAddressBookHome, IAddressBook,\
@@ -90,7 +89,6 @@
self._childClass = AddressBook
super(AddressBookHome, self).__init__(transaction, ownerUID, notifiers)
- self._shares = SQLLegacyAddressBookShares(self)
addressbooks = CommonHome.children
Modified: CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py 2012-08-03 17:38:10 UTC (rev 9523)
+++ CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql.py 2012-08-03 20:52:41 UTC (rev 9524)
@@ -898,7 +898,6 @@
self._txn = transaction
self._ownerUID = ownerUID
self._resourceID = None
- self._shares = None
self._childrenLoaded = False
self._children = {}
self._notifiers = notifiers
@@ -1073,10 +1072,6 @@
return self._txn
- def retrieveOldShares(self):
- return self._shares
-
-
def name(self):
"""
Implement L{IDataStoreObject.name} to return the uid.
@@ -2060,7 +2055,7 @@
@type shareeHome: L{CommonHome}
@param mode: The sharing mode; L{_BIND_MODE_READ} or
- L{_BIND_MODE_WRITE}.
+ L{_BIND_MODE_WRITE} or L{_BIND_MODE_DIRECT}
@type mode: L{str}
@param status: The sharing mode; L{_BIND_STATUS_INVITED} or
@@ -2088,11 +2083,12 @@
seenByOwner=True, seenBySharee=True,
bindStatus=status, message=message
)
- yield self._inviteInsertQuery.on(
- subt, uid=newName, name="unused",
- homeID=shareeHome._resourceID, resourceID=self._resourceID,
- recipient="unused"
- )
+ if mode != _BIND_MODE_DIRECT:
+ yield self._inviteInsertQuery.on(
+ subt, uid=newName, name="unused",
+ homeID=shareeHome._resourceID, resourceID=self._resourceID,
+ recipient="unused"
+ )
returnValue(newName)
try:
sharedName = yield self._txn.subtransaction(doInsert)
Modified: CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql_legacy.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql_legacy.py 2012-08-03 17:38:10 UTC (rev 9523)
+++ CalendarServer/branches/users/gaya/inviteclean/txdav/common/datastore/sql_legacy.py 2012-08-03 20:52:41 UTC (rev 9524)
@@ -34,18 +34,13 @@
calendarqueryfilter, calendarquery, addressbookquery, expression, \
addressbookqueryfilter
from twistedcaldav.query.sqlgenerator import sqlgenerator
-from twistedcaldav.sharing import SharedCollectionRecord
from txdav.caldav.icalendarstore import TimeRangeLowerLimit, TimeRangeUpperLimit
from txdav.common.icommondatastore import IndexedSearchException, \
ReservationError, NoSuchObjectResourceError
-from txdav.common.datastore.sql_tables import (
- _BIND_MODE_OWN, _BIND_MODE_DIRECT,_BIND_STATUS_ACCEPTED,
- _BIND_STATUS_DECLINED,CALENDAR_BIND_TABLE, CALENDAR_HOME_TABLE,
- ADDRESSBOOK_HOME_TABLE, ADDRESSBOOK_BIND_TABLE, schema)
-from twext.enterprise.dal.syntax import Delete, Insert, Parameter, \
- SavepointAction, Select, Update
+from txdav.common.datastore.sql_tables import schema
+from twext.enterprise.dal.syntax import Parameter, Select
from twext.python.clsprop import classproperty
from twext.python.log import Logger, LoggingMixIn
@@ -102,301 +97,6 @@
return self._collection.removeNotificationObjectWithName(name)
-class SQLLegacyShares(object):
-
- _homeTable = None
- _bindTable = None
- _urlTopSegment = None
-
- _homeSchema = None
- _bindSchema = None
-
- def __init__(self, home):
- self._home = home
-
-
- @property
- def _txn(self):
- return self._home._txn
-
-
- def _getHomeWithUID(self, uid):
- raise NotImplementedError()
-
-
- def create(self):
- pass
-
-
- def remove(self):
- pass
-
-
- @classproperty
- def _allSharedToQuery(cls): #@NoSelf
- bind = cls._bindSchema
- return Select(
- [bind.RESOURCE_ID, bind.RESOURCE_NAME,
- bind.BIND_MODE, bind.MESSAGE],
- From=bind,
- Where=(bind.HOME_RESOURCE_ID == Parameter("homeID"))
- .And(bind.BIND_MODE != _BIND_MODE_OWN)
- .And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)
- )
-
-
- @classproperty
- def _inviteUIDByResourceIDsQuery(cls): #@NoSelf
- inv = schema.INVITE
- return Select(
- [inv.INVITE_UID], From=inv, Where=
- (inv.RESOURCE_ID == Parameter("resourceID"))
- .And(inv.HOME_RESOURCE_ID == Parameter("homeID"))
- )
-
-
- @classproperty
- def _ownerHomeIDAndName(cls): #@NoSelf
- bind = cls._bindSchema
- return Select(
- [bind.HOME_RESOURCE_ID, bind.RESOURCE_NAME], From=bind, Where=
- (bind.RESOURCE_ID == Parameter("resourceID"))
- .And(bind.BIND_MODE == _BIND_MODE_OWN)
- )
-
-
- @classproperty
- def _ownerUIDFromHomeID(cls): #@NoSelf
- home = cls._homeSchema
- return Select(
- [home.OWNER_UID], From=home,
- Where=home.RESOURCE_ID == Parameter("homeID")
- )
-
-
-
-
- @inlineCallbacks
- def allRecords(self):
- # This should have been a smart join that got all these columns at
- # once, but let's not bother to fix it, since the actual query we
- # _want_ to do (just look for binds in a particular homes) is
- # much simpler anyway; we should just do that.
- all = []
- shareRows = yield self._allSharedToQuery.on(
- self._txn, homeID=self._home._resourceID)
- for resourceID, resourceName, bindMode, summary in shareRows:
- [[ownerHomeID, ownerResourceName]] = yield (
- self._ownerHomeIDAndName.on(self._txn,
- resourceID=resourceID))
- [[ownerUID]] = yield self._ownerUIDFromHomeID.on(
- self._txn, homeID=ownerHomeID)
- hosturl = '/%s/__uids__/%s/%s' % (
- self._urlTopSegment, ownerUID, ownerResourceName
- )
- localname = resourceName
- if bindMode != _BIND_MODE_DIRECT:
- sharetype = 'I'
- [[shareuid]] = yield self._inviteUIDByResourceIDsQuery.on(
- self._txn, resourceID=resourceID,
- homeID=self._home._resourceID
- )
- else:
- sharetype = 'D'
- shareuid = "Direct-%s-%s" % (self._home._resourceID, resourceID,)
- record = SharedCollectionRecord(
- shareuid, sharetype, hosturl, localname, summary
- )
- all.append(record)
- returnValue(all)
-
- def directShareID(self, shareeHome, sharerCollection):
- return "Direct-%s-%s" % (shareeHome._newStoreHome._resourceID, sharerCollection._newStoreObject._resourceID,)
-
- @inlineCallbacks
- def _search(self, **kw):
- [[key, value]] = kw.items()
- for record in (yield self.allRecords()):
- if getattr(record, key) == value:
- returnValue((record))
-
-
- def recordForShareUID(self, shareUID):
- return self._search(shareuid=shareUID)
-
-
- @classproperty
- def _updateBindName(cls): #@NoSelf
- bind = cls._bindSchema
- return Update({bind.RESOURCE_NAME: Parameter("localname")},
- Where=(bind.HOME_RESOURCE_ID == Parameter("homeID"))
- .And(bind.RESOURCE_ID == Parameter('resourceID')))
-
-
- @classproperty
- def _acceptDirectShareQuery(cls): #@NoSelf
- bind = cls._bindSchema
- return Insert({
- bind.HOME_RESOURCE_ID: Parameter("homeID"),
- bind.RESOURCE_ID: Parameter("resourceID"),
- bind.RESOURCE_NAME: Parameter("name"),
- bind.MESSAGE: Parameter("message"),
- bind.BIND_MODE: _BIND_MODE_DIRECT,
- bind.BIND_STATUS: _BIND_STATUS_ACCEPTED,
- bind.SEEN_BY_OWNER: True,
- bind.SEEN_BY_SHAREE: True,
- })
-
-
- @inlineCallbacks
- def addOrUpdateRecord(self, record):
- # record.hosturl -> /.../__uids__/<uid>/<name>
- splithost = record.hosturl.split('/')
-
- # Double-check the path
- if splithost[2] != "__uids__":
- raise ValueError(
- "Sharing URL must be a __uids__ path: %s" % (record.hosturl,))
-
- ownerUID = splithost[3]
- ownerCollectionName = splithost[4]
- ownerHome = yield self._getHomeWithUID(ownerUID)
- ownerCollection = yield ownerHome.childWithName(ownerCollectionName)
- collectionResourceID = ownerCollection._resourceID
-
- if record.sharetype == 'I':
- # There needs to be a bind already, one that corresponds to the
- # invitation. The invitation's UID is the same as the share UID. I
- # just need to update its 'localname', i.e.
- # XXX_BIND.XXX_RESOURCE_NAME.
-
- yield self._updateBindName.on(
- self._txn, localname=record.localname,
- homeID=self._home._resourceID, resourceID=collectionResourceID
- )
- elif record.sharetype == 'D':
- # There is no bind entry already so add one - but be aware of possible race to create
-
- # Use savepoint so we can do a partial rollback if there is a race condition
- # where this row has already been inserted
- savepoint = SavepointAction("addOrUpdateRecord")
- yield savepoint.acquire(self._txn)
-
- try:
- yield self._acceptDirectShareQuery.on(
- self._txn, homeID=self._home._resourceID,
- resourceID=collectionResourceID, name=record.localname,
- message=record.summary
- )
- except Exception: # FIXME: Really want to trap the pg.DatabaseError but in a non-DB specific manner
- yield savepoint.rollback(self._txn)
-
- # For now we will assume that the insert already done is the winner - so nothing more to do here
- else:
- yield savepoint.release(self._txn)
-
- shareeCollection = yield self._home.childWithName(record.localname)
- yield shareeCollection._initSyncToken()
-
-
- @classproperty
- def _unbindShareQuery(cls): #@NoSelf
- bind = cls._bindSchema
- return Update({
- bind.BIND_STATUS: _BIND_STATUS_DECLINED
- }, Where=(bind.RESOURCE_NAME == Parameter("name"))
- .And(bind.HOME_RESOURCE_ID == Parameter("homeID")))
-
-
- @inlineCallbacks
- def removeRecordForLocalName(self, localname):
- record = yield self.recordForLocalName(localname)
- shareeCollection = yield self._home.childWithName(record.localname)
- yield shareeCollection._deletedSyncToken(sharedRemoval=True)
-
- result = yield self._unbindShareQuery.on(self._txn, name=localname,
- homeID=self._home._resourceID)
- returnValue(result)
-
-
- @classproperty
- def _removeInviteShareQuery(cls): #@NoSelf
- """
- DAL query to remove a non-direct share by invite UID.
- """
- bind = cls._bindSchema
- inv = schema.INVITE
- return Update(
- {bind.BIND_STATUS: _BIND_STATUS_DECLINED},
- Where=(bind.HOME_RESOURCE_ID, bind.RESOURCE_ID) ==
- Select([inv.HOME_RESOURCE_ID, inv.RESOURCE_ID],
- From=inv, Where=inv.INVITE_UID == Parameter("uid")))
-
-
- @classproperty
- def _removeDirectShareQuery(cls): #@NoSelf
- """
- DAL query to remove a direct share by its homeID and resourceID.
- """
- bind = cls._bindSchema
- return Delete(From=bind,
- Where=(bind.HOME_RESOURCE_ID == Parameter("homeID"))
- .And(bind.RESOURCE_ID == Parameter("resourceID")))
-
-
- @inlineCallbacks
- def removeRecordForShareUID(self, shareUID):
-
- record = yield self.recordForShareUID(shareUID)
- shareeCollection = yield self._home.childWithName(record.localname)
- yield shareeCollection._deletedSyncToken(sharedRemoval=True)
-
- if not shareUID.startswith("Direct"):
- yield self._removeInviteShareQuery.on(self._txn, uid=shareUID)
- else:
- # Extract pieces from synthesised UID
- homeID, resourceID = shareUID[len("Direct-"):].split("-")
- # Now remove the binding for the direct share
- yield self._removeDirectShareQuery.on(
- self._txn, homeID=homeID, resourceID=resourceID)
-
-
-class SQLLegacyCalendarShares(SQLLegacyShares):
- """
- Emulator for the implicit interface specified by
- L{twistedcaldav.sharing.InvitesDatabase}.
- """
-
- _homeTable = CALENDAR_HOME_TABLE
- _bindTable = CALENDAR_BIND_TABLE
- _homeSchema = schema.CALENDAR_HOME
- _bindSchema = schema.CALENDAR_BIND
- _urlTopSegment = "calendars"
-
-
- def _getHomeWithUID(self, uid):
- return self._txn.calendarHomeWithUID(uid, create=True)
-
-
-
-class SQLLegacyAddressBookShares(SQLLegacyShares):
- """
- Emulator for the implicit interface specified by
- L{twistedcaldav.sharing.InvitesDatabase}.
- """
-
- _homeTable = ADDRESSBOOK_HOME_TABLE
- _bindTable = ADDRESSBOOK_BIND_TABLE
- _homeSchema = schema.ADDRESSBOOK_HOME
- _bindSchema = schema.ADDRESSBOOK_BIND
- _urlTopSegment = "addressbooks"
-
-
- def _getHomeWithUID(self, uid):
- return self._txn.addressbookHomeWithUID(uid, create=True)
-
-
-
class MemcachedUIDReserver(CachePoolUserMixIn, LoggingMixIn):
def __init__(self, index, cachePool=None):
self.index = index
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120803/09d7dfba/attachment-0001.html>
More information about the calendarserver-changes
mailing list