[CalendarServer-changes] [9467] CalendarServer/branches/users/gaya/inviteclean
source_changes at macosforge.org
source_changes at macosforge.org
Thu Jul 19 17:31:26 PDT 2012
Revision: 9467
http://trac.macosforge.org/projects/calendarserver/changeset/9467
Author: gaya at apple.com
Date: 2012-07-19 17:31:26 -0700 (Thu, 19 Jul 2012)
Log Message:
-----------
Make Invitations class a CommonHomeChild wrapper
Modified Paths:
--------------
CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
Removed Paths:
-------------
CalendarServer/branches/users/gaya/inviteclean/txdav/common/iinvitation.py
Modified: CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py 2012-07-19 22:58:36 UTC (rev 9466)
+++ CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py 2012-07-20 00:31:26 UTC (rev 9467)
@@ -49,101 +49,54 @@
import os
import types
-'''
- TEMP FOR NOW - Invitation is duplicated in txdav.common.datastore.sql
- But importing Invitation causes a circular dependency.
-
- Invitation is needed now for _invitationFromLegecyInvite and _legacyInviteFromInvitation
-'''
-
from txdav.common.datastore.sql_tables import _BIND_MODE_OWN, \
_BIND_MODE_READ, _BIND_MODE_WRITE, _BIND_STATUS_INVITED, \
_BIND_STATUS_ACCEPTED, _BIND_STATUS_DECLINED, _BIND_STATUS_INVALID
-invitationStateToBindStatusMap = {
- "NEEDS-ACTION": _BIND_STATUS_INVITED,
- "ACCEPTED": _BIND_STATUS_ACCEPTED,
- "DECLINED": _BIND_STATUS_DECLINED,
- "INVALID": _BIND_STATUS_INVALID,
-}
-invitationStateFromBindStatusMap = dict((v,k) for k, v in invitationStateToBindStatusMap.iteritems())
-invitationShareeAccessToBindModeMap = {
- "own": _BIND_MODE_OWN,
- "read-only": _BIND_MODE_READ,
- "read-write": _BIND_MODE_WRITE,
- }
-invitationShareeAccessFromBindModeMap = dict((v,k) for k, v in invitationShareeAccessToBindModeMap.iteritems())
-
class Invitation(object):
"""
+ Invitation is a read-only wrapper for CommonHomeChild, that's similar to the old sharing.py code base.
"""
- def __init__(self, uid, sharerUID, shareeUID, shareeAccess, state, summary):
+ def __init__(self, uid=None, shareeUID=None, shareeAccess=None, state=None, summary=None, homeChild=None):
self._uid = uid
- self._sharerUID = sharerUID
self._shareeUID = shareeUID
self._shareeAccess = shareeAccess
self._state = state
self._summary = summary
+ self._homeChild = homeChild
def uid(self):
- """
- Unique identifier for this record. Randomly generated.
+ return self._homeChild.inviteUID() if self._homeChild else self._uid
- @return: the invite unique identifier
- @rtype: C{str}
- """
- return self._uid
-
- def sharerUID(self):
- """
- Sharer's unique identifier.
-
- @return: the Sharer's unique identifier.
- @rtype: C{str}
- """
- return self._sharerUID
-
def shareeUID(self):
- """
- Sharee's unique identifier.
-
- @return: the Sharee's unique identifier.
- @rtype: C{str}
- """
- return self._shareeUID
+ return self._homeChild._home.uid() if self._homeChild else self._shareeUID
def shareeAccess(self):
- """
- Sharee's access. Currently, one of "own", "read-only", or "read-write".
+ return invitationShareeAccessFromBindModeMap[self._homeChild.shareMode()] if self._homeChild else self._shareeAccess
- @return: the Sharee's access to the shared resource
- @rtype: C{str}
- """
- return self._shareeAccess
-
def state(self):
- """
- Invitation or bind state. Currently, one of "NEEDS-ACTION","ACCEPTED", "DECLINED", "INVALID".
-
- @return: the record state
- @rtype: C{str}
- """
- return self._state
+ return invitationStateFromBindStatusMap[self._homeChild.shareStatus()] if self._homeChild else self._state
def summary(self):
- """
- The shared resource's name, purpose, or description.
-
- @return: the summary
- @rtype: C{str}
- """
- return self._summary
-'''
- END FOR TEMP
-'''
+ return self._homeChild.shareMessage() if self._homeChild else self._summary
+invitationStateToBindStatusMap = {
+ "NEEDS-ACTION": _BIND_STATUS_INVITED,
+ "ACCEPTED": _BIND_STATUS_ACCEPTED,
+ "DECLINED": _BIND_STATUS_DECLINED,
+ "INVALID": _BIND_STATUS_INVALID,
+}
+invitationStateFromBindStatusMap = dict((v,k) for k, v in invitationStateToBindStatusMap.iteritems())
+invitationShareeAccessToBindModeMap = {
+ "own": _BIND_MODE_OWN,
+ "read-only": _BIND_MODE_READ,
+ "read-write": _BIND_MODE_WRITE,
+ }
+invitationShareeAccessFromBindModeMap = dict((v,k) for k, v in invitationShareeAccessToBindModeMap.iteritems())
+
+
# Types of sharing mode
SHARETYPE_INVITE = "I" # Invite based sharing
SHARETYPE_DIRECT = "D" # Direct linking based sharing
@@ -223,7 +176,7 @@
# Remove all invitees
for invitation in (yield self._allInvitations()):
- yield self.uninviteRecordFromShare(invitation, request)
+ yield self.uninviteFromShare(invitation, request)
# Remove invites database
self.invitesDB().remove()
@@ -590,9 +543,8 @@
returnValue("%s:%s" % (hosturl, userid))
- def _invitationFromLegecyInvite(self, legacyInvite, sharerUID=None):
+ def _invitationFromLegecyInvite(self, legacyInvite):
return Invitation(uid=legacyInvite.inviteuid,
- sharerUID=sharerUID,
shareeUID=legacyInvite.principalUID,
shareeAccess=legacyInvite.access,
state=legacyInvite.state,
@@ -611,27 +563,27 @@
summary=invitation.summary() )
@inlineCallbacks
- def _createInvitation(self, uid, sharerUID, shareeUID, shareeAccess, state, summary,):
+ def _createInvitation(self, uid, shareeUID, shareeAccess, state, summary,):
invitation = Invitation(uid=uid,
- sharerUID=sharerUID,
shareeUID=shareeUID,
shareeAccess=shareeAccess,
state=state,
summary=summary, )
yield self.invitesDB().addOrUpdateRecord(self._legacyInviteFromInvitation(invitation))
+ invitation = yield self._invitationForUID(uid)
returnValue(invitation)
@inlineCallbacks
def _updateInvitationForUID(self, uid, shareeAccess=None, state=None, summary=None):
- invitation = yield self._invitationForUID(uid)
- if shareeAccess:
- invitation._shareeAccess = shareeAccess
- if state:
- invitation._state = state
- if summary:
- invitation._summary = summary
+ oldInvitation = yield self._invitationForUID(uid)
+ invitation = Invitation(uid=oldInvitation.uid(),
+ shareeUID=oldInvitation.shareeUID(),
+ shareeAccess=shareeAccess if shareeAccess else oldInvitation.shareeAccess(),
+ state=state if state else oldInvitation.state(),
+ summary=summary if summary else oldInvitation.summary(), )
yield self.invitesDB().addOrUpdateRecord(self._legacyInviteFromInvitation(invitation))
+ invitation = yield self._invitationForUID(uid)
returnValue(invitation)
@@ -641,7 +593,7 @@
replaces self.invitesDB().allRecords()
"""
legecyInvites = yield self.invitesDB().allRecords()
- invitations = [self._invitationFromLegecyInvite(legecyInvite, sharerUID=self._newStoreObject._home.uid()) for legecyInvite in legecyInvites]
+ invitations = [self._invitationFromLegecyInvite(legecyInvite) for legecyInvite in legecyInvites]
returnValue(invitations)
@inlineCallbacks
@@ -649,18 +601,11 @@
"""
replaces self.invitesDB().allRecords()
"""
- invited = yield self._newStoreObject.asInvited()
+ invitedHomeChildren = yield self._newStoreObject.asInvited()
invitations = []
- for homeChildInvited in invited:
- state = invitationStateFromBindStatusMap[homeChildInvited.shareStatus()]
- shareeAccess = invitationShareeAccessFromBindModeMap[homeChildInvited.shareMode()]
- invitation = Invitation(uid=homeChildInvited.inviteUID(),
- sharerUID=self._newStoreObject._home.uid(),
- shareeUID= homeChildInvited._home.uid(),
- shareeAccess=shareeAccess,
- state=state,
- summary=homeChildInvited.shareMessage(), )
+ for homeChild in invitedHomeChildren:
+ invitation = Invitation(homeChild=homeChild)
invitations.append(invitation)
invitations.sort(key=lambda invitation:invitation.shareeUID())
@@ -669,13 +614,13 @@
oinvitationsTestStrings = []
for i in range(len(oinvitations)):
invitation = oinvitations[i]
- testStr = "i=%s, uid=%s, sharerUID=%s, shareeUID=%s, shareeAccess=%s, state=%s, summary=%s" % (i, invitation.uid(), invitation.sharerUID(), invitation.shareeUID(), invitation.shareeAccess(), invitation.state(), invitation.summary(), )
+ testStr = "i=%s, uid=%s, shareeUID=%s, shareeAccess=%s, state=%s, summary=%s" % (i, invitation.uid(), invitation.shareeUID(), invitation.shareeAccess(), invitation.state(), invitation.summary(), )
oinvitationsTestStrings += [testStr,]
invitationsTestStrings = []
for i in range(len(invitations)):
invitation = invitations[i]
- testStr = "i=%s, uid=%s, sharerUID=%s, shareeUID=%s, shareeAccess=%s, state=%s, summary=%s" % (i, invitation.uid(), invitation.sharerUID(), invitation.shareeUID(), invitation.shareeAccess(), invitation.state(), invitation.summary(), )
+ testStr = "i=%s, uid=%s, shareeUID=%s, shareeAccess=%s, state=%s, summary=%s" % (i, invitation.uid(), invitation.shareeUID(), invitation.shareeAccess(), invitation.state(), invitation.summary(), )
invitationsTestStrings += [testStr,]
if oinvitationsTestStrings != invitationsTestStrings:
@@ -733,9 +678,7 @@
if invitation:
invitation = yield self._updateInvitationForUID(invitation.uid(), shareeAccess=inviteAccessMapFromXML[type(ace)], summary=summary)
else:
- ownerPrincipal = (yield self.ownerPrincipal(request))
invitation = yield self._createInvitation(uid=str(uuid4()),
- sharerUID=ownerPrincipal.principalUID(),
shareeUID=shareeUID,
shareeAccess=inviteAccessMapFromXML[type(ace)],
state="NEEDS-ACTION",
@@ -769,7 +712,7 @@
try:
invitation = yield self._invitationForShareeUID(shareeUID)
if invitation:
- result = (yield self.uninviteRecordFromShare(invitation, request))
+ result = (yield self.uninviteFromShare(invitation, request))
else:
result = False
finally:
@@ -779,7 +722,7 @@
@inlineCallbacks
- def uninviteRecordFromShare(self, invitation, request):
+ def uninviteFromShare(self, invitation, request):
# Remove any shared calendar or address book
sharee = self.principalForUID(invitation.shareeUID())
@@ -795,8 +738,7 @@
if invitation and invitation.state() != "ACCEPTED":
yield self.removeInviteNotification(invitation, request)
elif invitation:
- invitation._state = "DELETED"
- yield self.sendInviteNotification(invitation, request)
+ yield self.sendInviteNotification(invitation, request, fakeState="DELETED")
# use new API
from twistedcaldav.directory.util import transactionFromRequest
@@ -820,7 +762,7 @@
return self.inviteSingleUserToShare(userid, commonName, aceNEW, summary, request)
@inlineCallbacks
- def sendInviteNotification(self, invitation, request):
+ def sendInviteNotification(self, invitation, request, fakeState=None):
ownerPrincipal = (yield self.ownerPrincipal(request))
owner = ownerPrincipal.principalURL()
@@ -844,6 +786,7 @@
# Generate invite XML
userid = "urn:uuid:" + invitation.shareeUID()
+ state = fakeState if fakeState else invitation.state()
typeAttr = {'shared-type':self.sharedResourceType()}
xmltype = customxml.InviteNotification(**typeAttr)
@@ -852,7 +795,7 @@
customxml.InviteNotification(
customxml.UID.fromString(invitation.uid()),
element.HRef.fromString(userid),
- inviteStatusMapToXML[invitation.state()](),
+ inviteStatusMapToXML[state](),
customxml.InviteAccess(inviteAccessMapToXML[invitation.shareeAccess()]()),
customxml.HostURL(
element.HRef.fromString(hosturl),
Deleted: CalendarServer/branches/users/gaya/inviteclean/txdav/common/iinvitation.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/txdav/common/iinvitation.py 2012-07-19 22:58:36 UTC (rev 9466)
+++ CalendarServer/branches/users/gaya/inviteclean/txdav/common/iinvitation.py 2012-07-20 00:31:26 UTC (rev 9467)
@@ -1,80 +0,0 @@
-##
-# Copyright (c) 2012 Apple Inc. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-##
-
-"""
-Common invitation interface
-"""
-
-from zope.interface.interface import Interface
-
-
-__all__ = [
- "IInvitation",
-]
-
-class IInvitation(Interface):
- """
- IInvitation. The state of the an invitation to a shared resource.
-
- """
-
-def uid():
- """
- Unique identifier for this invitation. Randomly generated.
-
- @return: the invite unique identifier
- @rtype: C{str}
- """
-
-def sharerUID():
- """
- Sharer's unique identifier.
-
- @return: the Sharer's unique identifier.
- @rtype: C{str}
- """
-
-def shareeUID():
- """
- Sharee's unique identifier.
-
- @return: the Sharee's unique identifier.
- @rtype: C{str}
- """
-
-def shareeAccess():
- """
- Sharee's access. Currently, one of "own", "read-only", or "read-write".
-
- @return: the Sharee's access to the shared resource
- @rtype: C{str}
- """
-
-def state():
- """
- Invitation or bind state. Currently, one of "NEEDS-ACTION","ACCEPTED", "DECLINED", "INVALID".
-
- @return: the invitation state
- @rtype: C{str}
- """
-
-def summary():
- """
- The shared resource's name, purpose, or description.
-
- @return: the summary
- @rtype: C{str}
- """
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120719/15bbae1e/attachment-0001.html>
More information about the calendarserver-changes
mailing list