diff --git a/tests/tests_tqdm.py b/tests/tests_tqdm.py index 405f5bec..b70146fe 100644 --- a/tests/tests_tqdm.py +++ b/tests/tests_tqdm.py @@ -1975,6 +1975,16 @@ def test_closed(): our_file.close() +def test_reversed(capsys): + """Test reversed()""" + for _ in reversed(tqdm(_range(9))): + pass + out, err = capsys.readouterr() + assert not out + assert ' 0%' in err + assert '100%' in err + + def test_contains(capsys): """Test __contains__ doesn't iterate""" with tqdm(_range(9)) as t: diff --git a/tqdm/std.py b/tqdm/std.py index 03d9ce5d..a71a65d5 100644 --- a/tqdm/std.py +++ b/tqdm/std.py @@ -1131,6 +1131,17 @@ class tqdm(Comparable): else self.iterable.__length_hint__() if hasattr(self.iterable, "__length_hint__") else getattr(self, "total", None)) + def __reversed__(self): + try: + orig = self.iterable + except AttributeError: + raise TypeError("'tqdm' object is not reversible") + else: + self.iterable = reversed(self.iterable) + return self.__iter__() + finally: + self.iterable = orig + def __contains__(self, item): contains = getattr(self.iterable, '__contains__', None) return contains(item) if contains is not None else item in self.__iter__()