Skip to content

Commit

Permalink
tqdm.std: add update_to
Browse files Browse the repository at this point in the history
Porting from dvc's Tqdm progress bar implementation.

https://github.com/iterative/dvc/blob/cf8195c829aa67425b87e4145bd33cae8584ee1e/dvc/progress.py#L114-L117

So, the implementation uses `self.update()` so that it refreshes based on `self.update()` logic.
Also, adds a way to update `total`.

This function is pretty convenient and useful even outside dvc. Take an example of fsspec's callback
that uses both `total` and `value` (i.e. current position) at once.

https://github.com/fsspec/filesystem_spec/blob/0ffe06cb767456b7c13904b57ec1c3ca60d53eae/fsspec/callbacks.py#L228

I see that there are mentions of `update_to` in docs and examples, which will likely have to change
as a result of this PR. So I'm happy to rename this to something else (eg: `set_position` etc.).

Related: #1264.
  • Loading branch information
skshetry committed Dec 25, 2023
1 parent 4c956c2 commit 25bd7b5
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
4 changes: 2 additions & 2 deletions tqdm/cli.py
Expand Up @@ -288,7 +288,7 @@ def callback(i):
t.update(numeric(i.decode()))
else: # update_to
def callback(i):
t.update(numeric(i.decode()) - t.n)
t.update_to(numeric(i.decode()))
for i in stdin:
write(i)
callback(i)
Expand All @@ -304,7 +304,7 @@ def callback(i):
t.update(numeric(i.decode()))
elif update_to:
def callback(i):
t.update(numeric(i.decode()) - t.n)
t.update_to(numeric(i.decode()))
else:
callback = t.update
callback_len = True
Expand Down
5 changes: 5 additions & 0 deletions tqdm/std.py
Expand Up @@ -1263,6 +1263,11 @@ def update(self, n=1):
self.last_print_t = cur_t
return True

def update_to(self, n, total=None):
if total is not None:
self.total = total
self.update(n - self.n)

def close(self):
"""Cleanup and (if leave=False) close the progressbar."""
if self.disable:
Expand Down

0 comments on commit 25bd7b5

Please sign in to comment.