1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-23 00:29:59 +02:00

add ini file parser

This commit is contained in:
Kelly Brazil
2020-02-03 19:07:31 -08:00
parent bf033239a7
commit 76583dcd2f
2 changed files with 113 additions and 0 deletions

View File

@ -18,6 +18,7 @@ import jc.parsers.fstab
import jc.parsers.history import jc.parsers.history
import jc.parsers.hosts import jc.parsers.hosts
import jc.parsers.ifconfig import jc.parsers.ifconfig
import jc.parsers.ini
import jc.parsers.iptables import jc.parsers.iptables
import jc.parsers.jobs import jc.parsers.jobs
import jc.parsers.ls import jc.parsers.ls
@ -53,6 +54,7 @@ parser_map = {
'--history': jc.parsers.history, '--history': jc.parsers.history,
'--hosts': jc.parsers.hosts, '--hosts': jc.parsers.hosts,
'--ifconfig': jc.parsers.ifconfig, '--ifconfig': jc.parsers.ifconfig,
'--ini': jc.parsers.ini,
'--iptables': jc.parsers.iptables, '--iptables': jc.parsers.iptables,
'--jobs': jc.parsers.jobs, '--jobs': jc.parsers.jobs,
'--ls': jc.parsers.ls, '--ls': jc.parsers.ls,

111
jc/parsers/ini.py Normal file
View File

@ -0,0 +1,111 @@
"""jc - JSON CLI output utility ini Parser
Usage:
specify --ini as the first argument if the piped input is coming from a ini file
Compatibility:
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
Examples:
$ cat example.ini
[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 50022
ForwardX11 = no
$ cat example.ini | jc --ini -p
{
"bitbucket.org": {
"serveraliveinterval": "45",
"compression": "yes",
"compressionlevel": "9",
"forwardx11": "yes",
"user": "hg"
},
"topsecret.server.com": {
"serveraliveinterval": "45",
"compression": "yes",
"compressionlevel": "9",
"forwardx11": "no",
"port": "50022"
}
}
"""
import jc.utils
import configparser
class info():
version = '1.0'
description = 'ini file parser'
author = 'Kelly Brazil'
author_email = 'kellyjonbrazil@gmail.com'
details = 'Using configparser from the standard library'
# compatible options: linux, darwin, cygwin, win32, aix, freebsd
compatible = ['linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd']
__version__ = info.version
def process(proc_data):
"""
Final processing to conform to the schema.
Parameters:
proc_data: (dictionary) raw structured data to process
Returns:
Dictionary representing an ini document:
{
ini Document converted to a Dictionary
}
"""
# No further processing
return proc_data
def parse(data, raw=False, quiet=False):
"""
Main text parsing function
Parameters:
data: (string) text data to parse
raw: (boolean) output preprocessed JSON if True
quiet: (boolean) suppress warning messages if True
Returns:
Dictionary representing the ini file
"""
if not quiet:
jc.utils.compatibility(__name__, info.compatible)
raw_output = {}
if data:
ini = configparser.ConfigParser()
ini.read_string(data)
raw_output = {s:dict(ini.items(s)) for s in ini.sections()}
if raw:
return raw_output
else:
return process(raw_output)