diff --git a/bilby/core/utils.py b/bilby/core/utils.py index d14c642e928044524ad7105a2774dc092939c0e4..a406c5c6818cb7edaf7f4d3a445a619c732b61be 100644 --- a/bilby/core/utils.py +++ b/bilby/core/utils.py @@ -1006,3 +1006,10 @@ def decode_astropy_quantity(dct): class IllegalDurationAndSamplingFrequencyException(Exception): pass + + +class tcolors: + KEY = '\033[93m' + VALUE = '\033[91m' + HIGHLIGHT = '\033[95m' + END = '\033[0m' diff --git a/cli_bilby/bilby_result.py b/cli_bilby/bilby_result.py index ae3a6545b05fcc29aa52d93130a839f76d950053..237a9622e19389a8203f6ec4548324abc3879c51 100644 --- a/cli_bilby/bilby_result.py +++ b/cli_bilby/bilby_result.py @@ -25,13 +25,18 @@ import argparse import pandas as pd import bilby +from bilby.core.utils import tcolors def setup_command_line_args(): parser = argparse.ArgumentParser( description="Helper tool for bilby result files") - parser.add_argument("-r", "--results", nargs='+', required=True, - help="List of results files.") + parser.add_argument( + "results", nargs='?', + help="List of results files.") + parser.add_argument( + "-r", "--results", nargs='+', dest="option_results", default=list(), + help="List of results files (alternative to passing results as a positional argument).") parser.add_argument("-c", "--convert", type=str, choices=['json', 'hdf5'], help="Convert all results.", default=False) parser.add_argument("-m", "--merge", action='store_true', @@ -49,7 +54,16 @@ def setup_command_line_args(): parser.add_argument("--ipython", action='store_true', help=("For each result given, drops the user into an " "IPython shell with the result loaded in")) - args, _ = parser.parse_known_args() + args = parser.parse_args() + + if args.results is None: + args.results = [] + if isinstance(args.results, str): + args.results = [args.results] + args.results += args.option_results + + if len(args.results) == 0: + raise ValueError("You have not passed any results to bilby_result") return args @@ -81,6 +95,18 @@ def drop_to_ipython(results_list): IPython.embed(header=message) +def print_matches(results_list, args): + for r in results_list: + print("\nResult file: {}/{}".format(r.outdir, r.label)) + for key in args.print: + for attr in r.__dict__: + if key in attr: + print_line = [ + " ", tcolors.KEY, attr, ":", tcolors.VALUE, + str(getattr(r, attr)), tcolors.END] + print(" ".join(print_line)) + + def main(): args = setup_command_line_args() results_list = read_in_results(args.results) @@ -88,10 +114,7 @@ def main(): for r in results_list: r.save_to_file(extension=args.convert, outdir=args.outdir) if args.print is not None: - for r in results_list: - print("\nResult file: {}/{}".format(r.outdir, r.label)) - for key in args.print: - print(" {}: {}".format(key, getattr(r, key, 'None'))) + print_matches(results_list, args) if args.call is not None: for r in results_list: for call in args.call: