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/11/01 22:26:20 UTC
svn commit: r1196289 - /libcloud/trunk/libcloud/storage/base.py
Author: tomaz
Date: Tue Nov 1 21:26:20 2011
New Revision: 1196289
URL: http://svn.apache.org/viewvc?rev=1196289&view=rev
Log:
Add _upload_data method and missing docstrings.
Modified:
libcloud/trunk/libcloud/storage/base.py
Modified: libcloud/trunk/libcloud/storage/base.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/storage/base.py?rev=1196289&r1=1196288&r2=1196289&view=diff
==============================================================================
--- libcloud/trunk/libcloud/storage/base.py (original)
+++ libcloud/trunk/libcloud/storage/base.py Tue Nov 1 21:26:20 2011
@@ -159,6 +159,7 @@ class StorageDriver(BaseDriver):
connectionCls = ConnectionUserAndKey
name = None
hash_type = 'md5'
+ supports_chunked_encoding = False
def __init__(self, key, secret=None, secure=True, host=None, port=None):
super(StorageDriver, self).__init__(key=key, secret=secret, secure=secure,
@@ -546,6 +547,46 @@ class StorageDriver(BaseDriver):
'bytes_transferred': bytes_transferred }
return result_dict
+ def _upload_data(self, response, data, calculate_hash=True):
+ """
+ Upload data stored in a string.
+
+ @type response: C{RawResponse}
+ @param response: RawResponse object.
+
+ @type data: C{str}
+ @param data: Data to upload.
+
+ @type calculate_hash: C{boolean}
+ @param calculate_hash: True to calculate hash of the transfered data.
+ (defauls to True).
+
+ @rtype: C{tuple}
+ @return: First item is a boolean indicator of success, second
+ one is the uploaded data MD5 hash and the third one
+ is the number of transferred bytes.
+ """
+ bytes_transferred = 0
+ data_hash = None
+
+ if calculate_hash:
+ data_hash = hashlib.md5()
+ data_hash.update(data)
+
+ try:
+ response.connection.connection.send(data)
+ except Exception:
+ # TODO: let this exception propagate
+ # Timeout, etc.
+ return False, None, bytes_transferred
+
+ bytes_transferred = len(data)
+
+ if calculate_hash:
+ data_hash = data_hash.hexdigest()
+
+ return True, data_hash, bytes_transferred
+
def _stream_data(self, response, iterator, chunked=False,
calculate_hash=True, chunk_size=None):
"""
@@ -558,6 +599,14 @@ class StorageDriver(BaseDriver):
@param response: An object which implements an iterator interface
or a File like object with read method.
+ @type chunked: C{boolean}
+ @param chunked: True if the chunked transfer encoding should be used
+ (defauls to False).
+
+ @type calculate_hash: C{boolean}
+ @param calculate_hash: True to calculate hash of the transfered data.
+ (defauls to True).
+
@type chunk_size: C{int}
@param chunk_size: Optional chunk size (defaults to CHUNK_SIZE)