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()