Modified getEntryXmlDoc to always create empty content element; Modified net.py to allow extra headers to be passed in to rest methods

git-svn-id: https://svn.apache.org/repos/asf/chemistry/cmislib/trunk@1388254 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/cmislib.egg-info/SOURCES.txt b/src/cmislib.egg-info/SOURCES.txt
index bbb0c10..58164da 100644
--- a/src/cmislib.egg-info/SOURCES.txt
+++ b/src/cmislib.egg-info/SOURCES.txt
@@ -44,8 +44,8 @@
 src/doc/build/genindex.html
 src/doc/build/index.html
 src/doc/build/install.html
-src/doc/build/modindex.html
 src/doc/build/objects.inv
+src/doc/build/py-modindex.html
 src/doc/build/sample-data.html
 src/doc/build/search.html
 src/doc/build/searchindex.js
@@ -59,15 +59,26 @@
 src/doc/build/_sources/install.txt
 src/doc/build/_sources/sample-data.txt
 src/doc/build/_sources/tests.txt
+src/doc/build/_static/ajax-loader.gif
 src/doc/build/_static/basic.css
+src/doc/build/_static/comment-bright.png
+src/doc/build/_static/comment-close.png
+src/doc/build/_static/comment.png
 src/doc/build/_static/default.css
 src/doc/build/_static/doctools.js
+src/doc/build/_static/down-pressed.png
+src/doc/build/_static/down.png
 src/doc/build/_static/file.png
 src/doc/build/_static/jquery.js
 src/doc/build/_static/minus.png
 src/doc/build/_static/plus.png
 src/doc/build/_static/pygments.css
 src/doc/build/_static/searchtools.js
+src/doc/build/_static/sidebar.js
+src/doc/build/_static/underscore.js
+src/doc/build/_static/up-pressed.png
+src/doc/build/_static/up.png
+src/doc/build/_static/websupport.js
 src/doc/src/Makefile
 src/doc/src/about.rst
 src/doc/src/code.rst
diff --git a/src/cmislib/model.py b/src/cmislib/model.py
index 5e419dc..2947bc6 100644
--- a/src/cmislib/model.py
+++ b/src/cmislib/model.py
@@ -209,7 +209,10 @@
             self._processCommonErrors(result)
             return result
         else:
-            return minidom.parse(result)
+            try:
+                return minidom.parse(result)
+            except ExpatError:
+                raise CmisException('Could not parse server response', url)
 
     def delete(self, url, **kwargs):
 
@@ -257,9 +260,15 @@
                              password=self.password,
                              **kwargs)
         if type(result) != HTTPError:
-            return minidom.parse(result)
+            try:
+                return minidom.parse(result)
+            except ExpatError:
+                raise CmisException('Could not parse server response', url)
         elif result.code == 201:
-            return minidom.parse(result)
+            try:
+                return minidom.parse(result)
+            except ExpatError:
+                raise CmisException('Could not parse server response', url)
         else:
             self._processCommonErrors(result)
             return result
@@ -293,6 +302,7 @@
             try:
                 return minidom.parse(result)
             except ExpatError:
+                # This may happen and is normal
                 return None
 
     def _processCommonErrors(self, error):
@@ -4050,6 +4060,8 @@
     entryElement.setAttribute('xmlns:cmisra', CMISRA_NS)
     entryXmlDoc.appendChild(entryElement)
 
+    contentElement = entryXmlDoc.createElementNS(CMISRA_NS, 'cmisra:content')
+
     # if there is a File, encode it and add it to the XML
     if contentFile:
         mimetype = contentType
@@ -4073,7 +4085,6 @@
         # and encode everything.
 
         fileData = contentFile.read().encode("base64")
-        contentElement = entryXmlDoc.createElementNS(CMISRA_NS, 'cmisra:content')
         mediaElement = entryXmlDoc.createElementNS(CMISRA_NS, 'cmisra:mediatype')
         mediaElementText = entryXmlDoc.createTextNode(mimetype)
         mediaElement.appendChild(mediaElementText)
