From bb2a5e946f36fc28ffa138357d644c2b7ec52242 Mon Sep 17 00:00:00 2001 From: Abhishek Kekane Date: Thu, 9 Mar 2017 12:54:07 +0530 Subject: [PATCH] Downloading image with --progress fails for python3 Downloading image with --progress fails for python3 with, TypeError: 'IterableWithLength' object is not an iterator. This is because IterableWithLength class does not implemented python3 compatible __next__ method. Added __next__ method for python3 compatibility. Change-Id: Ic2114180fac26e9a60678f06612be733e8671bdb Closes-Bug: #1671365 --- glanceclient/common/utils.py | 3 +++ glanceclient/tests/unit/test_progressbar.py | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/glanceclient/common/utils.py b/glanceclient/common/utils.py index 0221bf47..3c10e4d9 100644 --- a/glanceclient/common/utils.py +++ b/glanceclient/common/utils.py @@ -471,6 +471,9 @@ class IterableWithLength(object): def next(self): return next(self.iterable) + # In Python 3, __next__() has replaced next(). + __next__ = next + def __len__(self): return self.length diff --git a/glanceclient/tests/unit/test_progressbar.py b/glanceclient/tests/unit/test_progressbar.py index 1dd42a03..1841cd00 100644 --- a/glanceclient/tests/unit/test_progressbar.py +++ b/glanceclient/tests/unit/test_progressbar.py @@ -19,6 +19,7 @@ import six import testtools from glanceclient.common import progressbar +from glanceclient.common import utils from glanceclient.tests import utils as test_utils @@ -26,12 +27,13 @@ class TestProgressBarWrapper(testtools.TestCase): def test_iter_iterator_display_progress_bar(self): size = 100 - iterator = iter('X' * 100) + iterator_with_len = utils.IterableWithLength(iter('X' * 100), size) saved_stdout = sys.stdout try: sys.stdout = output = test_utils.FakeTTYStdout() # Consume iterator. - data = list(progressbar.VerboseIteratorWrapper(iterator, size)) + data = list(progressbar.VerboseIteratorWrapper(iterator_with_len, + size)) self.assertEqual(['X'] * 100, data) self.assertEqual( '[%s>] 100%%\n' % ('=' * 29),