You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2014/01/06 18:54:07 UTC

[2/8] git commit: Include server side error message in the multipart error exception.

Include server side error message in the multipart error exception.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/509040a6
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/509040a6
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/509040a6

Branch: refs/heads/trunk
Commit: 509040a68b5575e6785e6c085e76055cdc1da0fa
Parents: 8e5a1f4
Author: Tomaz Muraus <to...@apache.org>
Authored: Mon Jan 6 17:34:42 2014 +0100
Committer: Tomaz Muraus <to...@apache.org>
Committed: Mon Jan 6 17:37:34 2014 +0100

----------------------------------------------------------------------
 libcloud/common/aws.py         | 22 ++++++++++++++++------
 libcloud/storage/drivers/s3.py |  7 +++++--
 2 files changed, 21 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/509040a6/libcloud/common/aws.py
----------------------------------------------------------------------
diff --git a/libcloud/common/aws.py b/libcloud/common/aws.py
index 22d9732..868b5eb 100644
--- a/libcloud/common/aws.py
+++ b/libcloud/common/aws.py
@@ -26,7 +26,21 @@ from libcloud.utils.xml import findtext, findall
 
 
 class AWSBaseResponse(XmlResponse):
-    pass
+    namespace = None
+
+    def _parse_error_details(self, element):
+        """
+        Parse code and message from the provided error element.
+
+        :return: ``tuple`` with two elements: (code, message)
+        :rtype: ``tuple``
+        """
+        code = findtext(element=element, xpath='Code',
+                        namespace=self.namespace)
+        message = findtext(element=element, xpath='Message',
+                           namespace=self.namespace)
+
+        return code, message
 
 
 class AWSGenericResponse(AWSBaseResponse):
@@ -71,11 +85,7 @@ class AWSGenericResponse(AWSBaseResponse):
 
         msgs = []
         for err in errs:
-            code = findtext(element=err, xpath='Code',
-                            namespace=self.namespace)
-            message = findtext(element=err, xpath='Message',
-                               namespace=self.namespace)
-
+            code, message = self._parse_error_details(element=err)
             exceptionCls = self.exceptions.get(code, None)
 
             if exceptionCls is None:

http://git-wip-us.apache.org/repos/asf/libcloud/blob/509040a6/libcloud/storage/drivers/s3.py
----------------------------------------------------------------------
diff --git a/libcloud/storage/drivers/s3.py b/libcloud/storage/drivers/s3.py
index 947b1d7..b89d4be 100644
--- a/libcloud/storage/drivers/s3.py
+++ b/libcloud/storage/drivers/s3.py
@@ -64,7 +64,7 @@ RESPONSES_PER_REQUEST = 100
 
 
 class S3Response(AWSBaseResponse):
-
+    namespace = None
     valid_response_codes = [httplib.NOT_FOUND, httplib.CONFLICT,
                             httplib.BAD_REQUEST]
 
@@ -588,7 +588,10 @@ class S3StorageDriver(StorageDriver):
                                            method='POST')
 
         if response.status != httplib.OK:
-            raise LibcloudError('Error in multipart commit', driver=self)
+            element = response.object
+            code, message = response._parse_error_details(element=element)
+            msg = 'Error in multipart commit: %s (%s)' % (message, code)
+            raise LibcloudError(msg, driver=self)
 
         # Get the server's etag to be passed back to the caller
         body = response.parse_body()