add `__reversed__()`

This commit is contained in:
Casper da Costa-Luis 2021-10-03 15:54:40 +01:00
parent 983b66c132
commit 4c7ad3a65a
No known key found for this signature in database
GPG Key ID: F5126E5FBD2512AD
2 changed files with 21 additions and 0 deletions

View File

@ -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:

View File

@ -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__()