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:56:11 UTC
svn commit: r1196310 - in /libcloud/trunk: libcloud/utils.py
test/test_utils.py
Author: tomaz
Date: Tue Nov 1 21:56:10 2011
New Revision: 1196310
URL: http://svn.apache.org/viewvc?rev=1196310&view=rev
Log:
Add exhaust_iterator function and tests for it.
Modified:
libcloud/trunk/libcloud/utils.py
libcloud/trunk/test/test_utils.py
Modified: libcloud/trunk/libcloud/utils.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/utils.py?rev=1196310&r1=1196309&r2=1196310&view=diff
==============================================================================
--- libcloud/trunk/libcloud/utils.py (original)
+++ libcloud/trunk/libcloud/utils.py Tue Nov 1 21:56:10 2011
@@ -70,6 +70,34 @@ def read_in_chunks(iterator, chunk_size=
yield data
data = ''
+def exhaust_iterator(iterator):
+ """
+ Exhaust an iterator and return all data returned by it.
+
+ @type iterator: C{Iterator}
+ @param response: An object which implements an iterator interface
+ or a File like object with read method.
+
+ @rtype C{str}
+ @return Data returned by the iterator.
+ """
+ data = ''
+
+ try:
+ chunk = str(iterator.next())
+ except StopIteration:
+ chunk = ''
+
+ while len(chunk) > 0:
+ data += chunk
+
+ try:
+ chunk = str(iterator.next())
+ except StopIteration:
+ chunk = ''
+
+ return data
+
def guess_file_mime_type(file_path):
filename = os.path.basename(file_path)
(mimetype, encoding) = mimetypes.guess_type(filename)
Modified: libcloud/trunk/test/test_utils.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/test/test_utils.py?rev=1196310&r1=1196309&r2=1196310&view=diff
==============================================================================
--- libcloud/trunk/test/test_utils.py (original)
+++ libcloud/trunk/test/test_utils.py Tue Nov 1 21:56:10 2011
@@ -18,6 +18,7 @@ import sys
import unittest
import warnings
import os.path
+from StringIO import StringIO
# In Python > 2.7 DeprecationWarnings are disabled by default
warnings.simplefilter('default')
@@ -129,5 +130,31 @@ class TestUtils(unittest.TestCase):
self.assertEqual(index, 548)
+ def test_exhaust_iterator(self):
+ def iterator_func():
+ for x in range(0, 1000):
+ yield 'aa'
+
+ data = 'aa' * 1000
+ iterator = libcloud.utils.read_in_chunks(iterator=iterator_func())
+ result = libcloud.utils.exhaust_iterator(iterator=iterator)
+ self.assertEqual(result, data)
+
+ result = libcloud.utils.exhaust_iterator(iterator=iterator_func())
+ self.assertEqual(result, data)
+
+
+ data = '12345678990'
+ iterator = StringIO(data)
+ result = libcloud.utils.exhaust_iterator(iterator=iterator)
+ self.assertEqual(result, data)
+
+ def test_exhaust_iterator_empty_iterator(self):
+ data = ''
+ iterator = StringIO(data)
+ result = libcloud.utils.exhaust_iterator(iterator=iterator)
+ self.assertEqual(result, data)
+
+
if __name__ == '__main__':
sys.exit(unittest.main())