1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-17 00:07:37 +02:00

add get_help

This commit is contained in:
Kelly Brazil
2022-01-19 18:47:44 -08:00
parent ce84c09d33
commit 7309bd2282
3 changed files with 19 additions and 10 deletions

View File

@ -100,6 +100,7 @@ parsers = [
# Create the local_parsers list. This is a list of custom or # Create the local_parsers list. This is a list of custom or
# override parsers from <user_data_dir>/jc/jcparsers/*.py. # override parsers from <user_data_dir>/jc/jcparsers/*.py.
# Once this list is created, extend the parsers list with it.
local_parsers = [] local_parsers = []
data_dir = appdirs.user_data_dir('jc', 'jc') data_dir = appdirs.user_data_dir('jc', 'jc')
local_parsers_dir = os.path.join(data_dir, 'jcparsers') local_parsers_dir = os.path.join(data_dir, 'jcparsers')
@ -122,6 +123,12 @@ def _modname_to_cliname(parser_mod_name):
"""Return module's cli name (underscores converted to dashes)""" """Return module's cli name (underscores converted to dashes)"""
return parser_mod_name.replace('_', '-') return parser_mod_name.replace('_', '-')
def _get_parser(parser_mod_name):
"""Return the parser module object"""
parser_cli_name = _modname_to_cliname(parser_mod_name)
modpath = 'jcparsers.' if parser_cli_name in local_parsers else 'jc.parsers.'
return importlib.import_module(f'{modpath}{parser_mod_name}')
def parse(parser_mod_name, data, def parse(parser_mod_name, data,
quiet=False, raw=False, ignore_exceptions=None, **kwargs): quiet=False, raw=False, ignore_exceptions=None, **kwargs):
""" """
@ -177,9 +184,7 @@ def parse(parser_mod_name, data,
Standard Parsers: Dictionary or List of Dictionaries Standard Parsers: Dictionary or List of Dictionaries
Streaming Parsers: Generator Object Streaming Parsers: Generator Object
""" """
parser_cli_name = _modname_to_cliname(parser_mod_name) jc_parser = _get_parser(parser_mod_name)
modpath = 'jcparsers.' if parser_cli_name in local_parsers else 'jc.parsers.'
jc_parser = importlib.import_module(f'{modpath}{parser_mod_name}')
if ignore_exceptions is not None: if ignore_exceptions is not None:
return jc_parser.parse(data, quiet=quiet, raw=raw, return jc_parser.parse(data, quiet=quiet, raw=raw,
@ -194,3 +199,7 @@ def parser_mod_list():
def plugin_parser_mod_list(): def plugin_parser_mod_list():
"""Returns a list of plugin parser module names.""" """Returns a list of plugin parser module names."""
return [_cliname_to_modname(p) for p in local_parsers] return [_cliname_to_modname(p) for p in local_parsers]
def get_help(parser_mod_name):
"""Show help screen for the selected parser"""
help(_get_parser(parser_mod_name))

View File

@ -1,8 +1,8 @@
"""jc - JSON CLI output utility `csv` file parser """jc - JSON CLI output utility `csv` file parser
The `csv` parser will attempt to automatically detect the delimiter The `csv` parser will attempt to automatically detect the delimiter
character. If the delimiter cannot be detected it will default to comma. The character. If the delimiter cannot be detected it will default to comma.
first row of the file must be a header row. The first row of the file must be a header row.
Usage (cli): Usage (cli):

View File

@ -50,11 +50,11 @@ def sparse_table_parse(data, delim='\u2063'):
Also, ensure there are no blank lines (list items) Also, ensure there are no blank lines (list items)
in the data. in the data.
delim: (string) Delimiter to use. By default 'u\2063' (invisible delim: (string) Delimiter to use. By default `u\\2063`
separator) is used since this is unlikely to ever (invisible separator) is used since this is
be seen in terminal output. You can change this for to ever be seen in terminal output. You can change
troubleshooting purposes or if there is a delimiter this for troubleshooting purposes or if there is a
conflict with your data. delimiter conflict with your data.
Returns: Returns: