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

add xml parser

This commit is contained in:
Kelly Brazil
2020-02-03 22:13:06 -08:00
parent b5ebf8b76a
commit 547c6d3d59
5 changed files with 172 additions and 2 deletions

View File

@ -97,6 +97,7 @@ jc PARSER [OPTIONS]
- `--uname` enables the `uname -a` parser - `--uname` enables the `uname -a` parser
- `--uptime` enables the `uptime` parser - `--uptime` enables the `uptime` parser
- `--w` enables the `w` parser - `--w` enables the `w` parser
- `--xml` enables the `XML` file parser
- `--yaml` enables the `YAML` file parser - `--yaml` enables the `YAML` file parser
### Options ### Options
@ -1635,6 +1636,51 @@ $ w | jc --w -p
} }
] ]
``` ```
### XML
```
$ cat cd_catalog.xml
<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
...
$ cat cd_catalog.xml | jc --xml -p
{
"CATALOG": {
"CD": [
{
"TITLE": "Empire Burlesque",
"ARTIST": "Bob Dylan",
"COUNTRY": "USA",
"COMPANY": "Columbia",
"PRICE": "10.90",
"YEAR": "1985"
},
{
"TITLE": "Hide your heart",
"ARTIST": "Bonnie Tyler",
"COUNTRY": "UK",
"COMPANY": "CBS Records",
"PRICE": "9.90",
"YEAR": "1988"
},
...
```
### YAML ### YAML
``` ```
$ cat istio-mtls-permissive.yaml $ cat istio-mtls-permissive.yaml

View File

@ -1,8 +1,9 @@
jc changelog jc changelog
202001XX v1.7.1 202001XX v1.7.1
- Add YAML file parser (tested on linux and OSX) - Add YAML file parser
- Add ini file parser - Add ini file parser
- Add XML file parser
- Add __version__ variable to parser modules - Add __version__ variable to parser modules
20191217 v1.6.1 20191217 v1.6.1

View File

@ -40,8 +40,10 @@ import jc.parsers.systemctl_luf
import jc.parsers.uname import jc.parsers.uname
import jc.parsers.uptime import jc.parsers.uptime
import jc.parsers.w import jc.parsers.w
import jc.parsers.xml
import jc.parsers.yaml import jc.parsers.yaml
parser_map = { parser_map = {
'--arp': jc.parsers.arp, '--arp': jc.parsers.arp,
'--crontab': jc.parsers.crontab, '--crontab': jc.parsers.crontab,
@ -76,6 +78,7 @@ parser_map = {
'--uname': jc.parsers.uname, '--uname': jc.parsers.uname,
'--uptime': jc.parsers.uptime, '--uptime': jc.parsers.uptime,
'--w': jc.parsers.w, '--w': jc.parsers.w,
'--xml': jc.parsers.xml,
'--yaml': jc.parsers.yaml '--yaml': jc.parsers.yaml
} }

119
jc/parsers/xml.py Normal file
View File

@ -0,0 +1,119 @@
"""jc - JSON CLI output utility XML Parser
Usage:
specify --xml as the first argument if the piped input is coming from a XML file
Compatibility:
'linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd'
Examples:
$ cat cd_catalog.xml
<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
...
$ cat cd_catalog.xml | jc --xml -p
{
"CATALOG": {
"CD": [
{
"TITLE": "Empire Burlesque",
"ARTIST": "Bob Dylan",
"COUNTRY": "USA",
"COMPANY": "Columbia",
"PRICE": "10.90",
"YEAR": "1985"
},
{
"TITLE": "Hide your heart",
"ARTIST": "Bonnie Tyler",
"COUNTRY": "UK",
"COMPANY": "CBS Records",
"PRICE": "9.90",
"YEAR": "1988"
},
...
"""
import jc.utils
import xmltodict
class info():
version = '1.0'
description = 'XML file parser'
author = 'Kelly Brazil'
author_email = 'kellyjonbrazil@gmail.com'
details = 'Using the xmltodict library at https://github.com/martinblech/xmltodict'
# 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 XML document:
{
XML Document converted to a Dictionary
See https://github.com/martinblech/xmltodict for details
}
"""
# 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. Raw or processed structured data.
"""
if not quiet:
jc.utils.compatibility(__name__, info.compatible)
if data:
raw_output = xmltodict.parse(data)
if raw:
return raw_output
else:
return process(raw_output)

View File

@ -11,7 +11,8 @@ setuptools.setup(
description='This tool serializes the output of popular command line tools to structured JSON output.', description='This tool serializes the output of popular command line tools to structured JSON output.',
install_requires=[ install_requires=[
'ifconfig-parser>=0.0.5', 'ifconfig-parser>=0.0.5',
'ruamel.yaml>=0.15.0' 'ruamel.yaml>=0.15.0',
'xmltodict>=0.12.0'
], ],
license='MIT', license='MIT',
long_description=long_description, long_description=long_description,