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 2011/05/15 23:02:19 UTC

svn commit: r1103542 - in /incubator/libcloud/trunk/libcloud: common/base.py storage/drivers/cloudfiles.py storage/drivers/s3.py

Author: tomaz
Date: Sun May 15 21:02:18 2011
New Revision: 1103542

URL: http://svn.apache.org/viewvc?rev=1103542&view=rev
Log:
Properly capture errors if they happen in the RawResponse part.

Modified:
    incubator/libcloud/trunk/libcloud/common/base.py
    incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py
    incubator/libcloud/trunk/libcloud/storage/drivers/s3.py

Modified: incubator/libcloud/trunk/libcloud/common/base.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/common/base.py?rev=1103542&r1=1103541&r2=1103542&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/common/base.py (original)
+++ incubator/libcloud/trunk/libcloud/common/base.py Sun May 15 21:02:18 2011
@@ -25,39 +25,6 @@ import libcloud
 from libcloud.httplib_ssl import LibcloudHTTPSConnection
 from httplib import HTTPConnection as LibcloudHTTPConnection
 
-class RawResponse(object):
-
-    def __init__(self, response=None):
-        self._status = None
-        self._response = None
-        self._headers = {}
-        self._error = None
-        self._reason = None
-
-    @property
-    def response(self):
-        if not self._response:
-            self._response = self.connection.connection.getresponse()
-        return self._response
-
-    @property
-    def status(self):
-        if not self._status:
-            self._status = self.response.status
-        return self._status
-
-    @property
-    def headers(self):
-        if not self._headers:
-            self._headers = dict(self.response.getheaders())
-        return self._headers
-
-    @property
-    def reason(self):
-        if not self._reason:
-            self._reason = self.response.reason
-        return self._reason
-
 class Response(object):
     """
     A Base Response class to derive from.
@@ -113,6 +80,43 @@ class Response(object):
         """
         return self.status == httplib.OK or self.status == httplib.CREATED
 
+class RawResponse(Response):
+
+    def __init__(self, response=None):
+        self._status = None
+        self._response = None
+        self._headers = {}
+        self._error = None
+        self._reason = None
+
+    @property
+    def response(self):
+        if not self._response:
+            response = self.connection.connection.getresponse()
+            self._response, self.body = response, response
+            if not self.success():
+                self.parse_error()
+        return self._response
+
+    @property
+    def status(self):
+        if not self._status:
+            self._status = self.response.status
+        return self._status
+
+    @property
+    def headers(self):
+        if not self._headers:
+            self._headers = dict(self.response.getheaders())
+        return self._headers
+
+    @property
+    def reason(self):
+        if not self._reason:
+            self._reason = self.response.reason
+        return self._reason
+
+
 #TODO: Move this to a better location/package
 class LoggingConnection():
     """

Modified: incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py?rev=1103542&r1=1103541&r2=1103542&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/drivers/cloudfiles.py Sun May 15 21:02:18 2011
@@ -23,7 +23,7 @@ except:
 
 from libcloud.utils import read_in_chunks
 from libcloud.common.types import MalformedResponseError, LibcloudError
-from libcloud.common.base import Response
+from libcloud.common.base import Response, RawResponse
 
 from libcloud.storage.providers import Provider
 from libcloud.storage.base import Object, Container, StorageDriver
@@ -78,6 +78,8 @@ class CloudFilesResponse(Response):
 
         return data
 
+class CloudFilesRawResponse(CloudFilesResponse, RawResponse):
+    pass
 
 class CloudFilesConnection(RackspaceBaseConnection):
     """
@@ -85,6 +87,7 @@ class CloudFilesConnection(RackspaceBase
     """
 
     responseCls = CloudFilesResponse
+    rawResponseCls = CloudFilesRawResponse
     auth_host = None
     _url_key = "storage_url"
 

Modified: incubator/libcloud/trunk/libcloud/storage/drivers/s3.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/storage/drivers/s3.py?rev=1103542&r1=1103541&r2=1103542&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/storage/drivers/s3.py (original)
+++ incubator/libcloud/trunk/libcloud/storage/drivers/s3.py Sun May 15 21:02:18 2011
@@ -26,7 +26,7 @@ from xml.etree.ElementTree import Elemen
 from libcloud.utils import fixxpath, findtext, in_development_warning
 from libcloud.utils import read_in_chunks
 from libcloud.common.types import InvalidCredsError, LibcloudError
-from libcloud.common.base import ConnectionUserAndKey
+from libcloud.common.base import ConnectionUserAndKey, RawResponse
 from libcloud.common.aws import AWSBaseResponse
 
 from libcloud.storage.base import Object, Container, StorageDriver
@@ -70,6 +70,9 @@ class S3Response(AWSBaseResponse):
         raise LibcloudError('Unknown error. Status code: %d' % (self.status),
                             driver=S3StorageDriver)
 
+class S3RawResponse(S3Response, RawResponse):
+    pass
+
 class S3Connection(ConnectionUserAndKey):
     """
     Repersents a single connection to the EC2 Endpoint
@@ -77,6 +80,7 @@ class S3Connection(ConnectionUserAndKey)
 
     host = 's3.amazonaws.com'
     responseCls = S3Response
+    rawResponseCls = S3RawResponse
 
     def add_default_params(self, params):
         expires = str(int(time.time()) + EXPIRATION_SECONDS)