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 2016/09/02 18:15:08 UTC
svn commit: r1758999 - in /chemistry/cmislib/trunk/src:
cmislib/browser/binding.py cmislib/messages.py tests/cmislibtest.py
Author: jpotts
Date: Fri Sep 2 18:15:08 2016
New Revision: 1758999
URL: http://svn.apache.org/viewvc?rev=1758999&view=rev
Log:
Work-in-progress on change entry support for the cmislib browser binding.
Modified:
chemistry/cmislib/trunk/src/cmislib/browser/binding.py
chemistry/cmislib/trunk/src/cmislib/messages.py
chemistry/cmislib/trunk/src/tests/cmislibtest.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=1758999&r1=1758998&r2=1758999&view=diff
==============================================================================
--- chemistry/cmislib/trunk/src/cmislib/browser/binding.py (original)
+++ chemistry/cmislib/trunk/src/cmislib/browser/binding.py Fri Sep 2 18:15:08 2016
@@ -1238,8 +1238,20 @@ class BrowserRepository(object):
>>> rs[0].changeTime
datetime.datetime(2010, 2, 16, 20, 6, 37)
"""
+ if self.getCapabilities()['Changes'] is None:
+ raise NotSupportedException(messages.NO_CHANGE_LOG_SUPPORT)
- pass
+ changesUrl = self.getRootFolderUrl() + "?selector=contentChanges"
+
+ result = self._cmisClient.binding.get(changesUrl,
+ self._cmisClient.username,
+ self._cmisClient.password,
+ **kwargs)
+
+ return BrowserResultSet(self._cmisClient,
+ self,
+ data=result,
+ serializer=ChangeEntrySerializer())
def createDocumentFromString(self,
name,
@@ -2727,7 +2739,7 @@ class BrowserACL(ACL):
result[principalId] = ace
return result
- def addEntry(self, principalId, access, direct):
+ def addEntry(self, principalId, access, direct=True):
"""
Adds an :class:`ACE` entry to the ACL.
@@ -2844,6 +2856,19 @@ class BrowserChangeEntry(ChangeEntry):
u'updated'
"""
+ def __init__(self, cmisClient, repository, data):
+ """Constructor"""
+ self._cmisClient = cmisClient
+ self._repository = repository
+ self._data = data
+ self._properties = {}
+ self._objectId = None
+ self._changeEntryId = None
+ self._changeType = None
+ self._changeTime = None
+ self.logger = logging.getLogger('cmislib.model.ChangeEntry')
+ self.logger.info('Creating an instance of ChangeEntry')
+
def getId(self):
"""
Returns the unique ID of the change entry.
@@ -2942,9 +2967,18 @@ class BrowserChangeEntryResultSet(Browse
"""
Overriding to make it work with a list instead of a dict.
"""
- # TODO need to implement
- pass
+ if self._results:
+ return self._results
+
+ if self._data:
+ entries = []
+ for entry in self._data:
+ changeEntry = BrowserChangeEntry(self._cmisClient, self._repository, entry)
+ entries.append(changeEntry)
+
+ self._results = entries
+ return self._results
class BrowserRendition(object):
@@ -3233,3 +3267,24 @@ class ACLSerializer(object):
aces.append(entryJSON)
return json.dumps(aces)
+
+class ChangeEntrySerializer(object):
+
+ """
+ Responsible for serializing lists of change entries.
+ """
+
+ def fromJSON(self, client, repo, jsonObj):
+ """Transforms from JSON to the object."""
+ self.logger = logging.getLogger('cmislib.browser.binding.ChangeEntrySerializer')
+ entries = []
+ for obj in jsonObj['objects']:
+ self.logger.debug("Parsing a change entry object")
+ dataObj = obj['object']
+ cmisObject = getSpecializedObject(BrowserChangeEntry(client,
+ repo,
+ data=dataObj))
+ self.logger.debug("Parsed a change entry object, appending")
+ entries.append(cmisObject)
+
+ return entries
Modified: chemistry/cmislib/trunk/src/cmislib/messages.py
URL: http://svn.apache.org/viewvc/chemistry/cmislib/trunk/src/cmislib/messages.py?rev=1758999&r1=1758998&r2=1758999&view=diff
==============================================================================
--- chemistry/cmislib/trunk/src/cmislib/messages.py (original)
+++ chemistry/cmislib/trunk/src/cmislib/messages.py Fri Sep 2 18:15:08 2016
@@ -22,3 +22,4 @@ Common strings.
"""
NO_ACL_SUPPORT = 'This repository does not support ACLs'
NO_CHANGE_LOG_SUPPORT = 'This repository does not support change logs'
+NO_CHANGE_OBJECT_SUPPORT = 'This repository does not support change log entries as objects'
Modified: chemistry/cmislib/trunk/src/tests/cmislibtest.py
URL: http://svn.apache.org/viewvc/chemistry/cmislib/trunk/src/tests/cmislibtest.py?rev=1758999&r1=1758998&r2=1758999&view=diff
==============================================================================
--- chemistry/cmislib/trunk/src/tests/cmislibtest.py (original)
+++ chemistry/cmislib/trunk/src/tests/cmislibtest.py Fri Sep 2 18:15:08 2016
@@ -733,7 +733,8 @@ class ChangeEntryTest(CmisTestBase):
"""Get the content changes and inspect Change Entry props"""
# need to check changes capability
- if not self._repo.capabilities['Changes']:
+ changeCap = self._repo.capabilities['Changes']
+ if changeCap == 'none':
print messages.NO_CHANGE_LOG_SUPPORT
return
@@ -751,10 +752,15 @@ class ChangeEntryTest(CmisTestBase):
"""Gets the ACL that is included with a Change Entry."""
# need to check changes capability
- if not self._repo.capabilities['Changes']:
+ changeCap = self._repo.capabilities['Changes']
+ if changeCap == 'none':
print messages.NO_CHANGE_LOG_SUPPORT
return
+ if changeCap == 'objectidsonly':
+ print messages.NO_CHANGE_OBJECT_SUPPORT
+ return
+
# need to check ACL capability
if not self._repo.capabilities['ACL']:
print messages.NO_ACL_SUPPORT
@@ -786,10 +792,14 @@ class ChangeEntryTest(CmisTestBase):
# need to check changes capability
changeCap = self._repo.capabilities['Changes']
- if not changeCap:
+ if changeCap == 'none':
print messages.NO_CHANGE_LOG_SUPPORT
return
+ if changeCap == 'objectidsonly':
+ print messages.NO_CHANGE_OBJECT_SUPPORT
+ return
+
# need to test once without includeProperties set. the objectID should be there
rs = self._repo.getContentChanges()
self.assertTrue(len(rs) > 0)