[CalendarServer-changes] [9477] CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing .py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jul 20 20:17:36 PDT 2012
Revision: 9477
http://trac.macosforge.org/projects/calendarserver/changeset/9477
Author: gaya at apple.com
Date: 2012-07-20 20:17:36 -0700 (Fri, 20 Jul 2012)
Log Message:
-----------
use consistent names for Invitation objects and maps
Modified Paths:
--------------
CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
Modified: CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py
===================================================================
--- CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py 2012-07-21 03:16:25 UTC (rev 9476)
+++ CalendarServer/branches/users/gaya/inviteclean/twistedcaldav/sharing.py 2012-07-21 03:17:36 UTC (rev 9477)
@@ -30,6 +30,9 @@
from twext.web2.dav.http import ErrorResponse, MultiStatusResponse
from twext.web2.dav.resource import TwistedACLInheritable
from twext.web2.dav.util import allDataFromStream, joinURL
+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
from txdav.xml import element
from twisted.internet.defer import succeed, inlineCallbacks, DeferredList,\
@@ -49,52 +52,8 @@
import os
import types
-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
-class Invitation(object):
- """
- Invitation is a read-only wrapper for CommonHomeChild, that's similar to the old sharing.py code base.
- """
- def __init__(self, homeChild):
- self._homeChild = homeChild
-
- def homeChild(self):
- return self._homeChild
-
- def uid(self):
- return self._homeChild.inviteUID()
-
- def shareeUID(self):
- return self._homeChild._home.uid()
-
- def shareeAccess(self):
- return invitationShareeAccessFromBindModeMap[self._homeChild.shareMode()]
-
- def state(self):
- return invitationStateFromBindStatusMap[self._homeChild.shareStatus()]
-
- def summary(self):
- return self._homeChild.shareMessage()
-
-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
@@ -118,8 +77,8 @@
customxml.UID.fromString(invitation.uid()) if includeUID else None,
element.HRef.fromString(userid),
customxml.CommonName.fromString(cn),
- customxml.InviteAccess(inviteAccessMapToXML[invitation.shareeAccess()]()),
- inviteStatusMapToXML[invitation.state()](),
+ customxml.InviteAccess(invitationAccessMapToXML[invitation.access()]()),
+ invitationStatusMapToXML[invitation.state()](),
)
# See if this property is on the shared calendar
@@ -349,13 +308,13 @@
# sharee
userID = self._shareePrincipal.record.guid
wikiID = owner.record.shortNames[0]
- inviteAccess = (yield wikiAccessMethod(userID, wikiID))
- if inviteAccess == "read":
- inviteAccess = "read-only"
- elif inviteAccess in ("write", "admin"):
- inviteAccess = "read-write"
+ access = (yield wikiAccessMethod(userID, wikiID))
+ if access == "read":
+ access = "read-only"
+ elif access in ("write", "admin"):
+ access = "read-write"
else:
- inviteAccess = None
+ access = None
else:
result = (yield original.accessControlList(request, *args,
**kwargs))
@@ -364,22 +323,22 @@
# Invite shares use access mode from the invite
# Get the invite for this sharee
- invite = yield self._invitationForUID(
+ invitation = yield self._invitationForUID(
self._share.shareuid
)
- if invite is None:
+ if invitation is None:
returnValue(element.ACL())
- inviteAccess = invite.shareeAccess()
+ access = invitation.access()
userprivs = [
]
- if inviteAccess in ("read-only", "read-write", "read-write-schedule",):
+ if access in ("read-only", "read-write", "read-write-schedule",):
userprivs.append(element.Privilege(element.Read()))
userprivs.append(element.Privilege(element.ReadACL()))
userprivs.append(element.Privilege(element.ReadCurrentUserPrivilegeSet()))
- if inviteAccess in ("read-only",):
+ if access in ("read-only",):
userprivs.append(element.Privilege(element.WriteProperties()))
- if inviteAccess in ("read-write", "read-write-schedule",):
+ if access in ("read-write", "read-write-schedule",):
userprivs.append(element.Privilege(element.Write()))
proxyprivs = list(userprivs)
try:
@@ -533,7 +492,7 @@
@inlineCallbacks
- def _createInvitation(self, shareeUID, shareeAccess, summary,):
+ def _createInvitation(self, shareeUID, access, summary,):
'''
Create a new homeChild and wrap it in an Invitation
'''
@@ -543,7 +502,7 @@
shareeHome = yield self._newStoreObject._txn.addressbookHomeWithUID(shareeUID, create=True)
homeChild = yield self._newStoreObject.shareWithOptions(shareeHome,
- mode=invitationShareeAccessToBindModeMap[shareeAccess],
+ mode=invitationAccessToBindModeMap[access],
status=_BIND_STATUS_INVITED,
message=summary )
invitation = Invitation(homeChild)
@@ -551,13 +510,13 @@
@inlineCallbacks
- def _updateInvitation(self, invitation, shareeAccess=None, state=None, summary=None):
- mode = invitation.homeChild().shareMode() if shareeAccess is None else invitationShareeAccessToBindModeMap[shareeAccess]
+ def _updateInvitation(self, invitation, access=None, state=None, summary=None):
+ mode = invitation.homeChild().shareMode() if access is None else invitationAccessToBindModeMap[access]
status = invitation.homeChild().shareStatus() if state is None else invitationStateToBindStatusMap[state]
message = invitation.summary() if summary is None else summary
yield self._newStoreObject.updateShare(invitation.homeChild(), mode, status, message )
- assert not shareeAccess or shareeAccess == invitation.shareeAccess(), "shareeAccess=%s != invitation.shareeAccess()=%s" % (shareeAccess, invitation.shareeAccess())
+ 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())
@@ -623,11 +582,11 @@
# Look for existing invite and update its fields or create new one
invitation = yield self._invitationForShareeUID(shareeUID)
if invitation:
- yield self._updateInvitation(invitation, shareeAccess=inviteAccessMapFromXML[type(ace)], summary=summary)
+ yield self._updateInvitation(invitation, access=invitationAccessMapFromXML[type(ace)], summary=summary)
else:
invitation = yield self._createInvitation(
shareeUID=shareeUID,
- shareeAccess=inviteAccessMapFromXML[type(ace)],
+ access=invitationAccessMapFromXML[type(ace)],
summary=summary)
# Send invite notification
yield self.sendInviteNotification(invitation, request)
@@ -730,8 +689,8 @@
customxml.InviteNotification(
customxml.UID.fromString(invitation.uid()),
element.HRef.fromString(userid),
- inviteStatusMapToXML[state](),
- customxml.InviteAccess(inviteAccessMapToXML[invitation.shareeAccess()]()),
+ invitationStatusMapToXML[state](),
+ customxml.InviteAccess(invitationAccessMapToXML[invitation.access()]()),
customxml.HostURL(
element.HRef.fromString(hosturl),
),
@@ -955,21 +914,61 @@
("text", "xml") : xmlRequestHandler,
}
-inviteAccessMapToXML = {
+invitationAccessMapToXML = {
"read-only" : customxml.ReadAccess,
"read-write" : customxml.ReadWriteAccess,
}
-inviteAccessMapFromXML = dict([(v,k) for k,v in inviteAccessMapToXML.iteritems()])
+invitationAccessMapFromXML = dict([(v,k) for k,v in invitationAccessMapToXML.iteritems()])
-inviteStatusMapToXML = {
+invitationStatusMapToXML = {
"NEEDS-ACTION" : customxml.InviteStatusNoResponse,
"ACCEPTED" : customxml.InviteStatusAccepted,
"DECLINED" : customxml.InviteStatusDeclined,
"DELETED" : customxml.InviteStatusDeleted,
"INVALID" : customxml.InviteStatusInvalid,
}
-inviteStatusMapFromXML = dict([(v,k) for k,v in inviteStatusMapToXML.iteritems()])
+invitationStatusMapFromXML = dict([(v,k) for k,v in invitationStatusMapToXML.iteritems()])
+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())
+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())
+
+class Invitation(object):
+ """
+ Invitation is a read-only wrapper for CommonHomeChild, that uses terms similar LegacyInvite sharing.py code base.
+ """
+ def __init__(self, homeChild):
+ self._homeChild = homeChild
+
+ def homeChild(self):
+ return self._homeChild
+
+ def uid(self):
+ return self._homeChild.inviteUID()
+
+ def shareeUID(self):
+ return self._homeChild._home.uid()
+
+ def access(self):
+ return invitationAccessFromBindModeMap[self._homeChild.shareMode()]
+
+ def state(self):
+ return invitationStateFromBindStatusMap[self._homeChild.shareStatus()]
+
+ def summary(self):
+ return self._homeChild.shareMessage()
+
+
class LegacyInvite(object):
def __init__(self, inviteuid, userid, principalUID, common_name, access, state, summary):
@@ -1316,7 +1315,7 @@
*(
(
element.HRef.fromString(cua),
- inviteStatusMapToXML[state](),
+ invitationStatusMapToXML[state](),
customxml.HostURL(
element.HRef.fromString(hostUrl),
),
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120720/471547c5/attachment-0001.html>
More information about the calendarserver-changes
mailing list