From ca249e1c5db94f1294515edbb12c177c21d60800 Mon Sep 17 00:00:00 2001 From: xin-huang Date: Wed, 17 Apr 2024 00:22:27 +0200 Subject: [PATCH] Refactor parsers --- dadi_cli/parsers/argument_validation.py | 87 +++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 dadi_cli/parsers/argument_validation.py diff --git a/dadi_cli/parsers/argument_validation.py b/dadi_cli/parsers/argument_validation.py new file mode 100644 index 00000000..3ad8dfe9 --- /dev/null +++ b/dadi_cli/parsers/argument_validation.py @@ -0,0 +1,87 @@ +import argparse, os + + +def positive_int(value: str) -> int: + """ + Validates if the provided string represents a positive integer. + + Parameters + ---------- + value : str + The value to validate. + + Returns + ------- + int + The validated positive integer. + + Raises + ------ + argparse.ArgumentTypeError + If the value is not a valid integer or positive integer. + + """ + if value is not None: + try: + ivalue = int(value) + except ValueError: + raise argparse.ArgumentTypeError(f"{value} is not a valid integer") + if ivalue <= 0: + raise argparse.ArgumentTypeError(f"{value} is not a positive integer") + return ivalue + + +def positive_number(value: str) -> float: + """ + Validates if the provided string represents a positive number. + + Parameters + ---------- + value : str + The value to validate. + + Returns + ------- + float + The validated positive number. + + Raises + ------ + argparse.ArgumentTypeError + If the value is not a valid number or positive number. + + """ + if value is not None: + try: + fvalue = float(value) + except ValueError: + raise argparse.ArgumentTypeError(f"{value} is not a valid number") + if fvalue <= 0: + raise argparse.ArgumentTypeError(f"{value} is not a positive number") + return fvalue + + +def existed_file(value: str) -> str: + """ + Validates if the provided string is a path to an existing file. + + Parameters + ---------- + value : str + The path to validate. + + Returns + ------- + str + The validated file path. + + Raises + ------ + argparse.ArgumentTypeError + If the file does not exist. + + """ + if value is not None: + if not os.path.isfile(value): + raise argparse.ArgumentTypeError(f"{value} is not found") + return value