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 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 "✓" ; spini += 1 # noqa
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 / (time.time() - self._started)
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
- return (list(spinner_chars_a[::-1]) * 9) + (list(spinner_chars_b) * 3) + (list(spinner_chars_c) * 3)
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dcicutils
3
- Version: 8.8.3.1b22
3
+ Version: 8.8.3.1b26
4
4
  Summary: Utility package for interacting with the 4DN Data Portal and other 4DN resources
5
5
  Home-page: https://github.com/4dn-dcic/utils
6
6
  License: MIT
@@ -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=UE_HxZCExEKg2u4x4oa3qBix5LTtN8CXuRxM_qW4oWA,18329
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.1b22.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
76
- dcicutils-8.8.3.1b22.dist-info/METADATA,sha256=hI8Hx1Cl09T5LN8o-bExmvdgkdXVOgCArBKO_1xFvU0,3357
77
- dcicutils-8.8.3.1b22.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
78
- dcicutils-8.8.3.1b22.dist-info/entry_points.txt,sha256=51Q4F_2V10L0282W7HFjP4jdzW4K8lnWDARJQVFy_hw,270
79
- dcicutils-8.8.3.1b22.dist-info/RECORD,,
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,,