dcicutils 8.8.3.1b22__py3-none-any.whl → 8.8.3.1b26__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dcicutils/progress_bar.py +27 -12
- {dcicutils-8.8.3.1b22.dist-info → dcicutils-8.8.3.1b26.dist-info}/METADATA +1 -1
- {dcicutils-8.8.3.1b22.dist-info → dcicutils-8.8.3.1b26.dist-info}/RECORD +6 -6
- {dcicutils-8.8.3.1b22.dist-info → dcicutils-8.8.3.1b26.dist-info}/LICENSE.txt +0 -0
- {dcicutils-8.8.3.1b22.dist-info → dcicutils-8.8.3.1b26.dist-info}/WHEEL +0 -0
- {dcicutils-8.8.3.1b22.dist-info → dcicutils-8.8.3.1b26.dist-info}/entry_points.txt +0 -0
dcicutils/progress_bar.py
CHANGED
@@ -279,10 +279,10 @@ class ProgressBar:
|
|
279
279
|
# string in the display string where the progress bar should actually go,
|
280
280
|
# which we do in _format_description. Other minor things too; see below.
|
281
281
|
sys_stdout_write = sys.stdout.write
|
282
|
-
last_text = None ; last_captured_output_text = None # noqa
|
282
|
+
last_text = None ; last_captured_output_text = None ; last_spin_change_time = None # noqa
|
283
283
|
def tidy_stdout_write(text: str) -> None: # noqa
|
284
284
|
nonlocal self, sys_stdout_write, sentinel_internal, spina, spini, spinn
|
285
|
-
nonlocal last_text, last_captured_output_text
|
285
|
+
nonlocal last_text, last_captured_output_text, last_spin_change_time
|
286
286
|
def replace_first(value: str, match: str, replacement: str) -> str: # noqa
|
287
287
|
return value[:i] + replacement + value[i + len(match):] if (i := value.find(match)) >= 0 else value
|
288
288
|
def remove_extra_trailing_spaces(text: str) -> str: # noqa
|
@@ -292,22 +292,25 @@ class ProgressBar:
|
|
292
292
|
if (not text) or (last_text == text):
|
293
293
|
return
|
294
294
|
last_text = text
|
295
|
+
now = time.time()
|
295
296
|
if (self._disabled or self._done) and sentinel_internal in text:
|
296
297
|
# Another hack to really disable output on interrupt; in this case we set
|
297
298
|
# tqdm.disable to True, but output can still dribble out, so if the output
|
298
299
|
# looks like it is from tqdm and we are disabled/done then do no output.
|
299
300
|
return
|
300
301
|
if sentinel_internal in text:
|
301
|
-
spinc = spina[spini % spinn] if not ("100%|" in text) else "✓"
|
302
|
+
spinc = spina[spini % spinn] if not ("100%|" in text) else "✓"
|
303
|
+
if last_spin_change_time is None or ((now - last_spin_change_time) >= 0.07):
|
304
|
+
spini += 1
|
305
|
+
last_spin_change_time = now
|
302
306
|
text = replace_first(text, sentinel_internal, f" {spinc}")
|
303
307
|
text = replace_first(text, "%|", "% ◀|")
|
304
|
-
text = remove_extra_trailing_spaces(text) + f"{spinc} "
|
305
308
|
# Another oddity: for the rate sometimes tqdm intermittently prints
|
306
309
|
# something like "1.54s/" rather than "1.54/s"; something to do with
|
307
310
|
# the unit we gave, which is empty; idunno; just replace it here.
|
308
311
|
text = replace_first(text, "s/ ", "/s ")
|
309
312
|
if self._use_byte_size_for_rate and self._bar:
|
310
|
-
rate = self._bar.n / (
|
313
|
+
rate = self._bar.n / (now - self._started)
|
311
314
|
text = text.replace("[rate]", f"{format_size(rate)}/s")
|
312
315
|
sys_stdout_write(text)
|
313
316
|
sys.stdout.flush()
|
@@ -320,9 +323,6 @@ class ProgressBar:
|
|
320
323
|
# This function obviously has intimate knowledge of the output; better here than in tests.
|
321
324
|
def replace_time_dependent_values_with_static(text: str) -> str:
|
322
325
|
blocks = "\u2587|\u2588|\u2589|\u258a|\u258b|\u258c|\u258d|\u258e|\u258f"
|
323
|
-
if text.endswith("| "):
|
324
|
-
# In case "|" is in the trailing spinner it messes up regex below.
|
325
|
-
text = set_nth(text, len(text) - 2, "-")
|
326
326
|
if (n := find_nth_from_end(text, "|", 5)) >= 8:
|
327
327
|
pattern = re.compile(
|
328
328
|
rf"(\s*)(\d*%? ◀\|)(?:\s*{blocks}|#)*\s*(\|\s*\d+/\d+)?(\s*\|\s*)"
|
@@ -345,10 +345,25 @@ class ProgressBar:
|
|
345
345
|
# Fun with ASCII spinner characters.
|
346
346
|
# Dots borrowed from "rich" python package (others: ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏).
|
347
347
|
# Others: "◴◷◶◵" "◰◳◲◱" "◡⊙◠" "⠁⠂⠄⡀⢀⠠⠐⠈" "▁▃▄▅▆▇█▇▆▅▄▃" "◢◣◤◥" "◐◓◑◒" "✶✸✹✺✹✷" "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
|
348
|
-
spinner_chars_a = "⣾⣽⣻⢿⡿⣟⣯⣷"
|
349
|
-
spinner_chars_b = "
|
350
|
-
spinner_chars_c = "
|
351
|
-
|
348
|
+
spinner_chars_a = "⣾⣽⣻⢿⡿⣟⣯⣷"[::-1]
|
349
|
+
spinner_chars_b = "⠋⠙⠹⠸⢰⣰⣠⣄⣆⡆⡖⠖⠚⠙⠋⠏⠇⡆⣆⣄⣠⣰⢰⢲⠲"
|
350
|
+
spinner_chars_c = "⠉⠒⠤⣀⠤⠒"
|
351
|
+
spinner_chars_d = "⡀⡄⡆⠇⠋⠙⠸⢰⢠⢀⢠⢰⠸⠙⠋⠇⡆⡄"
|
352
|
+
spinner_chars_e = "⠀⡀⠄⠂⠁⠈⠐⠠⢀⣀⢄⢂⢁⢈⢐⢠⣠⢤⢢⢡⢨⢰⣰⢴⢲⢱⢸⣸⢼⢺⢹⣹⢽⢻⣻⢿⣿⣶⣤⣀"
|
353
|
+
spinner_chars_f = "⣀⣤⣶⣿⣶⣤"
|
354
|
+
spinner_chars_g = "⠋⠙⠹⠸⢰⣰⣠⣄⣆⡆⠇⠏"
|
355
|
+
spinner_chars_h = "⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⢤⣠⣀⢀⢀⣀⣠⢤⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁"
|
356
|
+
spinner_chars_i = "◐◓◑◒"
|
357
|
+
spinner_chars_j = "|/—*—\\"
|
358
|
+
return ((list(spinner_chars_a) * 8) + (list(spinner_chars_b) * 2) +
|
359
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_c) * 4) +
|
360
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_d) * 2) +
|
361
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_e) * 2) +
|
362
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_f) * 4) +
|
363
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_g) * 4) +
|
364
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_h) * 2) +
|
365
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_i) * 2) +
|
366
|
+
(list(spinner_chars_a) * 8) + (list(spinner_chars_j) * 2))
|
352
367
|
sys.stdout.write = tidy_stdout_write
|
353
368
|
spina = ascii_spinners() ; spini = 0 ; spinn = len(spina) # noqa
|
354
369
|
sentinel = "[progress]" ; sentinel_internal = f"{sentinel}:" # noqa
|
@@ -48,7 +48,7 @@ dcicutils/obfuscation_utils.py,sha256=fo2jOmDRC6xWpYX49u80bVNisqRRoPskFNX3ymFAmj
|
|
48
48
|
dcicutils/opensearch_utils.py,sha256=V2exmFYW8Xl2_pGFixF4I2Cc549Opwe4PhFi5twC0M8,1017
|
49
49
|
dcicutils/portal_object_utils.py,sha256=gDXRgPsRvqCFwbC8WatsuflAxNiigOnqr0Hi93k3AgE,15422
|
50
50
|
dcicutils/portal_utils.py,sha256=DYyE5o15GekDgzpJWas9iS7klAYbjJZUPW0G42McArk,30779
|
51
|
-
dcicutils/progress_bar.py,sha256=
|
51
|
+
dcicutils/progress_bar.py,sha256=noMjLoFSelsDheum53em8mswhHD2Ob7T77c-XdaAgzk,19562
|
52
52
|
dcicutils/project_utils.py,sha256=qPdCaFmWUVBJw4rw342iUytwdQC0P-XKpK4mhyIulMM,31250
|
53
53
|
dcicutils/qa_checkers.py,sha256=cdXjeL0jCDFDLT8VR8Px78aS10hwNISOO5G_Zv2TZ6M,20534
|
54
54
|
dcicutils/qa_utils.py,sha256=TT0SiJWiuxYvbsIyhK9VO4uV_suxhB6CpuC4qPacCzQ,160208
|
@@ -72,8 +72,8 @@ dcicutils/trace_utils.py,sha256=g8kwV4ebEy5kXW6oOrEAUsurBcCROvwtZqz9fczsGRE,1769
|
|
72
72
|
dcicutils/validation_utils.py,sha256=cMZIU2cY98FYtzK52z5WUYck7urH6JcqOuz9jkXpqzg,14797
|
73
73
|
dcicutils/variant_utils.py,sha256=2H9azNx3xAj-MySg-uZ2SFqbWs4kZvf61JnK6b-h4Qw,4343
|
74
74
|
dcicutils/zip_utils.py,sha256=rnjNv_k6L9jT2SjDSgVXp4BEJYLtz9XN6Cl2Fy-tqnM,2027
|
75
|
-
dcicutils-8.8.3.
|
76
|
-
dcicutils-8.8.3.
|
77
|
-
dcicutils-8.8.3.
|
78
|
-
dcicutils-8.8.3.
|
79
|
-
dcicutils-8.8.3.
|
75
|
+
dcicutils-8.8.3.1b26.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
|
76
|
+
dcicutils-8.8.3.1b26.dist-info/METADATA,sha256=AjKygiZvYrOL_CZLFY3IT_MHH3TpZajusd9tvjOQ3BU,3357
|
77
|
+
dcicutils-8.8.3.1b26.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
78
|
+
dcicutils-8.8.3.1b26.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
|
79
|
+
dcicutils-8.8.3.1b26.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|