From 27f6e9e28f2a3244bdd00336cf918de97b2ceed6 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Thu, 19 May 2022 10:25:18 +0300 Subject: Extract progress indication from the parsing Since progress indication is not part of the parsing, this commit extracts the progress indication into functions with well defined input arguments that hide the progress indication logic from the parsing function. --- scripts/qc.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'scripts/qc.py') diff --git a/scripts/qc.py b/scripts/qc.py index 9d57f4b..9bad55e 100644 --- a/scripts/qc.py +++ b/scripts/qc.py @@ -2,10 +2,12 @@ import os import sys import argparse +from typing import Union, Callable import magic from quality_control.errors import InvalidValue +from quality_control.utils import make_progress_calculator from quality_control.parsing import ( take, FileType, @@ -54,10 +56,18 @@ def cli_argument_parser(): default=False, action="store_true") return parser -def progress_indicator(msg): +def make_progress_indicator( + verbose: bool, progress_calc_fn: Callable) -> Union[Callable, None]: """Utility to display the progress""" - print(f"LINE: {msg['line_number']} ({msg['percent']:.2f}%)", end="\r") - return msg + if not verbose: + return None + + def __indicator__(linenumber, linetext): + msg = progress_calc_fn(linenumber, linetext) + print(f"LINE: {msg.currentline} ({msg.percent:.2f}%)", end="\r") + return msg + + return __indicator__ def print_errors(errors, verbose): """Print out the errors""" @@ -78,8 +88,8 @@ def print_errors(errors, verbose): def check(filepath, filetype, strains, count, verbose=False): """Check the file and print out results""" - if verbose: - updater = progress_indicator + updater = make_progress_indicator( + verbose, make_progress_calculator(os.stat(filepath).st_size)) if count > 0: return print_errors( -- cgit v1.2.3