Skip to content

Commit

Permalink
Don't insert spurious newlines in DummyTqdmFile.
Browse files Browse the repository at this point in the history
Only call `tqdm.write` (which inserts a newline) if
`DummyTqdmFile.write` is itself called with a string containing a
newline; otherwise buffer the rest of the string.

See changes in test_tqdm.py for the patterns this allows.
  • Loading branch information
anntzer committed May 2, 2020
1 parent 5e89789 commit 13c16b0
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
14 changes: 11 additions & 3 deletions tqdm/contrib/__init__.py
Expand Up @@ -15,10 +15,18 @@

class DummyTqdmFile(ObjectWrapper):
"""Dummy file-like that will write to tqdm"""
def __init__(self, wrapped):
super(DummyTqdmFile, self).__init__(wrapped)
self._buf = []

def write(self, x, nolock=False):
# Avoid print() second call (useless \n)
if len(x.rstrip()) > 0:
tqdm.write(x, file=self._wrapped, nolock=nolock)
pre, sep, post = x.rpartition("\n")
if sep:
tqdm.write("".join(self._buf) + pre,
file=self._wrapped, nolock=nolock)
self._buf = [post]
else:
self._buf.append(x)


def tenumerate(iterable, start=0, total=None, tqdm_class=tqdm_auto,
Expand Down
9 changes: 8 additions & 1 deletion tqdm/tests/tests_tqdm.py
Expand Up @@ -2,6 +2,7 @@
# Advice: use repr(our_file.read()) to print the full output of tqdm
# (else '\r' will replace the previous lines and you'll see only the latest.

from __future__ import print_function
import sys
import csv
import re
Expand Down Expand Up @@ -1749,8 +1750,14 @@ def test_file_redirection():
with closing(StringIO()) as our_file:
# Redirect stdout to tqdm.write()
with std_out_err_redirect_tqdm(tqdm_file=our_file):
for _ in trange(3):
with tqdm(total=3) as pbar:
print("Such fun")
pbar.update(1)
print("Such", "fun")
pbar.update(1)
print("Such ", end="")
print("fun")
pbar.update(1)
res = our_file.getvalue()
assert res.count("Such fun\n") == 3
assert "0/3" in res
Expand Down

0 comments on commit 13c16b0

Please sign in to comment.