diff options
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 23495c2ec..04cda150b 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -3158,6 +3158,34 @@ def get_eta(current, total, base_time, current_time): return f"{int(eta // 3600):02d}:{int(eta % 3600 // 60):02d}:{int(eta % 60):02d}" +def get_progress(base_lbl, idx, total, ref_time): + """ + Output progress for a long task. + - base_lbl: label to display + - idx: current item number + - total: number of items + - ref_time: time the task has been started + """ + lbl = f"\r{BColors.OKBLUE}[{get_percent(idx, total)}] {base_lbl} {idx + 1}/{total}" + lbl += f" ({get_eta(idx, total, ref_time, datetime.datetime.now())} left){BColors.ENDC}" + return lbl + + +def fast_line_count(filename): + """ + Efficient line counter for a file + """ + CHUNK_SIZE = 1024 * 1024 + def _count(reader): + b = reader(CHUNK_SIZE) + while b: + yield b + b = reader(CHUNK_SIZE) + with open(filename, 'rb') as fp: + count = sum(buffer.count(b"\n") for buffer in _count(fp.raw.read)) + return count + 1 + + RE_NUMBER = r"[+-]?\d+(?:\.\d*)?" RE_COORDS = r"(" + RE_NUMBER + r") (" + RE_NUMBER + r")" |