You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by jp...@apache.org on 2014/05/16 21:05:39 UTC
svn commit: r1595307 -
/chemistry/cmislib/trunk/src/cmislib/browser/binding.py
Author: jpotts
Date: Fri May 16 19:05:38 2014
New Revision: 1595307
URL: http://svn.apache.org/r1595307
Log:
cmislib make acl tests run clean for browser binding
Modified:
chemistry/cmislib/trunk/src/cmislib/browser/binding.py
Modified: chemistry/cmislib/trunk/src/cmislib/browser/binding.py
URL: http://svn.apache.org/viewvc/chemistry/cmislib/trunk/src/cmislib/browser/binding.py?rev=1595307&r1=1595306&r2=1595307&view=diff
==============================================================================
--- chemistry/cmislib/trunk/src/cmislib/browser/binding.py (original)
+++ chemistry/cmislib/trunk/src/cmislib/browser/binding.py Fri May 16 19:05:38 2014
@@ -511,8 +511,32 @@ class BrowserCmisObject(object):
>>> acl.getEntries()
{u'GROUP_EVERYONE': <cmislib.model.ACE object at 0x10071a8d0>, 'jdoe': <cmislib.model.ACE object at 0x10071a590>}
"""
+ if self._repository.getCapabilities()['ACL'] == 'manage':
+ # if the ACL capability is manage, this must be
+ # supported
+ # but it also depends on the canApplyACL allowable action
+ # for this object
+ if not isinstance(acl, ACL):
+ raise CmisException('The ACL to apply must be an instance of the ACL class.')
+ # get the root folder URL
+ aclUrl = self._repository.getRootFolderUrl() + "?objectId=" + self.id + "&cmisaction=applyACL"
+
+ aclJSON = ACLSerializer().toJSON(acl)
+
+ contentType, body = encode_multipart_formdata(None, StringIO.StringIO(aclJSON), 'application/json')
+
+ # invoke the URL
+ result = self._cmisClient.binding.post(aclUrl.encode('utf-8'),
+ body,
+ contentType,
+ self._cmisClient.username,
+ self._cmisClient.password)
+
+ # return the result set
+ return BrowserACL(data=result)
+ else:
+ raise NotSupportedException
- pass
allowableActions = property(getAllowableActions)
name = property(getName)
@@ -734,8 +758,15 @@ class BrowserRepository(object):
cmis:read
cmis:write
"""
- #TODO need to implement
- pass
+ if not self.getCapabilities()['ACL']:
+ raise NotSupportedException(messages.NO_ACL_SUPPORT)
+
+ permData = self.data['aclCapabilities']['permissions']
+ perms = {}
+ for entry in permData:
+ perms[entry['permission']] = entry['description']
+
+ return perms
def getPermissionMap(self):
@@ -762,8 +793,15 @@ class BrowserRepository(object):
cmis:all
{http://www.alfresco.org/model/content/1.0}lockable.CheckIn
"""
- #TODO need to implement
- pass
+ if not self.getCapabilities()['ACL']:
+ raise NotSupportedException(messages.NO_ACL_SUPPORT)
+
+ permData = self.data['aclCapabilities']['permissionMapping']
+ permMap = {}
+ for entry in permData:
+ permMap[entry['key']] = entry['permission']
+
+ return permMap
def getPropagation(self):
@@ -777,8 +815,10 @@ class BrowserRepository(object):
>>> repo.propagation
u'propagate'
"""
- #TODO need to implement
- pass
+ if not self.getCapabilities()['ACL']:
+ raise NotSupportedException(messages.NO_ACL_SUPPORT)
+
+ return self.data['aclCapabilities']['propagation']
def getCapabilities(self):
@@ -2606,7 +2646,7 @@ class BrowserProperty(object):
openChoice = property(isOpenChoice)
-class BrowserACL(object):
+class BrowserACL(ACL):
"""
Represents the Access Control List for an object.
@@ -2648,7 +2688,7 @@ class BrowserACL(object):
result[principalId] = ace
return result
- def addEntry(self, ace):
+ def addEntry(self, principalId, access, direct):
"""
Adds an :class:`ACE` entry to the ACL.
@@ -2660,7 +2700,8 @@ class BrowserACL(object):
{u'GROUP_EVERYONE': <cmislib.model.ACE object at 0x100731410>, u'jdoe': <cmislib.model.ACE object at 0x100731150>, 'jpotts': <cmislib.model.ACE object at 0x1005a22d0>, 'jsmith': <cmislib.model.ACE object at 0x1005a2210>}
"""
- pass
+ ace = BrowserACE(principalId, access, direct)
+ self._entries[ace.principalId] = ace
def removeEntry(self, principalId):
@@ -2674,7 +2715,8 @@ class BrowserACL(object):
{u'GROUP_EVERYONE': <cmislib.model.ACE object at 0x100731410>, u'jdoe': <cmislib.model.ACE object at 0x100731150>, 'jpotts': <cmislib.model.ACE object at 0x1005a22d0>}
"""
- pass
+ if self._entries.has_key(principalId):
+ del(self._entries[principalId])
def clearEntries(self):
@@ -2694,7 +2736,8 @@ class BrowserACL(object):
>>> acl.getXmlDoc()
"""
- pass
+ self._entries.clear()
+ self.results = None
def getEntries(self):
@@ -3068,4 +3111,18 @@ class FolderSerializer(object):
obj = json.loads(jsonString)
objectId = obj['succinctProperties']['cmis:objectId']
folder = BrowserFolder(client, repo, objectId, properties=obj['succinctProperties'])
- return folder
\ No newline at end of file
+ return folder
+
+
+class ACLSerializer(object):
+ def toJSON(self, acl):
+ entries = acl.getEntries()
+ aces = []
+ for key in entries:
+ entryJSON = {}
+ entryJSON['isDirect'] = entries[key].direct
+ entryJSON['prinipcal'] = {'principalId': entries[key].principalId}
+ entryJSON['permissions'] = entries[key].permissions
+ aces.append(entryJSON)
+
+ return json.dumps(aces)
\ No newline at end of file