Compare commits

..

No commits in common. "rawhide" and "epel7" have entirely different histories.

4 changed files with 96 additions and 137 deletions

View file

@ -11,7 +11,7 @@ Since the upstream default window size is only of size 10 items
(by default), it calculates the average speed only for the last (by default), it calculates the average speed only for the last
~0.005s. We could enlarge the size of window (sma_window param), ~0.005s. We could enlarge the size of window (sma_window param),
but the algorithm is so naive that it would decrease the but the algorithm is so naive that it would decrease the
performance (O(N): sum(queue)/len(queue)). performance.
This has been discussed very extensively with upstream (PR 24 and This has been discussed very extensively with upstream (PR 24 and
friends) but I neither was not able to explain the problem, nor I friends) but I neither was not able to explain the problem, nor I
@ -22,14 +22,36 @@ compatibility - changes the algorithm so the average speed is
calculation is fast enough, and much more stable (by default it calculation is fast enough, and much more stable (by default it
calculates speed for window of 2 seconds). calculates speed for window of 2 seconds).
We also don't seem to have the monotonic() mess, since we don't seem
to suffer from the same issues.
Fork with this patch backported is maintained in Fork with this patch backported is maintained in
https://github.com/python-progress/python-progress https://github.com/python-progress/python-progress
diff --git a/MANIFEST.in b/MANIFEST.in
index ef7c4cb..0c73842 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,2 +1 @@
include README.rst LICENSE
-include test_*.py
diff --git a/progress/__init__.py b/progress/__init__.py diff --git a/progress/__init__.py b/progress/__init__.py
index b434b30..f26056d 100644 index b434b30..71b2039 100644
--- a/progress/__init__.py --- a/progress/__init__.py
+++ b/progress/__init__.py +++ b/progress/__init__.py
@@ -30,19 +30,55 @@ HIDE_CURSOR = '\x1b[?25l' @@ -18,10 +18,7 @@ from collections import deque
from datetime import timedelta
from math import ceil
from sys import stderr
-try:
- from time import monotonic
-except ImportError:
- from time import time as monotonic
+from time import time
__version__ = '1.6'
@@ -30,19 +27,55 @@ HIDE_CURSOR = '\x1b[?25l'
SHOW_CURSOR = '\x1b[?25h' SHOW_CURSOR = '\x1b[?25h'
@ -41,7 +63,7 @@ index b434b30..f26056d 100644
+ self.max_seconds = max_seconds + self.max_seconds = max_seconds
+ self.max_items = max_items + self.max_items = max_items
+ +
+ stamp = monotonic() + stamp = time()
+ self.last = stamp - 0.001 + self.last = stamp - 0.001
+ self.counter = 0 + self.counter = 0
+ self.deque = deque() + self.deque = deque()
@ -81,26 +103,30 @@ index b434b30..f26056d 100644
def __init__(self, message='', **kwargs): def __init__(self, message='', **kwargs):
self.index = 0 self.index = 0
self.start_ts = monotonic() - self.start_ts = monotonic()
- self.avg = 0 - self.avg = 0
- self._avg_update_ts = self.start_ts - self._avg_update_ts = self.start_ts
- self._ts = self.start_ts - self._ts = self.start_ts
- self._xput = deque(maxlen=self.sma_window) - self._xput = deque(maxlen=self.sma_window)
+ self.start_ts = time()
+ self.window = _Window(self.sma_window_seconds, self.sma_window) + self.window = _Window(self.sma_window_seconds, self.sma_window)
for key, val in kwargs.items(): for key, val in kwargs.items():
setattr(self, key, val) setattr(self, key, val)
@@ -69,21 +105,17 @@ class Infinite(object): @@ -67,23 +100,19 @@ class Infinite(object):
def elapsed(self):
return int(monotonic() - self.start_ts)
@property
def elapsed(self):
- return int(monotonic() - self.start_ts)
+ return int(time() - self.start_ts)
+
+ @property + @property
+ def avg(self): + def avg(self):
+ speed = self.window.avg + speed = self.window.avg
+ if speed: + if speed:
+ return 1/speed + return 1/speed
+ return float("inf") + return 3600 # better constant?
+
@property @property
def elapsed_td(self): def elapsed_td(self):
return timedelta(seconds=self.elapsed) return timedelta(seconds=self.elapsed)
@ -119,20 +145,15 @@ index b434b30..f26056d 100644
def update(self): def update(self):
pass pass
@@ -112,14 +144,10 @@ class Infinite(object): @@ -116,10 +145,7 @@ class Infinite(object):
try: raise AttributeError(msg)
return self.file.isatty() if self.check_tty else True
except AttributeError:
- msg = "%s has no attribute 'isatty'. Try setting check_tty=False." % self
- raise AttributeError(msg)
+ raise AttributeError('\'{}\' object has no attribute \'isatty\'. Try setting parameter check_tty=False.'.format(self))
def next(self, n=1): def next(self, n=1):
- now = monotonic() - now = monotonic()
- dt = now - self._ts - dt = now - self._ts
- self.update_avg(n, dt) - self.update_avg(n, dt)
- self._ts = now - self._ts = now
+ self.window.next(n, monotonic()) + self.window.next(n, time())
self.index = self.index + n self.index = self.index + n
self.update() self.update()

View file

