From 6880748ab20a51075d8fc48d39bdc14b94d0101e Mon Sep 17 00:00:00 2001 From: David Hendriks <davidhendriks93@gmail.com> Date: Wed, 11 Dec 2019 16:33:13 +0000 Subject: [PATCH] added functionality to parse the help info --- binarycpython/utils/functions.py | 58 +++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/binarycpython/utils/functions.py b/binarycpython/utils/functions.py index bf04fb022..e94845dae 100644 --- a/binarycpython/utils/functions.py +++ b/binarycpython/utils/functions.py @@ -42,7 +42,7 @@ def get_arg_keys(): return get_defaults().keys() -def get_help(param_name): +def get_help(param_name, return_dict): """ Function that returns the help info for a given parameter. @@ -52,33 +52,61 @@ def get_help(param_name): - default - available macros - + This function reads out that structure and catches the different components of this output + Presenting it in """ if param_name in get_arg_keys(): help_info = binary_c_python_api.return_help(param_name) + cleaned = [el for el in help_info.split('\n') if not el==''] - # print(help_info) + # Get line numbers + did_you_mean_nr = [i for i, el in enumerate(cleaned) if el.startswith('Did you mean')] + parameter_line_nr = [i for i, el in enumerate(cleaned) if el.startswith('binary_c help')] + default_line_nr = [i for i, el in enumerate(cleaned) if el.startswith('Default')] + macros_line_nr = [i for i, el in enumerate(cleaned) if el.startswith('Available')] - # print(help_info) - # print(help_info.split('\n')) - print(repr(help_info)) + help_info_dict = {} + + # Get alternatives + if did_you_mean_nr: + alternatives = cleaned[did_you_mean_nr[0]+1: parameter_line_nr[0]] + alternatives = [el.strip() for el in alternatives] + help_info_dict['alternatives'] = alternatives + + # Information about the parameter + parameter_line = cleaned[parameter_line_nr[0]] + parameter_name = parameter_line.split(":")[1].strip().split(' ')[0] + parameter_value_input_type = ' '.join(parameter_line.split(":")[1].strip().split(' ')[1:]).replace('<', '').replace('>', '') + + help_info_dict['parameter_name'] = parameter_name + help_info_dict['parameter_value_input_type'] = parameter_value_input_type + + description_line = ' '.join(cleaned[parameter_line_nr[0]+1 : default_line_nr[0]]) + help_info_dict['description'] = description_line + + # Default: + default_line = cleaned[default_line_nr[0]] + default_value = default_line.split(':')[-1].strip() + + help_info_dict['default'] = default_value + + # Get Macros: + if macros_line_nr: + macros = cleaned[macros_line_nr[0]+1:] + help_info_dict['macros'] = macros - cleaned = [el for el in help_info.split('\n') if not el==''] - did_you_mean_nr = [i for i, el in enumerate(cleaned) if el.startswith('Did you mean')][0] - parameter_line_nr = [i for i, el in enumerate(cleaned) if el.startswith('binary_c help')][0] - default_line_nr = [i for i, el in enumerate(cleaned) if el.startswith('Default')][0] - # macros_line_nr = [i for i, el in enumerate(cleaned) if el.startswith('available')][0] + for key in help_info_dict.keys(): + print("{}:\n\t{}".format(key, help_info_dict[key])) - # print(cleaned) - # print(info_line) + if return_dict: + return help_info_dict - pass -get_help('RLOF_method') +get_help('RLOF_method', return_dict=True) -- GitLab