improved progress bar
CI / build (push) Successful in 44s

This commit is contained in:
2026-04-22 22:08:45 +08:00
parent 812d1b440b
commit a3f8059e6b
2 changed files with 22 additions and 6 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "jpacrepo-uploader" name = "jpacrepo-uploader"
version = "0.0.7" version = "0.0.8"
authors = [ authors = [
{ name="Walter Oggioni", email="oggioni.walter@gmail.com" }, { name="Walter Oggioni", email="oggioni.walter@gmail.com" },
] ]
+21 -5
View File
@@ -3,6 +3,7 @@ import logging
import re import re
import shutil import shutil
import urllib.parse import urllib.parse
import sys
from argparse import ArgumentParser from argparse import ArgumentParser
from dataclasses import dataclass, fields from dataclasses import dataclass, fields
from pathlib import Path from pathlib import Path
@@ -56,6 +57,7 @@ class UploadPt:
class PackageUploadProgressBar(Bar): class PackageUploadProgressBar(Bar):
def __init__(self, def __init__(self,
headline: str,
uploaded_size: int, uploaded_size: int,
packages_total_size: int, packages_total_size: int,
start_ts: float = monotonic(), start_ts: float = monotonic(),
@@ -63,8 +65,9 @@ class PackageUploadProgressBar(Bar):
**kwargs: Any): **kwargs: Any):
kwargs.setdefault('suffix', kwargs.setdefault('suffix',
'speed: %(total_speed)s, completed: %(percent).2f%% - ETA: %(eta_td)s') 'speed: %(total_speed)s, completed: %(percent).2f%% - ETA: %(eta_td)s')
kwargs.setdefault('width', terminal_size[0] - 96) kwargs.setdefault('width', max(0, terminal_size[0] - 72))
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self._headline = headline
self.uploaded_size = uploaded_size self.uploaded_size = uploaded_size
self.packages_total_size = packages_total_size self.packages_total_size = packages_total_size
self.start_ts = start_ts self.start_ts = start_ts
@@ -97,6 +100,19 @@ class PackageUploadProgressBar(Bar):
def upload_progress(self) -> str: def upload_progress(self) -> str:
return f'{format_filesize(self.index, 5, 2)} / {format_filesize(self.max, 5, 2)}' return f'{format_filesize(self.index, 5, 2)} / {format_filesize(self.max, 5, 2)}'
@staticmethod
def _clear_previous_line():
sys.stdout.write("\033[1A\033[2K")
sys.stdout.flush()
def __enter__(self):
print(self._headline)
return super().__enter__()
def __exit__(self, exc_type, exc_val, exc_tb):
result = super().__exit__(exc_type, exc_val, exc_tb)
PackageUploadProgressBar._clear_previous_line()
return result
class XferProgress: class XferProgress:
@@ -263,16 +279,16 @@ class JpacrepoClient:
start_ts = monotonic() start_ts = monotonic()
for i, file in enumerate(files): for i, file in enumerate(files):
upload_size = file.stat().st_size upload_size = file.stat().st_size
if len(file.name) <= 32: if len(file.name) <= terminal_size[0]:
filename = file.name filename = file.name
else: else:
filename = file.name[:29] + '...' filename = file.name[:terminal_size[0] - 3] + '...'
kwargs = dict( kwargs = dict(
message='Uploading ',
max=upload_size, max=upload_size,
message=f'({i + 1}/{len(files)}) {filename}',
start_ts=start_ts start_ts=start_ts
) )
with PackageUploadProgressBar(progress.uploaded_size, total_size, **kwargs) as bar: with PackageUploadProgressBar(f'({i + 1}/{len(files)}) {filename}', progress.uploaded_size, total_size, **kwargs) as bar:
bar.start_ts = start_ts bar.start_ts = start_ts
progress.bar = bar progress.bar = bar
self._upload_file(curl, file, progress) self._upload_file(curl, file, progress)