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]
name = "jpacrepo-uploader"
version = "0.0.7"
version = "0.0.8"
authors = [
{ name="Walter Oggioni", email="oggioni.walter@gmail.com" },
]
+21 -5
View File
@@ -3,6 +3,7 @@ import logging
import re
import shutil
import urllib.parse
import sys
from argparse import ArgumentParser
from dataclasses import dataclass, fields
from pathlib import Path
@@ -56,6 +57,7 @@ class UploadPt:
class PackageUploadProgressBar(Bar):
def __init__(self,
headline: str,
uploaded_size: int,
packages_total_size: int,
start_ts: float = monotonic(),
@@ -63,8 +65,9 @@ class PackageUploadProgressBar(Bar):
**kwargs: Any):
kwargs.setdefault('suffix',
'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)
self._headline = headline
self.uploaded_size = uploaded_size
self.packages_total_size = packages_total_size
self.start_ts = start_ts
@@ -97,6 +100,19 @@ class PackageUploadProgressBar(Bar):
def upload_progress(self) -> str:
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:
@@ -263,16 +279,16 @@ class JpacrepoClient:
start_ts = monotonic()
for i, file in enumerate(files):
upload_size = file.stat().st_size
if len(file.name) <= 32:
if len(file.name) <= terminal_size[0]:
filename = file.name
else:
filename = file.name[:29] + '...'
filename = file.name[:terminal_size[0] - 3] + '...'
kwargs = dict(
message='Uploading ',
max=upload_size,
message=f'({i + 1}/{len(files)}) {filename}',
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
progress.bar = bar
self._upload_file(curl, file, progress)