cmislib browser binding progress, deleteContentStream, getObjectParents

git-svn-id: https://svn.apache.org/repos/asf/chemistry/cmislib/trunk@1595109 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/cmislib/browser/binding.py b/src/cmislib/browser/binding.py
index 66b7b17..dd2bc7e 100644
--- a/src/cmislib/browser/binding.py
+++ b/src/cmislib/browser/binding.py
@@ -22,7 +22,7 @@
 """
 from cmislib.cmis_services import Binding, RepositoryServiceIfc
 from cmislib.domain import CmisId, CmisObject, Repository, Relationship, Policy, ObjectType, Property, Folder, Document, ACL, ACE, ChangeEntry, ResultSet, ChangeEntryResultSet, Rendition
-from cmislib.exceptions import CmisException, RuntimeException, ObjectNotFoundException
+from cmislib.exceptions import CmisException, NotSupportedException, ObjectNotFoundException, RuntimeException
 from cmislib.net import RESTService as Rest
 from cmislib.util import parsePropValueByType, parseBoolValue
 import json
@@ -222,13 +222,16 @@
         """
         #TODO add kwargs logic here
 
+        if not self.getAllowableActions()['canGetObjectParents']:
+            raise NotSupportedException('Object does not support getObjectParents')
+
         byObjectIdUrl = self._repository.getRootFolderUrl() + "?objectId=" + self.getObjectId() + "&cmisselector=parents"
         result = self._cmisClient.binding.get(byObjectIdUrl.encode('utf-8'),
                                                    self._cmisClient.username,
                                                    self._cmisClient.password,
                                                    **kwargs)
         # return the result set
-        return BrowserResultSet(self._cmisClient, self._repository, {'objects': result})
+        return BrowserResultSet(self._cmisClient, self._repository, {'objects': result}, serializer=ChildrenSerializer())
 
     def getPaths(self):
         """
@@ -1751,7 +1754,9 @@
         The optional major and filter arguments are supported.
         """
 
-        pass
+        latestDoc = self.getLatestVersion(**kwargs)
+
+        return latestDoc.getProperties()
 
     def getAllVersions(self, **kwargs):
 
@@ -1815,7 +1820,24 @@
          - overwriteFlag=None
         """
 
-        pass
+        # get the root folder URL
+        createDocUrl = self._repository.getRootFolderUrl()
+
+        props = {"objectId" : self.id,
+                 "cmisaction" : "setContent"}
+
+        contentType, body = encode_multipart_formdata(None, contentFile, contentType)
+
+        # invoke the URL
+        result = self._cmisClient.binding.post(createDocUrl.encode('utf-8'),
+                                               body,
+                                               contentType,
+                                               self._cmisClient.username,
+                                               self._cmisClient.password)
+
+        # return the result set
+        return BrowserDocument(self._cmisClient, self, data=result)
+
 
     def deleteContentStream(self):
 
@@ -1823,6 +1845,9 @@
         Delete's the content stream associated with this object.
         """
 
+        if not self.allowableActions['canDeleteContentStream']:
+            raise CmisException('Not allowed to delete the content stream')
+
         delUrl = self._repository.getRootFolderUrl()
 
         props = {"objectId" : self.id,
@@ -2938,14 +2963,15 @@
     crlf = '\r\n'
     L = []
     fileName = None
-    for (key, value) in fields.iteritems():
-        if (key == 'cmis:name'):
-            fileName = value
-        L.append('--' + boundary)
-        L.append('Content-Disposition: form-data; name="%s"' % key)
-        L.append('Content-Type: text/plain; charset=utf-8')
-        L.append('')
-        L.append(value)
+    if fields:
+        for (key, value) in fields.iteritems():
+            if (key == 'cmis:name'):
+                fileName = value
+            L.append('--' + boundary)
+            L.append('Content-Disposition: form-data; name="%s"' % key)
+            L.append('Content-Type: text/plain; charset=utf-8')
+            L.append('')
+            L.append(value)
 
     if file:
         L.append('--' + boundary)