@ -1 +0,0 @@
See also automatic push/pr [Copr builds](https://copr.fedorainfracloud.org/coprs/praiskup/enterprise-ci-python-progress/).

View file

@ -1,39 +0,0 @@
#! /bin/sh
# Prepare main branch, review the list of branches below and then execute this
# script.
branches='main epel8 epel9 epel10 f39 f40 f41'
exit_handler ()
{
git checkout main
}
trap exit_handler EXIT
set -e
set -x
koji hello
tasks=
for branch in $branches; do
if test $branch != main; then
git checkout "$branch"
git merge main
fi
git push
skip_nvr_check=
if test $branch = epel7; then
skip_nvr_check=--skip-nvr-check
fi
tasks="${tasks}`fedpkg build $skip_nvr_check --nowait | grep 'Created task' | cut -d: -f2`"
done
if test -n "$tasks"; then
koji watch-task $tasks
fi
git checkout main
fedpkg update

View file

@ -1,125 +1,103 @@
%if 0%{?fedora}
%bcond_without python3
%if 0%{?fedora} > 29
%bcond_with python2
%else
%bcond_without python2
%endif
%else
%if 0%{?rhel} > 7
%bcond_with python2
%bcond_without python3
%else
%bcond_without python2
%bcond_with python3
%endif
%endif
# Created by pyp2rpm-0.5.2
%global pypi_name progress %global pypi_name progress
Name: python-%{pypi_name} Name: python-%{pypi_name}
Version: 1.6 Version: 1.6
Release: 19%{?dist} Release: 4%{?dist}
Summary: Easy to use progress bars Summary: Easy to use progress bars
License: ISC License: ISC
URL: http://github.com/verigak/progress/ URL: http://github.com/verigak/progress/
Source0: %{pypi_source %{pypi_name}} Source0: %pypi_source
BuildArch: noarch BuildArch: noarch
%if %{with python2}
BuildRequires: python2-devel
BuildRequires: python2-setuptools
%endif
%if %{with python3}
BuildRequires: python3-devel BuildRequires: python3-devel
%if %{defined el8}
BuildRequires: python3-setuptools BuildRequires: python3-setuptools
%endif %endif
Patch1: 0001-fixup-moving-average-window.patch Patch1: 0001-fixup-moving-average-window.patch
%global _description %{expand: %global _description\
Collection of easy to use progress bars and spinners.} Collection of easy to use progress bars and spinners.\
%description %_description %description %_description
%if 0%{with python2}
%package -n python2-%{pypi_name}
Summary: %summary
%{?python_provide:%python_provide python2-%{pypi_name}}
%description -n python2-%{pypi_name} %_description
%endif # python2
%if 0%{with python3}
%package -n python3-%{pypi_name} %package -n python3-%{pypi_name}
Summary: Easy to use progress bars Summary: Easy to use progress bars
%description -n python3-%{pypi_name} %_description %description -n python3-%{pypi_name}
Collection of easy to use progress bars and spinners.
%endif # python3
%prep %prep
%autosetup -p1 -n %{pypi_name}-%{version} %autosetup -p1 -n %{pypi_name}-%{version}
# Remove bundled egg-info
%if %{undefined el8} rm -rf %{pypi_name}.egg-info
%generate_buildrequires
%pyproject_buildrequires
%endif
%build %build
%if %{defined el8} %{?with_python2: %py2_build}
%py3_build %{?with_python3: %py3_build}
%else
%pyproject_wheel
%endif
%install %install
%if %{defined el8} %{?with_python2: %py2_install}
%py3_install %{?with_python3: %py3_install}
%else
%pyproject_install
%pyproject_save_files -l %{pypi_name} %if 0%{with python2}
%files -n python2-%{pypi_name}
%doc README.rst LICENSE
%{python2_sitelib}/%{pypi_name}
%{python2_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info
%endif %endif
%if 0%{with python3}
%check %files -n python3-%{pypi_name}
%if %{defined el8} %doc README.rst LICENSE
%py3_check_import %{pypi_name}
%else
%pyproject_check_import
%endif
%files -n python3-%{pypi_name} %{!?el8:-f %{pyproject_files}}
%doc README.rst
%if %{defined el8}
%license LICENSE
%{python3_sitelib}/%{pypi_name} %{python3_sitelib}/%{pypi_name}
%{python3_sitelib}/%{pypi_name}-%{version}-py%{python3_version}.egg-info %{python3_sitelib}/%{pypi_name}-%{version}-py%{python3_version}.egg-info
%endif %endif
%changelog %changelog
* Fri Sep 19 2025 Python Maint <python-maint@redhat.com> - 1.6-19
- Rebuilt for Python 3.14.0rc3 bytecode
* Fri Aug 15 2025 Python Maint <python-maint@redhat.com> - 1.6-18
- Rebuilt for Python 3.14.0rc2 bytecode
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Mon Jun 02 2025 Python Maint <python-maint@redhat.com> - 1.6-16
- Rebuilt for Python 3.14
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Tue Sep 24 2024 Carl George <carlwgeorge@fedoraproject.org> - 1.6-14
- Convert to pyproject macros
* Fri Jul 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Fri Jun 07 2024 Python Maint <python-maint@redhat.com> - 1.6-12
- Rebuilt for Python 3.13
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 1.6-8
- Rebuilt for Python 3.12
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Fri Jul 22 2022 Pavel Raiskup <praiskup@redhat.com> - 1.6-6
- use time.monotonic(), bar.avg is infinity for zero speed
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.6-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sat Jul 02 2022 Pavel Raiskup <praiskup@redhat.com> - 1.6-4 * Sat Jul 02 2022 Pavel Raiskup <praiskup@redhat.com> - 1.6-4
- fix for very frequent next() call, rhbz#2103093 - fix for very frequent next() call, rhbz#2103093