mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
Merge pull request #65 from duelafn/local-parsers
Load custom parsers from <user_data_dir>/jc/jcparsers
This commit is contained in:
@ -208,6 +208,13 @@ Tested on:
|
|||||||
- NixOS
|
- NixOS
|
||||||
- FreeBSD12
|
- FreeBSD12
|
||||||
|
|
||||||
|
|
||||||
|
## Custom Parsers
|
||||||
|
Custom local plugins may be placed in a "jc/jcparsers" folder in your local "App data directory" (For example, "/home/*myname*/.local/jc/jcparsers" on Linux, "/Users/*myname*/Library/Application Support/jc/jcparsers" on Mac OS X, or "C:\Users\*myname*\AppData\Local\jc\jc\jcparsers" on Windows.
|
||||||
|
|
||||||
|
Use the [`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py) parser as a template and simply place a `.py` file in the `jcparsers` subfolder. Local plugin file names must be valid python module names, therefore must consist entirely of alphanumerics and start with a letter. Local plugins may override default plugins.
|
||||||
|
|
||||||
|
|
||||||
## Contributions
|
## Contributions
|
||||||
Feel free to add/improve code or parsers! You can use the [`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py) parser as a template and submit your parser with a pull request.
|
Feel free to add/improve code or parsers! You can use the [`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py) parser as a template and submit your parser with a pull request.
|
||||||
|
|
||||||
|
22
jc/cli.py
22
jc/cli.py
@ -1,8 +1,11 @@
|
|||||||
"""jc - JSON CLI output utility
|
"""jc - JSON CLI output utility
|
||||||
JC cli module
|
JC cli module
|
||||||
"""
|
"""
|
||||||
|
import appdirs
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
import os.path
|
||||||
|
import re
|
||||||
import shlex
|
import shlex
|
||||||
import importlib
|
import importlib
|
||||||
import textwrap
|
import textwrap
|
||||||
@ -79,6 +82,20 @@ parsers = [
|
|||||||
'yaml'
|
'yaml'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# List of custom or override parsers.
|
||||||
|
# Allow any <user_data_dir>/jc/jcparsers/*.py
|
||||||
|
local_parsers = []
|
||||||
|
data_dir = appdirs.user_data_dir("jc", "jc")
|
||||||
|
local_parsers_dir = os.path.join(data_dir, "jcparsers")
|
||||||
|
if os.path.isdir(local_parsers_dir):
|
||||||
|
sys.path.append(data_dir)
|
||||||
|
for name in os.listdir(local_parsers_dir):
|
||||||
|
if re.match(r'\w+\.py', name) and os.path.isfile(os.path.join(local_parsers_dir, name)):
|
||||||
|
plugin_name = name[0:-3]
|
||||||
|
local_parsers.append(plugin_name)
|
||||||
|
if plugin_name not in parsers:
|
||||||
|
parsers.append(plugin_name)
|
||||||
|
|
||||||
|
|
||||||
def set_env_colors():
|
def set_env_colors():
|
||||||
"""
|
"""
|
||||||
@ -159,8 +176,9 @@ def parser_mod_shortname(parser):
|
|||||||
|
|
||||||
def parser_module(parser):
|
def parser_module(parser):
|
||||||
"""import the module just in time and return the module object"""
|
"""import the module just in time and return the module object"""
|
||||||
importlib.import_module('jc.parsers.' + parser_mod_shortname(parser))
|
shortname = parser_mod_shortname(parser)
|
||||||
return getattr(jc.parsers, parser_mod_shortname(parser))
|
path = ('jcparsers.' if shortname in local_parsers else 'jc.parsers.')
|
||||||
|
return importlib.import_module(path + shortname)
|
||||||
|
|
||||||
|
|
||||||
def parsers_text(indent=0, pad=0):
|
def parsers_text(indent=0, pad=0):
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
appdirs>=1.4.0
|
||||||
ruamel.yaml>=0.15.0
|
ruamel.yaml>=0.15.0
|
||||||
xmltodict>=0.12.0
|
xmltodict>=0.12.0
|
||||||
Pygments>=2.4.2
|
Pygments>=2.4.2
|
||||||
|
1
setup.py
1
setup.py
@ -10,6 +10,7 @@ setuptools.setup(
|
|||||||
author_email='kellyjonbrazil@gmail.com',
|
author_email='kellyjonbrazil@gmail.com',
|
||||||
description='Converts the output of popular command-line tools and file-types to JSON.',
|
description='Converts the output of popular command-line tools and file-types to JSON.',
|
||||||
install_requires=[
|
install_requires=[
|
||||||
|
'appdirs>=1.4.0',
|
||||||
'ruamel.yaml>=0.15.0',
|
'ruamel.yaml>=0.15.0',
|
||||||
'xmltodict>=0.12.0',
|
'xmltodict>=0.12.0',
|
||||||
'Pygments>=2.4.2'
|
'Pygments>=2.4.2'
|
||||||
|
Reference in New Issue
Block a user