From 828917e15e8c7619173b72d170e8a4500cec7a89 Mon Sep 17 00:00:00 2001 From: lprnmns Date: Sun, 30 Aug 2026 22:21:35 +0300 Subject: [PATCH 1/2] Fix progress bar remaining time calculation --- src/cleo/ui/progress_bar.py | 2 +- tests/ui/test_progress_bar.py | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cleo/ui/progress_bar.py b/src/cleo/ui/progress_bar.py index 44b87100..7675c7e1 100644 --- a/src/cleo/ui/progress_bar.py +++ b/src/cleo/ui/progress_bar.py @@ -377,7 +377,7 @@ def _formatter_remaining(self) -> str: remaining = 0 else: remaining = round( - (time.time() - self._start_time) / self._step * (self._max - self._max) + (time.time() - self._start_time) / self._step * (self._max - self._step) ) return format_time(remaining) diff --git a/tests/ui/test_progress_bar.py b/tests/ui/test_progress_bar.py index 75842195..77dcc0ff 100644 --- a/tests/ui/test_progress_bar.py +++ b/tests/ui/test_progress_bar.py @@ -1,6 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING +from unittest.mock import patch import pytest @@ -225,6 +226,15 @@ def test_percent(ansi_io: BufferedIO) -> None: assert expected == ansi_io.fetch_error() +def test_remaining_time_uses_uncompleted_steps(ansi_io: BufferedIO) -> None: + with patch("cleo.ui.progress_bar.time.time", return_value=10): + bar = ProgressBar(ansi_io, max=10, min_seconds_between_redraws=0) + bar._start_time = 0 + bar._step = 2 + + assert bar._formatter_remaining() == "40 secs" + + def test_overwrite_with_shorter_line(ansi_io: BufferedIO) -> None: bar = ProgressBar(ansi_io, 50, 0) bar.set_format(" %current%/%max% [%bar%] %percent:3s%%") From 58a5b7df3891cf895caedf7e9204dc5736740896 Mon Sep 17 00:00:00 2001 From: lprnmns Date: Mon, 31 Aug 2026 15:19:19 +0300 Subject: [PATCH 2/2] Add news fragment for progress bar fix --- news/544.bugfix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/544.bugfix.md diff --git a/news/544.bugfix.md b/news/544.bugfix.md new file mode 100644 index 00000000..9f81d5ce --- /dev/null +++ b/news/544.bugfix.md @@ -0,0 +1 @@ +Fixed the progress bar remaining-time placeholder to account for uncompleted steps.