From 66e6992b63e58e6ac3724b4f4921697c8151586c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oriol=20Tint=C3=B3=20Prims?= <oriol.tinto@lmu.de> Date: Tue, 18 Apr 2023 09:41:16 +0200 Subject: [PATCH] Improve the help provided in the CLI. --- enstools/compression/cli.py | 61 ++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/enstools/compression/cli.py b/enstools/compression/cli.py index e4b2a59..d8402ae 100644 --- a/enstools/compression/cli.py +++ b/enstools/compression/cli.py @@ -99,11 +99,13 @@ To do that, specify the number of nodes to use: # the corresponding command line arguments to the parser and another one to manage the call ############################### + + # Compressor def add_subparser_compressor(subparsers): import argparse - subparser = subparsers.add_parser('compress', help='Compress help', + subparser = subparsers.add_parser('compress', help='Tool to compress files.', formatter_class=argparse.RawDescriptionHelpFormatter, description=compressor_help_text) subparser.add_argument("files", type=expand_paths, nargs='*', @@ -209,8 +211,10 @@ The constrain specification must be provided in the following format: def add_subparser_analyzer(subparsers): import argparse - subparser = subparsers.add_parser('analyze', help=analyzer_help_text, - formatter_class=argparse.RawDescriptionHelpFormatter) + subparser = subparsers.add_parser('analyze', + help="Tool to find compression specifications that fulfill quality requirements", + formatter_class=argparse.RawDescriptionHelpFormatter, + description=analyzer_help_text) subparser.add_argument("--constrains", dest="constrains", default="correlation_I:5,ssim_I:2", type=str, @@ -295,7 +299,7 @@ def call_analyzer(args): significant_bits_help_text = """ significand: -Tool to find the ammount of significand bits in a data file following the approach described in Klöwer et al 2021 _[1]. +Tool to find the amount of significand bits in a data file following the approach described in Klöwer et al 2021 _[1]. .. [1] Klöwer, M., Razinger, M., Dominguez, J.J. et al. Compressing atmospheric data into its real information content. Nat Comput Sci 1, 713-724 (2021). https://doi.org/10.1038/s43588-021-00156-2 @@ -306,8 +310,9 @@ Nat Comput Sci 1, 713-724 (2021). https://doi.org/10.1038/s43588-021-00156-2 def add_subparser_significand(subparsers): import argparse - subparser = subparsers.add_parser('significand', help=significant_bits_help_text, - formatter_class=argparse.RawDescriptionHelpFormatter) + subparser = subparsers.add_parser('significand', help="Tool to find the amount of significand bits in a data file.", + formatter_class=argparse.RawDescriptionHelpFormatter, + description=significant_bits_help_text) subparser.add_argument("--output", "-o", dest="output", default=None, type=str, help="Path to the file where the configuration will be saved." "If not provided will be print in the stdout.") @@ -336,10 +341,12 @@ Tool to quickly compare two datasets, mainly though to compare a compressed data """ -def add_subsubparser(subparsers): + +def add_subparser_evaluate(subparsers): import argparse subparser = subparsers.add_parser('evaluate', help=evaluate_help_text, - formatter_class=argparse.RawDescriptionHelpFormatter) + formatter_class=argparse.RawDescriptionHelpFormatter, + description=evaluate_help_text) subparser.add_argument("--reference", "-r", dest="reference_file", default=None, type=str, help="Path to reference file. Default=%(default)s", required=True) subparser.add_argument("--target", "-t", dest="target_file", default=None, type=str, @@ -373,8 +380,10 @@ Tool to prune a file up to a certain number of significant bits. def add_subparser_pruner(subparsers): import argparse - subparser = subparsers.add_parser('prune', help=pruner_help_text, - formatter_class=argparse.RawDescriptionHelpFormatter) + subparser = subparsers.add_parser('prune', + help=pruner_help_text, + formatter_class=argparse.RawDescriptionHelpFormatter, + description=pruner_help_text) subparser.add_argument("files", type=str, nargs="+", help='List of files to compress. Multiple files and regex patterns are allowed.') subparser.add_argument("-o", '--output', type=str, dest="output", default=None, required=True) @@ -405,7 +414,7 @@ def add_subparsers(parser): # Create the parser for the "significand" command add_subparser_significand(subparsers) # Create the parser for the "evaluator" command - add_subsubparser(subparsers) + add_subparser_evaluate(subparsers) # Create the parser for the "pruner" command add_subparser_pruner(subparsers) # To add an additional subparser, just create a function like the ones above and add the call here. @@ -424,7 +433,14 @@ def expand_paths(string: str): ############################### def get_parser(): - # Create parser + """ + Create and configure the command line parser with subparsers for each option. + + Returns + ------- + parser : argparse.ArgumentParser + The configured command line parser with subparsers for each option. + """ import argparse # Create the top-level parser @@ -449,19 +465,20 @@ def main(): # Parse the command line arguments args = parser.parse_args() + # Define a dictionary to map the option names to their respective functions + option_functions = { + "compressor": call_compressor, + "analyzer": call_analyzer, + "significand": call_significand, + "evaluator": call_evaluator, + "pruner": call_pruner, + } + # Process options according to the selected option if args.which is None: parser.print_help() exit(0) - elif args.which == "compressor": - call_compressor(args) - elif args.which == "analyzer": - call_analyzer(args) - elif args.which == "significand": - call_significand(args) - elif args.which == "evaluator": - call_evaluator(args) - elif args.which == "pruner": - call_pruner(args) + elif args.which in option_functions: + option_functions[args.which](args) else: raise NotImplementedError -- GitLab