@@ -4083,7 +4094,7 @@
         contentElement.appendChild(mediaElement)
         contentElement.appendChild(base64Element)
 
-        entryElement.appendChild(contentElement)
+    entryElement.appendChild(contentElement)
 
     objectElement = entryXmlDoc.createElementNS(CMISRA_NS, 'cmisra:object')
     objectElement.setAttribute('xmlns:cmis', CMIS_NS)
diff --git a/src/cmislib/net.py b/src/cmislib/net.py
index 9d9e603..93c9420 100644
--- a/src/cmislib/net.py
+++ b/src/cmislib/net.py
@@ -112,7 +112,12 @@
 
         """ Makes a get request to the URL specified."""
 
+        headers = None
         if kwargs:
+            if 'headers' in kwargs:
+                headers = kwargs['headers']
+                del(kwargs['headers'])
+                self.logger.debug('Headers passed in:%s' % headers)
             if url.find('?') >= 0:
                 url = url + '&' + urlencode(kwargs)
             else:
@@ -124,7 +129,11 @@
 
         # add a user-agent
         request.add_header('User-Agent', self.user_agent)
-
+        if headers:
+            for k,v in headers.items():
+                self.logger.debug('Adding header:%s:%s' % (k,v))
+                request.add_header(k, v)
+                
         # create a password manager
         passwordManager = HTTPPasswordMgrWithDefaultRealm()
         passwordManager.add_password(None, url, username, password)
@@ -139,7 +148,12 @@
 
         """ Makes a delete request to the URL specified. """
 
+        headers = None
         if kwargs:
+            if 'headers' in kwargs:
+                headers = kwargs['headers']
+                del(kwargs['headers'])
+                self.logger.debug('Headers passed in:%s' % headers)
             if url.find('?') >= 0:
                 url = url + '&' + urlencode(kwargs)
             else:
@@ -151,6 +165,10 @@
 
         # add a user-agent
         request.add_header('User-Agent', self.user_agent)
+        if headers:
+            for k,v in headers.items():
+                self.logger.debug('Adding header:%s:%s' % (k,v))
+                request.add_header(k, v)
 
         # create a password manager
         passwordManager = HTTPPasswordMgrWithDefaultRealm()
@@ -182,7 +200,12 @@
         specified content type.
         """
 
+        headers = None
         if kwargs:
+            if 'headers' in kwargs:
+                headers = kwargs['headers']
+                del(kwargs['headers'])
+                self.logger.debug('Headers passed in:%s' % headers)
             if url.find('?') >= 0:
                 url = url + '&' + urlencode(kwargs)
             else:
@@ -197,6 +220,11 @@
 
         # add a user-agent
         request.add_header('User-Agent', self.user_agent)
+        if headers:
+            for k,v in headers.items():
+                self.logger.debug('Adding header:%s:%s' % (k,v))
+                request.add_header(k, v)
+
         # create a password manager
         passwordManager = HTTPPasswordMgrWithDefaultRealm()
         passwordManager.add_password(None, url, username, password)
@@ -221,7 +249,12 @@
         specified content type.
         """
 
+        headers = None
         if kwargs:
+            if 'headers' in kwargs:
+                headers = kwargs['headers']
+                del(kwargs['headers'])
+                self.logger.debug('Headers passed in:%s' % headers)
             if url.find('?') >= 0:
                 url = url + '&' + urlencode(kwargs)
             else:
@@ -236,6 +269,10 @@
 
         # add a user-agent
         request.add_header('User-Agent', self.user_agent)
+        if headers:
+            for k,v in headers.items():
+                self.logger.debug('Adding header:%s:%s' % (k,v))
+                request.add_header(k, v)
 
         # create a password manager
         passwordManager = HTTPPasswordMgrWithDefaultRealm()