1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2026-04-03 17:44:07 +02:00

Compare commits

..

56 Commits

Author SHA1 Message Date
Kelly Brazil
681176e4c9 Merge pull request #203 from kellyjonbrazil/dev
Dev v1.18.2
2022-01-27 16:53:37 -08:00
Kelly Brazil
8bb2663522 date update 2022-01-27 16:49:46 -08:00
Kelly Brazil
663abf3139 clean up scripts 2022-01-27 16:14:14 -08:00
Kelly Brazil
f7ac41db95 final doc update 2022-01-27 13:27:50 -08:00
Kelly Brazil
5502cda9e5 add additional test for dict inside list for all_parser_info() 2022-01-27 13:03:02 -08:00
Kelly Brazil
a2b165565f add lib tests for new functions 2022-01-27 12:54:44 -08:00
Kelly Brazil
b426369815 use all_parser_info() from lib in about function 2022-01-27 07:45:20 -08:00
Kelly Brazil
ac0840cc0a fix typo 2022-01-26 20:51:18 -08:00
Kelly Brazil
ee98ab0a4a doc update 2022-01-26 20:42:20 -08:00
Kelly Brazil
2adec2c003 update type hints with mypy help 2022-01-26 20:40:03 -08:00
Kelly Brazil
f19c9c71bf add type hints 2022-01-26 18:39:14 -08:00
Kelly Brazil
e93adf1884 fix doc 2022-01-26 18:09:30 -08:00
Kelly Brazil
254c4fc507 add new functions 2022-01-26 18:05:00 -08:00
Kelly Brazil
74d5f60d14 update console interview description 2022-01-26 17:17:40 -08:00
Kelly Brazil
db7dc0634b make **kwargs optional 2022-01-26 17:12:35 -08:00
Kelly Brazil
e156b0db45 add type hints 2022-01-26 17:08:03 -08:00
Kelly Brazil
50adc05fbd formatting 2022-01-26 16:58:48 -08:00
Kelly Brazil
446cac7c21 doc update 2022-01-26 16:55:39 -08:00
Kelly Brazil
28ffe3076b formatting 2022-01-26 16:34:23 -08:00
Kelly Brazil
d4d5e206ca type hints update 2022-01-26 15:54:36 -08:00
Kelly Brazil
42fbe40a4a simplify type hints 2022-01-26 15:54:18 -08:00
Kelly Brazil
27e4a120e2 remove trailing comma 2022-01-26 15:31:18 -08:00
Kelly Brazil
b5d5b7c73a remove private classes 2022-01-26 15:01:42 -08:00
Kelly Brazil
e7471556ba remove sed lines 2022-01-26 14:39:11 -08:00
Kelly Brazil
640a21341b fix indentation 2022-01-26 14:38:57 -08:00
Kelly Brazil
f5befad3e4 move docstring under __init__ 2022-01-26 14:21:06 -08:00
Kelly Brazil
f8223023c3 change header depth 2022-01-26 14:16:04 -08:00
Kelly Brazil
7028e87f9b remove TOC for parsers 2022-01-26 13:03:51 -08:00
Kelly Brazil
590728f9c1 try new pydoc-markdown formatting options 2022-01-26 11:50:25 -08:00
Kelly Brazil
7cc147fe2d increase heading size 2022-01-25 19:28:37 -08:00
Kelly Brazil
3cfb3965bb formatting 2022-01-25 19:28:04 -08:00
Kelly Brazil
155d421322 formatting 2022-01-25 19:18:54 -08:00
Kelly Brazil
d3e10bb87b add lsusb docs 2022-01-25 18:59:40 -08:00
Kelly Brazil
fd5433ee62 parse docstring formatting 2022-01-25 18:58:09 -08:00
Kelly Brazil
4568f2d06e formatting for parse docstring 2022-01-25 18:51:56 -08:00
Kelly Brazil
c36e513d1b formatting 2022-01-25 18:42:55 -08:00
Kelly Brazil
8e089baf3f remove info class from docs 2022-01-25 18:38:26 -08:00
Kelly Brazil
386f6c317e update markdown processor settings 2022-01-25 18:03:34 -08:00
Kelly Brazil
75cd84ce8a try new markdown conversion 2022-01-25 17:07:47 -08:00
Kelly Brazil
6fad44e35d fix type hint 2022-01-25 16:28:29 -08:00
Kelly Brazil
1caac750da Update type hints 2022-01-25 16:27:29 -08:00
Kelly Brazil
16370dcb3d update type hints 2022-01-25 15:49:48 -08:00
Kelly Brazil
c1302f2573 add type-hints to public api 2022-01-25 15:49:31 -08:00
Kelly Brazil
6f0ffe0955 docu update 2022-01-25 15:48:00 -08:00
Kelly Brazil
1f89745fe7 version bump 2022-01-25 11:17:18 -08:00
Kelly Brazil
a46ac18ef7 doc update 2022-01-25 10:47:05 -08:00
Kelly Brazil
1a05f1c575 add parser info functions. move _get_parser functionality from cli to lib 2022-01-25 10:46:58 -08:00
Kelly Brazil
08f818aa42 Merge pull request #199 from kellyjonbrazil/master
sync to dev
2022-01-25 00:45:53 +00:00
Kelly Brazil
b3896650c2 revert column formatting 2022-01-23 13:40:50 -08:00
Kelly Brazil
f285539526 conform to 80 columns 2022-01-23 13:36:22 -08:00
Kelly Brazil
a896dcdf3b formatting 2022-01-23 13:14:00 -08:00
Kelly Brazil
0a187d4ed0 add console interview links 2022-01-23 10:04:19 -08:00
Kelly Brazil
2d65bc57d5 add quotes 2022-01-21 16:58:45 -08:00
Kelly Brazil
ab63809fde update description 2022-01-21 16:13:00 -08:00
Kelly Brazil
6f04707dc6 add python package doc info to top of page 2022-01-21 15:33:43 -08:00
Kelly Brazil
d14a86a9b5 fix typo 2022-01-21 15:29:46 -08:00
107 changed files with 1426 additions and 1082 deletions

View File

@@ -1,5 +1,12 @@
jc changelog
20220127 v1.18.2
- Fix for plugin parsers with underscores in the name
- Add type hints to public API functions
- Add plugin attribute to plugin parser metadata
- Add C locale hint to parsing error messages
- Refactor more cli code into lib
20220121 v1.18.1
- Minor fix for MacOS binary

View File

@@ -1,3 +1,2 @@
include jc/man/jc.1.gz
include man/jc.1
include CHANGELOG

233
README.md
View File

@@ -1,35 +1,53 @@
![Tests](https://github.com/kellyjonbrazil/jc/workflows/Tests/badge.svg?branch=master)
![Pypi](https://img.shields.io/pypi/v/jc.svg)
> `jc` was recently featured in the [Console Open Source Newsletter](https://console.substack.com/p/console-89)
> Check out the `jc` Python [package documentation](https://github.com/kellyjonbrazil/jc/tree/master/docs) for developers
> Try the `jc` [web demo](https://jc-web-demo.herokuapp.com/)
> JC is [now available](https://galaxy.ansible.com/community/general) as an Ansible filter plugin in the `community.general` collection. See this [blog post](https://blog.kellybrazil.com/2020/08/30/parsing-command-output-in-ansible-with-jc/) for an example.
> JC is [now available](https://galaxy.ansible.com/community/general) as an
Ansible filter plugin in the `community.general` collection. See this
[blog post](https://blog.kellybrazil.com/2020/08/30/parsing-command-output-in-ansible-with-jc/)
for an example.
# JC
JSON CLI output utility
`jc` JSONifies the output of many CLI tools and file-types for easier parsing in scripts. See the [**Parsers**](#parsers) section for supported commands and file-types.
`jc` JSONifies the output of many CLI tools and file-types for easier parsing in
scripts. See the [**Parsers**](#parsers) section for supported commands and
file-types.
```bash
dig example.com | jc --dig
```
```json
[{"id":38052,"opcode":"QUERY","status":"NOERROR","flags":["qr","rd","ra"],"query_num":1,"answer_num":1,
"authority_num":0,"additional_num":1,"opt_pseudosection":{"edns":{"version":0,"flags":[],"udp":4096}},"question":
{"name":"example.com.","class":"IN","type":"A"},"answer":[{"name":"example.com.","class":"IN","type":"A","ttl":
39049,"data":"93.184.216.34"}],"query_time":49,"server":"2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)","when":
"Fri Apr 16 16:09:00 PDT 2021","rcvd":56,"when_epoch":1618614540,"when_epoch_utc":null}]
[{"id":38052,"opcode":"QUERY","status":"NOERROR","flags":["qr","rd","ra"],
"query_num":1,"answer_num":1,"authority_num":0,"additional_num":1,
"opt_pseudosection":{"edns":{"version":0,"flags":[],"udp":4096}},"question":
{"name":"example.com.","class":"IN","type":"A"},"answer":[{"name":
"example.com.","class":"IN","type":"A","ttl":39049,"data":"93.184.216.34"}],
"query_time":49,"server":"2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)",
"when":"Fri Apr 16 16:09:00 PDT 2021","rcvd":56,"when_epoch":1618614540,
"when_epoch_utc":null}]
```
This allows further command-line processing of output with tools like `jq` or [`jello`](https://github.com/kellyjonbrazil/jello) by piping commands:
This allows further command-line processing of output with tools like `jq`
or [`jello`](https://github.com/kellyjonbrazil/jello) by piping commands:
```bash
$ dig example.com | jc --dig | jq -r '.[].answer[].data'
93.184.216.34
```
or using the alternative "magic" syntax:
```bash
$ jc dig example.com | jq -r '.[].answer[].data'
93.184.216.34
```
The `jc` parsers can also be used as python modules. In this case the output will be a python dictionary, or list of dictionaries, instead of JSON:
The `jc` parsers can also be used as python modules. In this case the output
will be a python dictionary, or list of dictionaries, instead of JSON:
```python
>>> import subprocess
>>> import jc
@@ -38,26 +56,37 @@ The `jc` parsers can also be used as python modules. In this case the output wil
>>> data = jc.parse('dig', cmd_output)
>>>
>>> data
[{'id': 64612, 'opcode': 'QUERY', 'status': 'NOERROR', 'flags': ['qr', 'rd', 'ra'], 'query_num': 1, 'answer_num':
1, 'authority_num': 0, 'additional_num': 1, 'opt_pseudosection': {'edns': {'version': 0, 'flags': [], 'udp':
4096}}, 'question': {'name': 'example.com.', 'class': 'IN', 'type': 'A'}, 'answer': [{'name': 'example.com.',
'class': 'IN', 'type': 'A', 'ttl': 29658, 'data': '93.184.216.34'}], 'query_time': 52, 'server':
'2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)', 'when': 'Fri Apr 16 16:13:00 PDT 2021', 'rcvd': 56,
'when_epoch': 1618614780, 'when_epoch_utc': None}]
[{'id': 64612, 'opcode': 'QUERY', 'status': 'NOERROR', 'flags': ['qr', 'rd',
'ra'], 'query_num': 1, 'answer_num': 1, 'authority_num': 0, 'additional_num':
1, 'opt_pseudosection': {'edns': {'version': 0, 'flags': [], 'udp': 4096}},
'question': {'name': 'example.com.', 'class': 'IN', 'type': 'A'}, 'answer':
[{'name': 'example.com.', 'class': 'IN', 'type': 'A', 'ttl': 29658, 'data':
'93.184.216.34'}], 'query_time': 52, 'server':
'2600:1700:bab0:d40::1#53(2600:1700:bab0:d40::1)', 'when':
'Fri Apr 16 16:13:00 PDT 2021', 'rcvd': 56, 'when_epoch': 1618614780,
'when_epoch_utc': None}]
```
> For `jc` Python package documentation, use `help('jc')`, `help('jc.lib')`, or see the [online documentation](https://github.com/kellyjonbrazil/jc/tree/master/docs).
> For `jc` Python package documentation, use `help('jc')`, `help('jc.lib')`, or
see the [online documentation](https://github.com/kellyjonbrazil/jc/tree/master/docs).
Two representations of the data are available. The default representation uses a strict schema per parser and converts known numbers to int/float JSON values. Certain known values of `None` are converted to JSON `null`, known boolean values are converted, and, in some cases, additional semantic context fields are added.
Two representations of the data are available. The default representation uses a
strict schema per parser and converts known numbers to int/float JSON values.
Certain known values of `None` are converted to JSON `null`, known boolean
values are converted, and, in some cases, additional semantic context fields are
added.
To access the raw, pre-processed JSON, use the `-r` cli option or the `raw=True` function parameter in `parse()`.
To access the raw, pre-processed JSON, use the `-r` cli option or the `raw=True`
function parameter in `parse()`.
Schemas for each parser can be found at the documentation link beside each [**Parser**](#parsers) below.
Schemas for each parser can be found at the documentation link beside each
[**Parser**](#parsers) below.
Release notes can be found [here](https://blog.kellybrazil.com/category/jc-news/).
## Why Would Anyone Do This!?
For more information on the motivations for this project, please see my blog post on [Bringing the Unix Philosophy to the 21st Century](https://blog.kellybrazil.com/2019/11/26/bringing-the-unix-philosophy-to-the-21st-century/).
For more information on the motivations for this project, please see my blog
post on [Bringing the Unix Philosophy to the 21st Century](https://blog.kellybrazil.com/2019/11/26/bringing-the-unix-philosophy-to-the-21st-century/) and my [interview with Console](https://console.substack.com/p/console-89).
See also:
- [libxo on FreeBSD](http://juniper.github.io/libxo/libxo-manual.html)
@@ -73,7 +102,10 @@ Use Cases:
- [Nornir command output parsing](https://blog.kellybrazil.com/2020/12/09/parsing-command-output-in-nornir-with-jc/)
## Installation
There are several ways to get `jc`. You can install via `pip`, OS package repositories, via DEB/RPM/MSI packaged binaries for linux and Windows, or by downloading the correct binary for your architecture and running it anywhere on your filesystem.
There are several ways to get `jc`. You can install via `pip`, OS package
[repositories](https://repology.org/project/jc/versions), or by downloading the
correct [binary](https://github.com/kellyjonbrazil/jc/releases) for your
architecture and running it anywhere on your filesystem.
### Pip (macOS, linux, unix, Windows)
```bash
@@ -82,7 +114,7 @@ pip3 install jc
### OS Package Repositories
| OS | Command |
| OS | Command |
|-----------------------|-------------------------------------------------------------------------------|
| Debian/Ubuntu linux | `apt-get install jc` |
| Fedora linux | `dnf install jc` |
@@ -97,18 +129,25 @@ pip3 install jc
> For more OS Packages, see https://repology.org/project/jc/versions.
### Binaries and Packages
For precompiled binaries and packages, see [Releases](https://github.com/kellyjonbrazil/jc/releases) on Github.
For precompiled binaries, see [Releases](https://github.com/kellyjonbrazil/jc/releases)
on Github.
## Usage
`jc` accepts piped input from `STDIN` and outputs a JSON representation of the previous command's output to `STDOUT`.
`jc` accepts piped input from `STDIN` and outputs a JSON representation of the
previous command's output to `STDOUT`.
```bash
COMMAND | jc PARSER [OPTIONS]
```
Alternatively, the "magic" syntax can be used by prepending `jc` to the command to be converted. Options can be passed to `jc` immediately before the command is given. (Note: command aliases and shell builtins are not supported)
Alternatively, the "magic" syntax can be used by prepending `jc` to the command
to be converted. Options can be passed to `jc` immediately before the command is
given. (Note: command aliases and shell builtins are not supported)
```bash
jc [OPTIONS] COMMAND
```
The JSON output can be compact (default) or pretty formatted with the `-p` option.
The JSON output can be compact (default) or pretty formatted with the `-p`
option.
### Parsers
@@ -199,23 +238,32 @@ The JSON output can be compact (default) or pretty formatted with the `-p` optio
- `--zipinfo` enables the `zipinfo` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/zipinfo))
### Options
- `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of course!)
- `-C` force color output even when using pipes (overrides `-m` and the `NO_COLOR` env variable)
- `-d` debug mode. Prints trace messages if parsing issues are encountered (use `-dd` for verbose debugging)
- `-a` about `jc`. Prints information about `jc` and the parsers (in JSON, of
course!)
- `-C` force color output even when using pipes (overrides `-m` and the
`NO_COLOR` env variable)
- `-d` debug mode. Prints trace messages if parsing issues are encountered (use
`-dd` for verbose debugging)
- `-h` help. Use `jc -h --parser_name` for parser documentation
- `-m` monochrome JSON output
- `-p` pretty format the JSON output
- `-q` quiet mode. Suppresses parser warning messages (use `-qq` to ignore streaming parser errors)
- `-r` raw output. Provides a more literal JSON output, typically with string values and no additional semantic processing
- `-q` quiet mode. Suppresses parser warning messages (use `-qq` to ignore
streaming parser errors)
- `-r` raw output. Provides a more literal JSON output, typically with string
values and no additional semantic processing
- `-u` unbuffer output
- `-v` version information
### Exit Codes
Any fatal errors within `jc` will generate an exit code of `100`, otherwise the exit code will be `0`. When using the "magic" syntax (e.g. `jc ifconfig eth0`), `jc` will store the exit code of the program being parsed and add it to the `jc` exit code. This way it is easier to determine if an error was from the parsed program or `jc`.
Any fatal errors within `jc` will generate an exit code of `100`, otherwise the
exit code will be `0`. When using the "magic" syntax (e.g. `jc ifconfig eth0`),
`jc` will store the exit code of the program being parsed and add it to the `jc`
exit code. This way it is easier to determine if an error was from the parsed
program or `jc`.
Consider the following examples using `ifconfig`:
| `ifconfig` exit code | `jc` exit code | Combined exit code | Interpretation |
| `ifconfig` exit code | `jc` exit code | Combined exit code | Interpretation |
|----------------------|----------------|--------------------|------------------------------------|
| `0` | `0` | `0` | No errors |
| `1` | `0` | `1` | Error in `ifconfig` |
@@ -224,11 +272,16 @@ Consider the following examples using `ifconfig`:
### Setting Custom Colors via Environment Variable
You can specify custom colors via the `JC_COLORS` environment variable. The `JC_COLORS` environment variable takes four comma separated string values in the following format:
You can specify custom colors via the `JC_COLORS` environment variable. The
`JC_COLORS` environment variable takes four comma separated string values in
the following format:
```bash
JC_COLORS=<keyname_color>,<keyword_color>,<number_color>,<string_color>
```
Where colors are: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `gray`, `brightblack`, `brightred`, `brightgreen`, `brightyellow`, `brightblue`, `brightmagenta`, `brightcyan`, `white`, or `default`
Where colors are: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`,
`gray`, `brightblack`, `brightred`, `brightgreen`, `brightyellow`, `brightblue`,
`brightmagenta`, `brightcyan`, `white`, or `default`
For example, to set to the default colors:
```bash
@@ -240,16 +293,33 @@ JC_COLORS=default,default,default,default
```
### Disable Colors via Environment Variable
You can set the [`NO_COLOR`](http://no-color.org/) environment variable to any value to disable color output in `jc`. Note that using the `-C` option to force color output will override both the `NO_COLOR` environment variable and the `-m` option.
You can set the [`NO_COLOR`](http://no-color.org/) environment variable to any
value to disable color output in `jc`. Note that using the `-C` option to force
color output will override both the `NO_COLOR` environment variable and the `-m`
option.
### Streaming Parsers
Most parsers load all of the data from STDIN, parse it, then output the entire JSON document serially. There are some streaming parsers (e.g. `ls-s` and `ping-s`) that immediately start processing and outputing the data line-by-line as [JSON Lines](https://jsonlines.org/) (aka [NDJSON](http://ndjson.org/)) while it is being received from STDIN. This can significantly reduce the amount of memory required to parse large amounts of command output (e.g. `ls -lR /`) and can sometimes process the data more quickly. Streaming parsers have slightly different behavior than standard parsers as outlined below.
Most parsers load all of the data from STDIN, parse it, then output the entire
JSON document serially. There are some streaming parsers (e.g. `ls-s` and
`ping-s`) that immediately start processing and outputing the data line-by-line
as [JSON Lines](https://jsonlines.org/) (aka [NDJSON](http://ndjson.org/)) while
it is being received from STDIN. This can significantly reduce the amount of
memory required to parse large amounts of command output (e.g. `ls -lR /`) and
can sometimes process the data more quickly. Streaming parsers have slightly
different behavior than standard parsers as outlined below.
> Note: Streaming parsers cannot be used with the "magic" syntax
#### Ignoring Errors
You may want to ignore parsing errors when using streaming parsers since these may be used in long-lived processing pipelines and errors can break the pipe. To ignore parsing errors, use the `-qq` cli option or the `ignore_exceptions=True` argument with the `parse()` function. This will add a `_jc_meta` object to the JSON output with a `success` attribute. If `success` is `true`, then there were no issues parsing the line. If `success` is `false`, then a parsing issue was found and `error` and `line` fields will be added to include a short error description and the contents of the unparsable line, respectively:
You may want to ignore parsing errors when using streaming parsers since these
may be used in long-lived processing pipelines and errors can break the pipe. To
ignore parsing errors, use the `-qq` cli option or the `ignore_exceptions=True`
argument with the `parse()` function. This will add a `_jc_meta` object to the
JSON output with a `success` attribute. If `success` is `true`, then there were
no issues parsing the line. If `success` is `false`, then a parsing issue was
found and `error` and `line` fields will be added to include a short error
description and the contents of the unparsable line, respectively:
Successfully parsed line with `-qq` option:
```json
@@ -260,6 +330,7 @@ Successfully parsed line with `-qq` option:
}
}
```
Unsuccessfully parsed line with `-qq` option:
```json
{
@@ -273,25 +344,38 @@ Unsuccessfully parsed line with `-qq` option:
#### Unbuffering Output
Most operating systems will buffer output that is being piped from process to process. The buffer is usually around 4KB. When viewing the output in the terminal the OS buffer is not engaged so output is immediately displayed on the screen. When piping multiple processes together, though, it may seem as if the output is hanging when the input data is very slow (e.g. `ping`):
Most operating systems will buffer output that is being piped from process to
process. The buffer is usually around 4KB. When viewing the output in the
terminal the OS buffer is not engaged so output is immediately displayed on the
screen. When piping multiple processes together, though, it may seem as if the
output is hanging when the input data is very slow (e.g. `ping`):
```
$ ping 1.1.1.1 | jc --ping-s | jq
<slow output>
```
This is because the OS engages the 4KB buffer between `jc` and `jq` in this example. To display the data on the terminal in realtime, you can disable the buffer with the `-u` (unbuffer) cli option:
This is because the OS engages the 4KB buffer between `jc` and `jq` in this
example. To display the data on the terminal in realtime, you can disable the
buffer with the `-u` (unbuffer) cli option:
```
$ ping 1.1.1.1 | jc --ping-s -u | jq
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","response_ip":"1.1.1.1","icmp_seq":"1","ttl":"128","time_ms":"24.6","duplicate":false}
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","response_ip":"1.1.1.1","icmp_seq":"2","ttl":"128","time_ms":"26.8","duplicate":false}
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","respons...}
{"type":"reply","pattern":null,"timestamp":null,"bytes":"64","respons...}
...
```
> Note: Unbuffered output can be slower for large data streams.
#### Using Streaming Parsers as Python Modules
Streaming parsers accept any iterable object and return a generator iterator object allowing lazy processing of the data. The input data should iterate on lines of string data. Examples of good input data are `sys.stdin` or `str.splitlines()`.
Streaming parsers accept any iterable object and return an iterator object
(generator) allowing lazy processing of the data. The input data should
iterate on lines of string data. Examples of good input data are `sys.stdin` or
`str.splitlines()`.
To use the generator object in your code, simply loop through it or use the [next()](https://docs.python.org/3/library/functions.html#next) builtin function:
To use the generator object in your code, simply loop through it or use the
[next()](https://docs.python.org/3/library/functions.html#next) builtin
function:
```python
import jc
@@ -301,26 +385,35 @@ for item in result:
```
### Custom Parsers
Custom local parser plugins may be placed in a `jc/jcparsers` folder in your local **"App data directory"**:
Custom local parser plugins may be placed in a `jc/jcparsers` folder in your
local **"App data directory"**:
- Linux/unix: `$HOME/.local/share/jc/jcparsers`
- macOS: `$HOME/Library/Application Support/jc/jcparsers`
- Windows: `$LOCALAPPDATA\jc\jc\jcparsers`
Local parser plugins are standard python module files. Use the [`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py) or [`jc/parsers/foo_s.py (streaming)`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo_s.py) parser as a template and simply place a `.py` file in the `jcparsers` subfolder.
Local parser plugins are standard python module files. Use the
[`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py)
or [`jc/parsers/foo_s.py (streaming)`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo_s.py)
parser as a template and simply place a `.py` file in the `jcparsers` subfolder.
Local plugin filenames must be valid python module names, therefore must consist entirely of alphanumerics and start with a letter. Local plugins may override default parsers.
Local plugin filenames must be valid python module names, therefore must consist
entirely of alphanumerics and start with a letter. Local plugins may override
default parsers.
> Note: The application data directory follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)
> Note: The application data directory follows the
[XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html)
### Caveats
#### Locale
For best results set the `LANG` locale environment variable to `C` or `en_US.UTF-8`. For example, either by setting directly on the command-line:
For best results set the `LANG` locale environment variable to `C` or
`en_US.UTF-8`. For example, either by setting directly on the command-line:
```
$ LANG=C date | jc --date
```
or by exporting to the environment before running commands:
```
$ export LANG=C
@@ -328,19 +421,30 @@ $ export LANG=C
#### Timezones
Some parsers have calculated epoch timestamp fields added to the output. Unless a timestamp field name has a `_utc` suffix it is considered naive. (i.e. based on the local timezone of the system the `jc` parser was run on).
Some parsers have calculated epoch timestamp fields added to the output. Unless
a timestamp field name has a `_utc` suffix it is considered naive. (i.e. based
on the local timezone of the system the `jc` parser was run on).
If a UTC timezone can be detected in the text of the command output, the timestamp will be timezone aware and have a `_utc` suffix on the key name. (e.g. `epoch_utc`) No other timezones are supported for aware timestamps.
If a UTC timezone can be detected in the text of the command output, the
timestamp will be timezone aware and have a `_utc` suffix on the key name.
(e.g. `epoch_utc`) No other timezones are supported for aware timestamps.
## Compatibility
Some parsers like `dig`, `xml`, `csv`, etc. will work on any platform. Other parsers that convert platform-specific output will generate a warning message if they are run on an unsupported platform. To see all parser information, including compatibility, run `jc -ap`.
Some parsers like `dig`, `xml`, `csv`, etc. will work on any platform. Other
parsers that convert platform-specific output will generate a warning message if
they are run on an unsupported platform. To see all parser information,
including compatibility, run `jc -ap`.
You may still use a parser on an unsupported platform - for example, you may want to parse a file with linux `lsof` output on an macOS or Windows laptop. In that case you can suppress the warning message with the `-q` cli option or the `quiet=True` function parameter in `parse()`:
You may still use a parser on an unsupported platform - for example, you may want
to parse a file with linux `lsof` output on an macOS or Windows laptop. In that
case you can suppress the warning message with the `-q` cli option or the
`quiet=True` function parameter in `parse()`:
macOS:
```bash
cat lsof.out | jc --lsof -q
```
or Windows:
```bash
type lsof.out | jc --lsof -q
@@ -360,22 +464,30 @@ Tested on:
- Windows 2019 Server
## 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) or [`jc/parsers/foo_s.py (streaming)`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo_s.py) parsers 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)
or [`jc/parsers/foo_s.py (streaming)`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo_s.py) parsers as a template and submit your parser with a pull request.
Please see the [Contributing Guidelines](https://github.com/kellyjonbrazil/jc/blob/master/CONTRIBUTING.md) for more information.
## Acknowledgments
- Local parser plugin feature contributed by [Dean Serenevy](https://github.com/duelafn)
- CI automation and code optimizations by [philippeitis](https://github.com/philippeitis)
- [`ifconfig-parser`](https://github.com/KnightWhoSayNi/ifconfig-parser) module by KnightWhoSayNi
- [`ifconfig-parser`](https://github.com/KnightWhoSayNi/ifconfig-parser) module
by KnightWhoSayNi
- [`xmltodict`](https://github.com/martinblech/xmltodict) module by Martín Blech
- [`ruamel.yaml`](https://pypi.org/project/ruamel.yaml) module by Anthon van der Neut
- [`ruamel.yaml`](https://pypi.org/project/ruamel.yaml) module by Anthon van
der Neut
- [`trparse`](https://github.com/lbenitez000/trparse) module by Luis Benitez
- Parsing [code](https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501) from Conor Heine adapted for some parsers
- Parsing [code](https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501)
from Conor Heine adapted for some parsers
- Excellent constructive feedback from [Ilya Sher](https://github.com/ilyash-b)
## Examples
Here are some examples of `jc` output. For more examples, see [here](https://kellyjonbrazil.github.io/jc/EXAMPLES) or the parser documentation.
Here are some examples of `jc` output. For more examples, see
[here](https://kellyjonbrazil.github.io/jc/EXAMPLES) or the parser
documentation.
### arp
```bash
arp | jc --arp -p # or: jc -p arp
@@ -783,7 +895,7 @@ ps axu | jc --ps -p # or: jc -p ps axu
"stat": "Ss",
"start": "Nov09",
"time": "0:08",
"command": "/usr/lib/systemd/systemd --switched-root --system --deserialize 22"
"command": "/usr/lib/systemd/systemd --switched-root --system --deseria..."
},
{
"user": "root",
@@ -815,7 +927,8 @@ ps axu | jc --ps -p # or: jc -p ps axu
```
### traceroute
```bash
traceroute -m 2 8.8.8.8 | jc --traceroute -p # or: jc -p traceroute -m 2 8.8.8.8
traceroute -m 2 8.8.8.8 | jc --traceroute -p
# or: jc -p traceroute -m 2 8.8.8.8
```
```json
{

View File

@@ -1,31 +1,104 @@
#!/bin/bash
# Generate docs.md
# requires pydoc-markdown 2.1.0.post1
# requires pydoc-markdown 4.5.0
readme_config=$(cat <<'EOF'
{
"processors": [
{
"type": "filter"
},
{
"type": "pydocmd"
}
],
"renderer": {
"type": "markdown",
"header_level_by_type": {
"Module": 1,
"Class": 3,
"Method": 3,
"Function": 3,
"Data": 3
}
}
}
EOF
)
toc_config=$(cat <<'EOF'
{
"processors": [
{
"type": "filter"
},
{
"type": "pydocmd"
}
],
"renderer": {
"type": "markdown",
"render_toc": true,
"header_level_by_type": {
"Module": 1,
"Class": 3,
"Method": 3,
"Function": 3,
"Data": 3
}
}
}
EOF
)
parser_config=$(cat <<'EOF'
{
"processors": [
{
"type": "filter",
"expression": "not name == \"info\" and not name.startswith(\"_\") and default()"
},
{
"type": "pydocmd"
}
],
"renderer": {
"type": "markdown",
"header_level_by_type": {
"Module": 1,
"Class": 3,
"Method": 3,
"Function": 3,
"Data": 3
}
}
}
EOF
)
cd jc
echo Building docs for: package
pydocmd simple jc+ > ../docs/readme.md
pydoc-markdown -m jc "${readme_config}" > ../docs/readme.md
echo Building docs for: lib
pydocmd simple lib+ > ../docs/lib.md
pydoc-markdown -m jc.lib "${toc_config}" > ../docs/lib.md
echo Building docs for: utils
pydocmd simple utils+ > ../docs/utils.md
pydoc-markdown -m jc.utils "${toc_config}" > ../docs/utils.md
echo Building docs for: universal parser
pydocmd simple jc.parsers.universal+ > ../docs/parsers/universal.md
pydoc-markdown -m jc.parsers.universal "${toc_config}" > ../docs/parsers/universal.md
# a bit of inception here... jc is being used to help
# automate the generation of its own documentation. :)
# pull jc parser objects into a bash array from jq
# filter out any plugin parsers
parsers=()
while read -r value
do
parsers+=("$value")
done < <(jc -a | jq -c '.parsers[]')
done < <(jc -a | jq -c '.parsers[] | select(.plugin != true)')
# iterate over the bash array
for parser in "${parsers[@]}"
do
parser_name=$(jq -r '.name' <<< "$parser")
@@ -36,8 +109,8 @@ do
echo "Building docs for: ${parser_name}"
echo "[Home](https://kellyjonbrazil.github.io/jc/)" > ../docs/parsers/"${parser_name}".md
pydocmd simple jc.parsers."${parser_name}"+ >> ../docs/parsers/"${parser_name}".md
echo "## Parser Information" >> ../docs/parsers/"${parser_name}".md
pydoc-markdown -m jc.parsers."${parser_name}" "${parser_config}" >> ../docs/parsers/"${parser_name}".md
echo "### Parser Information" >> ../docs/parsers/"${parser_name}".md
echo "Compatibility: ${compatible}" >> ../docs/parsers/"${parser_name}".md
echo >> ../docs/parsers/"${parser_name}".md
echo "Version ${version} by ${author} (${author_email})" >> ../docs/parsers/"${parser_name}".md

View File

@@ -1,17 +1,26 @@
# Table of Contents
* [jc.lib](#jc.lib)
* [parse](#jc.lib.parse)
* [parser\_mod\_list](#jc.lib.parser_mod_list)
* [plugin\_parser\_mod\_list](#jc.lib.plugin_parser_mod_list)
* [parser\_info](#jc.lib.parser_info)
* [all\_parser\_info](#jc.lib.all_parser_info)
* [get\_help](#jc.lib.get_help)
<a id="jc.lib"></a>
# jc.lib
# lib
jc - JSON CLI output utility
JC lib module
<a id="jc.lib.parse"></a>
### parse
## parse
```python
parse(parser_mod_name,
data,
quiet=False,
raw=False,
ignore_exceptions=None,
**kwargs)
def parse(parser_mod_name: str, data: Union[str, Iterable[str]], quiet: bool = False, raw: bool = False, ignore_exceptions: bool = None, **kwargs) -> Union[Dict, List[Dict], Iterator[Dict]]
```
Parse the string data using the supplied parser module.
@@ -49,7 +58,10 @@ parsers without this API:
Parameters:
parser_mod_name: (string) name of the parser module
parser_mod_name: (string) name of the parser module. This
function will accept module_name,
cli-name, and --argument-name
variants of the module name.
data: (string or data to parse (string for normal
iterator) parsers, iterator of strings for
@@ -67,24 +79,60 @@ Returns:
Standard Parsers: Dictionary or List of Dictionaries
Streaming Parsers: Generator Object containing Dictionaries
<a id="jc.lib.parser_mod_list"></a>
### parser\_mod\_list
## parser_mod_list
```python
parser_mod_list()
def parser_mod_list() -> List[str]
```
Returns a list of all available parser module names.
## plugin_parser_mod_list
<a id="jc.lib.plugin_parser_mod_list"></a>
### plugin\_parser\_mod\_list
```python
plugin_parser_mod_list()
def plugin_parser_mod_list() -> List[str]
```
Returns a list of plugin parser module names. This function is a
subset of `parser_mod_list()`.
<a id="jc.lib.parser_info"></a>
### parser\_info
## get_help
```python
get_help(parser_mod_name)
def parser_info(parser_mod_name: str) -> Union[Dict, None]
```
Returns a dictionary that includes the module metadata.
This function will accept **module_name**, **cli-name**, and
**--argument-name** variants of the module name string.
<a id="jc.lib.all_parser_info"></a>
### all\_parser\_info
```python
def all_parser_info() -> List[Optional[Dict]]
```
Returns a list of dictionaris that includes metadata for all modules.
<a id="jc.lib.get_help"></a>
### get\_help
```python
def get_help(parser_mod_name: str) -> None
```
Show help screen for the selected parser.
This function will accept **module_name**, **cli-name**, and
**--argument-name** variants of the module name string.

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.acpi"></a>
# jc.parsers.acpi
jc - JSON CLI output utility `acpi` command output parser
Usage (cli):
@@ -230,16 +232,12 @@ Examples:
}
]
<a id="jc.parsers.acpi.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -254,7 +252,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.airport"></a>
# jc.parsers.airport
jc - JSON CLI output utility `airport -I` command output parser
The `airport` program can be found at `/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport`.
@@ -83,16 +85,12 @@ Examples:
"channel": "48,80"
}
<a id="jc.parsers.airport.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -107,7 +105,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: darwin
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.airport_s"></a>
# jc.parsers.airport\_s
# jc.parsers.airport_s
jc - JSON CLI output utility `airport -s` command output parser
The `airport` program can be found at `/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport`.
@@ -111,16 +113,12 @@ Examples:
...
]
<a id="jc.parsers.airport_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -135,7 +133,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: darwin
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.arp"></a>
# jc.parsers.arp
jc - JSON CLI output utility `arp` command output parser
Supports `arp` and `arp -a` output.
@@ -120,16 +122,12 @@ Examples:
}
]
<a id="jc.parsers.arp.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -144,7 +142,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, aix, freebsd, darwin
Version 1.8 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.blkid"></a>
# jc.parsers.blkid
jc - JSON CLI output utility `blkid` command output parser
Usage (cli):
@@ -88,7 +90,7 @@ Examples:
{
"id_fs_uuid": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
"id_fs_uuid_enc": "3klkIj-w1kk-DkJi-0XBJ-y3i7-i2Ac-vHqWBM",
"id_fs_version": "LVM2\x20001",
"id_fs_version": "LVM2\\x20001",
"id_fs_type": "LVM2_member",
"id_fs_usage": "raid",
"id_iolimit_minimum_io_size": 512,
@@ -123,16 +125,12 @@ Examples:
}
]
<a id="jc.parsers.blkid.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -147,7 +145,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.cksum"></a>
# jc.parsers.cksum
jc - JSON CLI output utility `cksum` command output parser
This parser works with the following checksum calculation utilities:
@@ -57,16 +59,12 @@ Examples:
...
]
<a id="jc.parsers.cksum.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -81,7 +79,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.crontab"></a>
# jc.parsers.crontab
jc - JSON CLI output utility `crontab -l` command output and crontab
file parser
@@ -176,16 +178,12 @@ Examples:
]
}
<a id="jc.parsers.crontab.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -200,7 +198,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.crontab_u"></a>
# jc.parsers.crontab\_u
# jc.parsers.crontab_u
jc - JSON CLI output utility `crontab -l` command output and crontab
file parser
@@ -173,16 +175,12 @@ Examples:
]
}
<a id="jc.parsers.crontab_u.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -197,7 +195,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.csv"></a>
# jc.parsers.csv
jc - JSON CLI output utility `csv` file parser
The `csv` parser will attempt to automatically detect the delimiter
@@ -80,16 +82,12 @@ Examples:
...
]
<a id="jc.parsers.csv.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -104,7 +102,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.csv_s"></a>
# jc.parsers.csv\_s
# jc.parsers.csv_s
jc - JSON CLI output utility `csv` file streaming parser
> This streaming parser outputs JSON Lines
@@ -66,16 +68,12 @@ Examples:
{"Sell":"129","List":"132","Living":"13","Rooms":"6","Beds":"3"...}
...
<a id="jc.parsers.csv_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False, ignore_exceptions=False)
def parse(data, raw=False, quiet=False, ignore_exceptions=False)
```
Main text parsing generator function. Returns an iterator object.
@@ -97,7 +95,7 @@ Returns:
Iterator object
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.date"></a>
# jc.parsers.date
jc - JSON CLI output utility `date` command output parser
The `epoch` calculated timestamp field is naive. (i.e. based on the local
@@ -80,16 +82,12 @@ Examples:
"timezone_aware": true
}
<a id="jc.parsers.date.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -104,7 +102,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 2.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.df"></a>
# jc.parsers.df
jc - JSON CLI output utility `df` command output parser
Usage (cli):
@@ -100,16 +102,12 @@ Examples:
...
]
<a id="jc.parsers.df.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -124,7 +122,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.9 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.dig"></a>
# jc.parsers.dig
jc - JSON CLI output utility `dig` command output parser
Options supported:
@@ -325,16 +327,12 @@ Examples:
}
]
<a id="jc.parsers.dig.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -349,7 +347,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, aix, freebsd, darwin, win32, cygwin
Version 2.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.dir"></a>
# jc.parsers.dir
jc - JSON CLI output utility `dir` command output parser
Options supported:
@@ -53,7 +55,7 @@ Examples:
"dir": true,
"size": null,
"filename": ".",
"parent": "C:\Program Files\Internet Explorer",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1616624100
},
{
@@ -62,7 +64,7 @@ Examples:
"dir": true,
"size": null,
"filename": "..",
"parent": "C:\Program Files\Internet Explorer",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1616624100
},
{
@@ -71,7 +73,7 @@ Examples:
"dir": true,
"size": null,
"filename": "en-US",
"parent": "C:\Program Files\Internet Explorer",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1575715740
},
{
@@ -80,7 +82,7 @@ Examples:
"dir": false,
"size": 54784,
"filename": "ExtExport.exe",
"parent": "C:\Program Files\Internet Explorer",
"parent": "C:\\Program Files\\Internet Explorer",
"epoch": 1575713340
},
...
@@ -94,7 +96,7 @@ Examples:
"dir": true,
"size": null,
"filename": ".",
"parent": "C:\Program Files\Internet Explorer"
"parent": "C:\\Program Files\\Internet Explorer"
},
{
"date": "03/24/2021",
@@ -102,7 +104,7 @@ Examples:
"dir": true,
"size": null,
"filename": "..",
"parent": "C:\Program Files\Internet Explorer"
"parent": "C:\\Program Files\\Internet Explorer"
},
{
"date": "12/07/2019",
@@ -110,7 +112,7 @@ Examples:
"dir": true,
"size": null,
"filename": "en-US",
"parent": "C:\Program Files\Internet Explorer"
"parent": "C:\\Program Files\\Internet Explorer"
},
{
"date": "12/07/2019",
@@ -118,21 +120,17 @@ Examples:
"dir": false,
"size": "54,784",
"filename": "ExtExport.exe",
"parent": "C:\Program Files\Internet Explorer"
"parent": "C:\\Program Files\\Internet Explorer"
},
...
]
<a id="jc.parsers.dir.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -147,7 +145,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: win32
Version 1.4 by Rasheed Elsaleh (rasheed@rebelliondefense.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.dmidecode"></a>
# jc.parsers.dmidecode
jc - JSON CLI output utility `dmidecode` command output parser
Usage (cli):
@@ -128,16 +130,12 @@ Examples:
...
]
<a id="jc.parsers.dmidecode.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -152,7 +150,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.dpkg_l"></a>
# jc.parsers.dpkg\_l
# jc.parsers.dpkg_l
jc - JSON CLI output utility `dpkg -l` command output parser
Set the `COLUMNS` environment variable to a large value to avoid field
@@ -134,16 +136,12 @@ Examples:
...
]
<a id="jc.parsers.dpkg_l.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -158,7 +156,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.du"></a>
# jc.parsers.du
jc - JSON CLI output utility `du` command output parser
Usage (cli):
@@ -90,16 +92,12 @@ Examples:
...
]
<a id="jc.parsers.du.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -114,7 +112,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.env"></a>
# jc.parsers.env
jc - JSON CLI output utility `env` and `printenv` command output parser
This parser will output a list of dictionaries each containing `name` and
@@ -75,16 +77,12 @@ Examples:
"_": "/usr/bin/env"
}
<a id="jc.parsers.env.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -100,7 +98,7 @@ Returns:
Dictionary of raw structured data or
List of Dictionaries of processed structured data
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.file"></a>
# jc.parsers.file
jc - JSON CLI output utility `file` command output parser
Usage (cli):
@@ -65,16 +67,12 @@ Examples:
...
]
<a id="jc.parsers.file.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -89,7 +87,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, aix, freebsd, darwin
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.finger"></a>
# jc.parsers.finger
jc - JSON CLI output utility `finger` command output parser
Supports `-s` output option. Does not support the `-l` detail option.
@@ -93,16 +95,12 @@ Examples:
...
]
<a id="jc.parsers.finger.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -117,7 +115,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, freebsd
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.free"></a>
# jc.parsers.free
jc - JSON CLI output utility `free` command output parser
Usage (cli):
@@ -75,16 +77,12 @@ Examples:
}
]
<a id="jc.parsers.free.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -99,7 +97,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.fstab"></a>
# jc.parsers.fstab
jc - JSON CLI output utility `fstab` file parser
Usage (cli):
@@ -88,16 +90,12 @@ Examples:
}
]
<a id="jc.parsers.fstab.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -112,7 +110,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.group"></a>
# jc.parsers.group
jc - JSON CLI output utility `/etc/group` file parser
Usage (cli):
@@ -112,16 +114,12 @@ Examples:
...
]
<a id="jc.parsers.group.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -136,7 +134,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.gshadow"></a>
# jc.parsers.gshadow
jc - JSON CLI output utility `/etc/gshadow` file parser
Usage (cli):
@@ -80,16 +82,12 @@ Examples:
...
]
<a id="jc.parsers.gshadow.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -104,7 +102,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, aix, freebsd
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.hash"></a>
# jc.parsers.hash
jc - JSON CLI output utility `hash` command output parser
Usage (cli):
@@ -40,16 +42,12 @@ Examples:
}
]
<a id="jc.parsers.hash.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -64,7 +62,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.hashsum"></a>
# jc.parsers.hashsum
jc - JSON CLI output utility `hash sum` command output parser
This parser works with the following hash calculation utilities:
@@ -71,16 +73,12 @@ Examples:
...
]
<a id="jc.parsers.hashsum.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -95,7 +93,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.hciconfig"></a>
# jc.parsers.hciconfig
jc - JSON CLI output utility `hciconfig` command output parser
Usage (cli):
@@ -320,16 +322,12 @@ Examples:
}
]
<a id="jc.parsers.hciconfig.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -344,7 +342,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.history"></a>
# jc.parsers.history
jc - JSON CLI output utility `history` command output parser
This parser will output a list of dictionaries each containing `line` and
@@ -48,7 +50,7 @@ Examples:
},
{
"line": 120,
"command": "echo "hello""
"command": "echo \"hello\""
},
{
"line": 121,
@@ -61,21 +63,17 @@ Examples:
{
"118": "sleep 100",
"119": "ls /bin",
"120": "echo "hello"",
"120": "echo \"hello\"",
"121": "docker images",
...
}
<a id="jc.parsers.history.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -91,7 +89,7 @@ Returns:
Dictionary of raw structured data or
List of Dictionaries of processed structured data
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.hosts"></a>
# jc.parsers.hosts
jc - JSON CLI output utility `/etc/hosts` file parser
Usage (cli):
@@ -77,16 +79,12 @@ Examples:
}
]
<a id="jc.parsers.hosts.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -101,7 +99,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.id"></a>
# jc.parsers.id
jc - JSON CLI output utility `id` command output parser
Usage (cli):
@@ -108,16 +110,12 @@ Examples:
}
}
<a id="jc.parsers.id.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -132,7 +130,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ifconfig"></a>
# jc.parsers.ifconfig
jc - JSON CLI output utility `ifconfig` command output parser
Note: No `ifconfig` options are supported.
@@ -189,16 +191,12 @@ Examples:
}
]
<a id="jc.parsers.ifconfig.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -213,7 +211,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, aix, freebsd, darwin
Version 1.11 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ini"></a>
# jc.parsers.ini
jc - JSON CLI output utility `INI` file parser
Parses standard `INI` files and files containing simple key/value pairs.
@@ -69,16 +71,12 @@ Examples:
}
}
<a id="jc.parsers.ini.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -93,7 +91,7 @@ Returns:
Dictionary representing the ini file
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.iostat"></a>
# jc.parsers.iostat
jc - JSON CLI output utility `iostat` command output parser
Note: `iostat` version 11 and higher include a JSON output option
@@ -162,16 +164,12 @@ Examples:
}
]
<a id="jc.parsers.iostat.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -186,7 +184,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.0 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.iostat_s"></a>
# jc.parsers.iostat\_s
# jc.parsers.iostat_s
jc - JSON CLI output utility `iostat` command output streaming parser
> This streaming parser outputs JSON Lines
@@ -103,16 +105,12 @@ Examples:
{"device":"sda","tps":"0.24","kb_read_s":"5.28","kb_wrtn_s":"1.10"...}
...
<a id="jc.parsers.iostat_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False, ignore_exceptions=False)
def parse(data, raw=False, quiet=False, ignore_exceptions=False)
```
Main text parsing generator function. Returns an iterator object.
@@ -134,7 +132,7 @@ Returns:
Iterator object
## Parser Information
### Parser Information
Compatibility: linux
Version 1.0 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.iptables"></a>
# jc.parsers.iptables
jc - JSON CLI output utility `iptables` command output parser
Supports `-vLn` and `--line-numbers` for all tables.
@@ -166,16 +168,12 @@ Examples:
...
]
<a id="jc.parsers.iptables.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -190,7 +188,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.iw_scan"></a>
# jc.parsers.iw\_scan
# jc.parsers.iw_scan
jc - JSON CLI output utility `iw dev <device> scan` command output parser
This parser is considered beta quality. Not all fields are parsed and there
@@ -124,16 +126,12 @@ Examples:
...
]
<a id="jc.parsers.iw_scan.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -148,7 +146,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 0.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.jar_manifest"></a>
# jc.parsers.jar\_manifest
# jc.parsers.jar_manifest
jc - JSON CLI output utility `MANIFEST.MF` file parser
Usage (cli):
@@ -29,16 +31,16 @@ Schema:
Examples:
$ cat MANIFEST.MF | jc --jar-manifest -p
$ unzip -c log4j-core-2.16.0.jar META-INF/MANIFEST.MF | \
$ unzip -c log4j-core-2.16.0.jar META-INF/MANIFEST.MF | \\
jc --jar-manifest -p
$ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \
$ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \\
jc --jar-manifest -p
$ cat MANIFEST.MF | jc --jar-manifest -p
[
{
"Import_Package": "com.conversantmedia.util.concurrent;resoluti...",
"Export_Package": "org.apache.logging.log4j.core;uses:="org.ap...",
"Export_Package": "org.apache.logging.log4j.core;uses:=\"org.ap...",
"Manifest_Version": "1.0",
"Bundle_License": "https://www.apache.org/licenses/LICENSE-2.0.txt",
"Bundle_SymbolicName": "org.apache.logging.log4j.core",
@@ -51,7 +53,7 @@ Examples:
}
]
$ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \
$ unzip -c 'apache-log4j-2.16.0-bin/*.jar' META-INF/MANIFEST.MF | \\
jc --jar-manifest -p
[
...
@@ -80,16 +82,12 @@ Examples:
...
]
<a id="jc.parsers.jar_manifest.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -104,7 +102,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 0.01 by Matt J (https://github.com/listuser)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.jobs"></a>
# jc.parsers.jobs
jc - JSON CLI output utility `jobs` command output parser
Also supports the `-l` option.
@@ -96,16 +98,12 @@ Example:
}
]
<a id="jc.parsers.jobs.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -120,7 +118,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.kv"></a>
# jc.parsers.kv
jc - JSON CLI output utility `Key/Value` file parser
Supports files containing simple key/value pairs. Delimiter can be `=` or
@@ -56,16 +58,12 @@ Examples:
"occupation": "Engineer"
}
<a id="jc.parsers.kv.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -82,7 +80,7 @@ Returns:
Dictionary representing the key/value file
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.last"></a>
# jc.parsers.last
jc - JSON CLI output utility `last` and `lastb` command output parser
Supports `-w` and `-F` options.
@@ -107,17 +109,12 @@ Examples:
...
]
<a id="jc.parsers.last.parse"></a>
### parse
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -132,7 +129,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.8 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ls"></a>
# jc.parsers.ls
jc - JSON CLI output utility `ls` and `vdir` command output parser
Options supported:
@@ -119,16 +121,12 @@ Examples:
...
]
<a id="jc.parsers.ls.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -143,7 +141,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.10 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ls_s"></a>
# jc.parsers.ls\_s
# jc.parsers.ls_s
jc - JSON CLI output utility `ls` and `vdir` command output streaming
parser
@@ -80,16 +82,12 @@ Examples:
{"filename":"AssetCacheLocatorUtil","flags":"-rwxr-xr-x","links":"1...}
...
<a id="jc.parsers.ls_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False, ignore_exceptions=False)
def parse(data, raw=False, quiet=False, ignore_exceptions=False)
```
Main text parsing generator function. Returns an iterator object.
@@ -111,7 +109,7 @@ Returns:
Iterator object
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 0.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.lsblk"></a>
# jc.parsers.lsblk
jc - JSON CLI output utility `lsblk` command output parser
Usage (cli):
@@ -93,9 +95,9 @@ Examples:
...
]
$ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\
STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\
SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\
$ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\\
STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\\
SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\\
PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p
[
{
@@ -185,9 +187,9 @@ Examples:
...
]
$ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\
STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\
SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\
$ lsblk -o +KNAME,FSTYPE,LABEL,UUID,PARTLABEL,PARTUUID,RA,MODEL,SERIAL,\\
STATE,OWNER,GROUP,MODE,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,\\
SCHED,RQ-SIZE,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,WSAME,WWN,RAND,\\
PKNAME,HCTL,TRAN,REV,VENDOR | jc --lsblk -p -r
[
{
@@ -277,16 +279,12 @@ Examples:
...
]
<a id="jc.parsers.lsblk.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -301,7 +299,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.8 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.lsmod"></a>
# jc.parsers.lsmod
jc - JSON CLI output utility `lsmod` command output parser
Usage (cli):
@@ -128,16 +130,12 @@ Examples:
...
]
<a id="jc.parsers.lsmod.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -152,7 +150,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.lsof"></a>
# jc.parsers.lsof
jc - JSON CLI output utility `lsof` command output parser
Usage (cli):
@@ -122,16 +124,12 @@ Examples:
...
]
<a id="jc.parsers.lsof.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -146,7 +144,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.lsusb"></a>
# jc.parsers.lsusb
jc - JSON CLI output utility `lsusb` command output parser
Supports the `-v` option or no options.
@@ -264,16 +266,12 @@ Examples:
}
]
<a id="jc.parsers.lsusb.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -288,7 +286,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.mount"></a>
# jc.parsers.mount
jc - JSON CLI output utility `mount` command output parser
Usage (cli):
@@ -78,16 +80,12 @@ Example:
...
]
<a id="jc.parsers.mount.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -102,7 +100,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.netstat"></a>
# jc.parsers.netstat
jc - JSON CLI output utility `netstat` command output parser
Caveats:
@@ -358,16 +360,12 @@ Examples:
}
]
<a id="jc.parsers.netstat.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -382,7 +380,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.12 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ntpq"></a>
# jc.parsers.ntpq
jc - JSON CLI output utility `ntpq -p` command output parser
Usage (cli):
@@ -209,16 +211,12 @@ Examples:
}
]
<a id="jc.parsers.ntpq.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -233,7 +231,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.passwd"></a>
# jc.parsers.passwd
jc - JSON CLI output utility `/etc/passwd` file Parser
Usage (cli):
@@ -97,16 +99,12 @@ Examples:
...
]
<a id="jc.parsers.passwd.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -121,7 +119,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ping"></a>
# jc.parsers.ping
jc - JSON CLI output utility `ping` command output parser
Supports `ping` and `ping6` output.
@@ -165,16 +167,12 @@ Examples:
]
}
<a id="jc.parsers.ping.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -189,7 +187,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ping_s"></a>
# jc.parsers.ping\_s
# jc.parsers.ping_s
jc - JSON CLI output utility `ping` command output streaming parser
> This streaming parser outputs JSON Lines
@@ -86,16 +88,12 @@ Examples:
{"type":"reply","destination_ip":"1.1.1.1","sent_bytes":"56","patte...}
...
<a id="jc.parsers.ping_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False, ignore_exceptions=False)
def parse(data, raw=False, quiet=False, ignore_exceptions=False)
```
Main text parsing generator function. Returns an iterator object.
@@ -117,7 +115,7 @@ Returns:
Iterator object
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 0.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.pip_list"></a>
# jc.parsers.pip\_list
# jc.parsers.pip_list
jc - JSON CLI output utility `pip-list` command output parser
Usage (cli):
@@ -50,16 +52,12 @@ Examples:
...
]
<a id="jc.parsers.pip_list.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -74,7 +72,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.pip_show"></a>
# jc.parsers.pip\_show
# jc.parsers.pip_show
jc - JSON CLI output utility `pip-show` command output parser
Usage (cli):
@@ -68,16 +70,12 @@ Examples:
}
]
<a id="jc.parsers.pip_show.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -92,7 +90,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ps"></a>
# jc.parsers.ps
jc - JSON CLI output utility `ps` command output parser
`ps` options supported:
@@ -209,16 +211,12 @@ Examples:
...
]
<a id="jc.parsers.ps.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -233,7 +231,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.route"></a>
# jc.parsers.route
jc - JSON CLI output utility `route` command output parser
Usage (cli):
@@ -111,16 +113,12 @@ Examples:
}
]
<a id="jc.parsers.route.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -135,7 +133,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.rpm_qi"></a>
# jc.parsers.rpm\_qi
# jc.parsers.rpm_qi
jc - JSON CLI output utility `rpm -qi` command output parser
Works with `rpm -qi [package]` or `rpm -qia`.
@@ -164,16 +166,12 @@ Examples:
...
]
<a id="jc.parsers.rpm_qi.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -188,7 +186,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.sfdisk"></a>
# jc.parsers.sfdisk
jc - JSON CLI output utility `sfdisk` command output parser
Supports the following `sfdisk` options:
@@ -205,16 +207,12 @@ Examples:
}
]
<a id="jc.parsers.sfdisk.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -229,7 +227,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.shadow"></a>
# jc.parsers.shadow
jc - JSON CLI output utility `/etc/shadow` file parser
Usage (cli):
@@ -104,16 +106,12 @@ Examples:
...
]
<a id="jc.parsers.shadow.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -128,7 +126,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, aix, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ss"></a>
# jc.parsers.ss
jc - JSON CLI output utility `ss` command output parser
Extended information options like -e and -p are not supported and may cause
@@ -283,16 +285,12 @@ Examples:
}
]
<a id="jc.parsers.ss.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -307,7 +305,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.stat"></a>
# jc.parsers.stat
jc - JSON CLI output utility `stat` command output parser
The `xxx_epoch` calculated timestamp fields are naive. (i.e. based on the
@@ -173,16 +175,12 @@ Examples:
...
]
<a id="jc.parsers.stat.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -197,7 +195,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.10 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.stat_s"></a>
# jc.parsers.stat\_s
# jc.parsers.stat_s
jc - JSON CLI output utility `stat` command output streaming parser
> This streaming parser outputs JSON Lines
@@ -84,16 +86,12 @@ Examples:
$ stat | jc --stat-s -r
{"file":"(stdin)","unix_device":"1027739696","inode":"1155","flag...}
<a id="jc.parsers.stat_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False, ignore_exceptions=False)
def parse(data, raw=False, quiet=False, ignore_exceptions=False)
```
Main text parsing generator function. Returns an iterator object.
@@ -115,7 +113,7 @@ Returns:
Iterator object
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 0.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.sysctl"></a>
# jc.parsers.sysctl
jc - JSON CLI output utility `sysctl -a` command output parser
Note: Since `sysctl` output is not easily parsable only a very simple
@@ -60,16 +62,12 @@ Examples:
...
}
<a id="jc.parsers.sysctl.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -84,7 +82,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.systemctl"></a>
# jc.parsers.systemctl
jc - JSON CLI output utility `systemctl` command output parser
Usage (cli):
@@ -61,16 +63,12 @@ Examples:
...
]
<a id="jc.parsers.systemctl.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -85,7 +83,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.systemctl_lj"></a>
# jc.parsers.systemctl\_lj
# jc.parsers.systemctl_lj
jc - JSON CLI output utility `systemctl list-jobs` command output parser
Usage (cli):
@@ -78,16 +80,12 @@ Examples:
}
]
<a id="jc.parsers.systemctl_lj.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -102,7 +100,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.systemctl_ls"></a>
# jc.parsers.systemctl\_ls
# jc.parsers.systemctl_ls
jc - JSON CLI output utility `systemctl list-sockets` command output
parser
@@ -54,16 +56,12 @@ Examples:
...
]
<a id="jc.parsers.systemctl_ls.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -78,7 +76,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.systemctl_luf"></a>
# jc.parsers.systemctl\_luf
# jc.parsers.systemctl_luf
jc - JSON CLI output utility `systemctl list-unit-files` command output
parser
@@ -50,16 +52,12 @@ Examples:
...
]
<a id="jc.parsers.systemctl_luf.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -74,7 +72,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.systeminfo"></a>
# jc.parsers.systeminfo
jc - JSON CLI output utility `systeminfo` command output parser
Blank or missing elements are set to `null`.
@@ -114,9 +116,9 @@ Examples:
"Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz"
],
"bios_version": "Dell Inc. 1.16.2, 4/21/2020",
"windows_directory": "C:\WINDOWS",
"system_directory": "C:\WINDOWS\system32",
"boot_device": "\Device\HarddiskVolume2",
"windows_directory": "C:\\WINDOWS",
"system_directory": "C:\\WINDOWS\\system32",
"boot_device": "\\Device\\HarddiskVolume2",
"system_locale": "en-us;English (United States)",
"input_locale": "en-us;English (United States)",
"time_zone": "(UTC+00:00) UTC",
@@ -125,9 +127,9 @@ Examples:
"virtual_memory_max_size_mb": 37367,
"virtual_memory_available_mb": 22266,
"virtual_memory_in_use_mb": 15101,
"page_file_locations": "C:\pagefile.sys",
"page_file_locations": "C:\\pagefile.sys",
"domain": "test.com",
"logon_server": "\\TESTDC01",
"logon_server": "\\\\TESTDC01",
"hotfixs": [
"KB2693643",
"KB4601054"
@@ -176,9 +178,9 @@ Examples:
"Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz"
],
"bios_version": "Dell Inc. 1.16.2, 4/21/2020",
"windows_directory": "C:\WINDOWS",
"system_directory": "C:\WINDOWS\system32",
"boot_device": "\Device\HarddiskVolume2",
"windows_directory": "C:\\WINDOWS",
"system_directory": "C:\\WINDOWS\\system32",
"boot_device": "\\Device\\HarddiskVolume2",
"system_locale": "en-us;English (United States)",
"input_locale": "en-us;English (United States)",
"time_zone": "(UTC+00:00) UTC",
@@ -187,9 +189,9 @@ Examples:
"virtual_memory_max_size_mb": "37,367 MB",
"virtual_memory_available_mb": "22,266 MB",
"virtual_memory_in_use_mb": "15,101 MB",
"page_file_locations": "C:\pagefile.sys",
"page_file_locations": "C:\\pagefile.sys",
"domain": "test.com",
"logon_server": "\\TESTDC01",
"logon_server": "\\\\TESTDC01",
"hotfixs": [
"KB2693643",
"KB4601054"
@@ -214,16 +216,12 @@ Examples:
}
}
<a id="jc.parsers.systeminfo.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -238,7 +236,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: win32
Version 1.1 by Jon Smith (jon@rebelliondefense.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.time"></a>
# jc.parsers.time
jc - JSON CLI output utility `/usr/bin/time` command output parser
Output from `/usr/bin/time` is sent to `STDERR`, so the `-o` option can be
@@ -14,7 +16,7 @@ Note: `/usr/bin/time` is similar but different from the Bash builtin
Usage (cli):
$ /usr/bin/time -o timefile.out sleep 2; cat timefile.out | \
$ /usr/bin/time -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p
Usage (module):
@@ -74,7 +76,7 @@ Schema:
Examples:
$ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \
$ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p
{
"command_being_timed": "sleep 2",
@@ -107,10 +109,10 @@ Examples:
"elapsed_time_total_seconds": 2.5
}
$ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \
$ /usr/bin/time --verbose -o timefile.out sleep 2; cat timefile.out | \\
jc --time -p -r
{
"command_being_timed": ""sleep 2"",
"command_being_timed": "\"sleep 2\"",
"user_time": "0.00",
"system_time": "0.00",
"cpu_percent": "0",
@@ -135,16 +137,12 @@ Examples:
"exit_status": "0"
}
<a id="jc.parsers.time.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -159,7 +157,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.timedatectl"></a>
# jc.parsers.timedatectl
jc - JSON CLI output utility `timedatectl` command output parser
The `epoch_utc` calculated timestamp field is timezone-aware and is only
@@ -67,16 +69,12 @@ Examples:
"dst_active": "yes"
}
<a id="jc.parsers.timedatectl.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -91,7 +89,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.tracepath"></a>
# jc.parsers.tracepath
jc - JSON CLI output utility `tracepath` command output parser
Supports `tracepath` and `tracepath6` output.
@@ -134,16 +136,12 @@ Examples:
]
}
<a id="jc.parsers.tracepath.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -158,7 +156,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.traceroute"></a>
# jc.parsers.traceroute
jc - JSON CLI output utility `traceroute` command output parser
Supports `traceroute` and `traceroute6` output.
@@ -123,16 +125,12 @@ Examples:
]
}
<a id="jc.parsers.traceroute.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -147,7 +145,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ufw"></a>
# jc.parsers.ufw
jc - JSON CLI output utility `ufw status` command output parser
Usage (cli):
@@ -203,16 +205,12 @@ Examples:
]
}
<a id="jc.parsers.ufw.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -227,7 +225,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.ufw_appinfo"></a>
# jc.parsers.ufw\_appinfo
# jc.parsers.ufw_appinfo
jc - JSON CLI output utility `ufw app info [application]` command
output parser
@@ -141,16 +143,12 @@ Examples:
}
]
<a id="jc.parsers.ufw_appinfo.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -165,7 +163,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.uname"></a>
# jc.parsers.uname
jc - JSON CLI output utility `uname -a` command output parser
Note: Must use `uname -a`
@@ -50,16 +52,12 @@ Example:
"kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019"
}
<a id="jc.parsers.uname.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -74,7 +72,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, freebsd
Version 1.7 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,10 +1,21 @@
# Table of Contents
* [jc.parsers.universal](#jc.parsers.universal)
* [simple\_table\_parse](#jc.parsers.universal.simple_table_parse)
* [sparse\_table\_parse](#jc.parsers.universal.sparse_table_parse)
<a id="jc.parsers.universal"></a>
# jc.parsers.universal
jc - JSON CLI output utility universal Parsers
## simple_table_parse
<a id="jc.parsers.universal.simple_table_parse"></a>
### simple\_table\_parse
```python
simple_table_parse(data)
def simple_table_parse(data: List[str]) -> List[Dict]
```
Parse simple tables. The last column may contain data with spaces.
@@ -24,10 +35,12 @@ Returns:
List of Dictionaries
<a id="jc.parsers.universal.sparse_table_parse"></a>
### sparse\_table\_parse
## sparse_table_parse
```python
sparse_table_parse(data, delim='\u2063')
def sparse_table_parse(data: List[str], delim: Optional[str] = '\u2063') -> List[Dict]
```
Parse tables with missing column data or with spaces in column data.
@@ -45,7 +58,7 @@ Parameters:
Also, ensure there are no blank lines (list items)
in the data.
delim: (string) Delimiter to use. By default `u\2063`
delim: (string) Delimiter to use. By default `u\\2063`
(invisible separator) is used since it is unlikely
to ever be seen in terminal output. You can change
this for troubleshooting purposes or if there is a

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.upower"></a>
# jc.parsers.upower
jc - JSON CLI output utility `upower` command output parser
The `updated_epoch` calculated timestamp field is naive. (i.e. based on the
@@ -201,16 +203,12 @@ Examples:
}
]
<a id="jc.parsers.upower.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -225,7 +223,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.uptime"></a>
# jc.parsers.uptime
jc - JSON CLI output utility `uptime` command output parser
Usage (cli):
@@ -68,16 +70,12 @@ Example:
"load_15m": "1.94"
}
<a id="jc.parsers.uptime.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -92,7 +90,7 @@ Returns:
Dictionary. Raw or processed structured data
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.vmstat"></a>
# jc.parsers.vmstat
jc - JSON CLI output utility `vmstat` command output parser
Options supported: `-a`, `-w`, `-d`, `-t`
@@ -129,16 +131,12 @@ Examples:
}
]
<a id="jc.parsers.vmstat.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -153,7 +151,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux
Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.vmstat_s"></a>
# jc.parsers.vmstat\_s
# jc.parsers.vmstat_s
jc - JSON CLI output utility `vmstat` command output streaming parser
> This streaming parser outputs JSON Lines
@@ -103,16 +105,12 @@ Examples:
{"runnable_procs":"2","uninterruptible_sleeping_procs":"0","virtua...}
...
<a id="jc.parsers.vmstat_s.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False, ignore_exceptions=False)
def parse(data, raw=False, quiet=False, ignore_exceptions=False)
```
Main text parsing generator function. Returns an iterator object.
@@ -134,7 +132,7 @@ Returns:
Iterator object
## Parser Information
### Parser Information
Compatibility: linux
Version 0.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.w"></a>
# jc.parsers.w
jc - JSON CLI output utility `w` command output parser
Usage (cli):
@@ -106,16 +108,12 @@ Examples:
}
]
<a id="jc.parsers.w.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -130,7 +128,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.wc"></a>
# jc.parsers.wc
jc - JSON CLI output utility `wc` command output parser
Usage (cli):
@@ -57,16 +59,12 @@ Examples:
...
]
<a id="jc.parsers.wc.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -81,7 +79,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.who"></a>
# jc.parsers.who
jc - JSON CLI output utility `who` command output parser
Accepts any of the following who options (or no options): `-aTH`
@@ -138,16 +140,12 @@ Examples:
}
]
<a id="jc.parsers.who.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -162,7 +160,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, aix, freebsd
Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.xml"></a>
# jc.parsers.xml
jc - JSON CLI output utility `XML` file parser
Usage (cli):
@@ -73,16 +75,12 @@ Examples:
...
}
<a id="jc.parsers.xml.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -97,7 +95,7 @@ Returns:
Dictionary. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.yaml"></a>
# jc.parsers.yaml
jc - JSON CLI output utility `YAML` file parser
Usage (cli):
@@ -87,16 +89,12 @@ Examples:
}
]
<a id="jc.parsers.yaml.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -111,7 +109,7 @@ Returns:
List of Dictionaries representing the YAML documents.
## Parser Information
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.6 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@@ -1,6 +1,8 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.zipinfo"></a>
# jc.parsers.zipinfo
jc - JSON CLI output utility `zipinfo` command output parser
Options supported:
@@ -82,16 +84,12 @@ Examples:
},
...
<a id="jc.parsers.zipinfo.parse"></a>
## info
```python
info()
```
Provides parser metadata (version, author, etc.)
### parse
## parse
```python
parse(data, raw=False, quiet=False)
def parse(data, raw=False, quiet=False)
```
Main text parsing function
@@ -106,7 +104,7 @@ Returns:
List of Dictionaries. Raw or processed structured data.
## Parser Information
### Parser Information
Compatibility: linux, darwin
Version 0.01 by Matt J (https://github.com/listuser)

View File

@@ -1,17 +1,19 @@
<a id="jc"></a>
# jc
JC - JSON CLI output utility
* kellyjonbrazil@gmail.com
This package serializes the output of many standard unix command line tools
to dictionaries and lists of dictionaries.
This package converts the output of many standard unix command line tools
and file-types to dictionaries and lists of dictionaries.
## Interactive Documentation
>>> help(jc)
>>> help(jc.lib)
>>> help(jc.util)
>>> help('jc')
>>> help('jc.lib')
>>> help('jc.utils')
>>> jc.get_help('parser_module_name')
## Online Documentation
@@ -55,19 +57,27 @@ modules directly:
Use `help(jc.lib)` for details:
parse(parser_module_name: str, data: str | iterable)
parse(parser_module_name: str, data: str | Iterable)
-> dict | list[dict] | Iterable[dict]
High-level API to easily access the parser. This API will find both
built-in parsers and local plugin parsers.
get_help(parser_module_name: str)
parser_info(parser_module_name: str) -> dict
Get the metadata for a particular parser.
all_parser_info() -> list[dict]
Get the metadata for all parsers.
get_help(parser_module_name: str) -> None
Convenience function to display the help screen for a parser using
its module name.
parser_mod_list()
parser_mod_list() -> list
Get a list of all available parser module names to be used in
parse() and get_help().
parse(), parser_info(), and get_help().
plugin_parser_mod_list()
Get a list of plugin parser module names. This list is a subset of
plugin_parser_mod_list() -> list
Get a list of plugin parser module names to be used in
parse(), parser_info(), and get_help(). This list is a subset of
parser_mod_list().

View File

@@ -1,10 +1,33 @@
# Table of Contents
* [jc.utils](#jc.utils)
* [warning\_message](#jc.utils.warning_message)
* [error\_message](#jc.utils.error_message)
* [compatibility](#jc.utils.compatibility)
* [has\_data](#jc.utils.has_data)
* [convert\_to\_int](#jc.utils.convert_to_int)
* [convert\_to\_float](#jc.utils.convert_to_float)
* [convert\_to\_bool](#jc.utils.convert_to_bool)
* [stream\_success](#jc.utils.stream_success)
* [stream\_error](#jc.utils.stream_error)
* [input\_type\_check](#jc.utils.input_type_check)
* [streaming\_input\_type\_check](#jc.utils.streaming_input_type_check)
* [streaming\_line\_input\_type\_check](#jc.utils.streaming_line_input_type_check)
* [timestamp](#jc.utils.timestamp)
* [\_\_init\_\_](#jc.utils.timestamp.__init__)
<a id="jc.utils"></a>
# jc.utils
# utils
jc - JSON CLI output utility utils
## warning_message
<a id="jc.utils.warning_message"></a>
### warning\_message
```python
warning_message(message_lines)
def warning_message(message_lines: List[str]) -> None
```
Prints warning message for non-fatal issues. The first line is
@@ -19,10 +42,12 @@ Returns:
None - just prints output to STDERR
<a id="jc.utils.error_message"></a>
### error\_message
## error_message
```python
error_message(message_lines)
def error_message(message_lines: List[str]) -> None
```
Prints an error message for fatal issues. The first line is
@@ -37,10 +62,12 @@ Returns:
None - just prints output to STDERR
<a id="jc.utils.compatibility"></a>
### compatibility
## compatibility
```python
compatibility(mod_name, compatible, quiet=False)
def compatibility(mod_name: str, compatible: List, quiet: Optional[bool] = False) -> None
```
Checks for the parser's compatibility with the running OS
@@ -60,10 +87,12 @@ Returns:
None - just prints output to STDERR
<a id="jc.utils.has_data"></a>
### has\_data
## has_data
```python
has_data(data)
def has_data(data: str) -> bool
```
Checks if the input contains data. If there are any non-whitespace
@@ -78,10 +107,12 @@ Returns:
Boolean True if input string (data) contains non-whitespace
characters, otherwise False
<a id="jc.utils.convert_to_int"></a>
### convert\_to\_int
## convert_to_int
```python
convert_to_int(value)
def convert_to_int(value: Union[str, float]) -> Union[int, None]
```
Converts string and float input to int. Strips all non-numeric
@@ -89,16 +120,18 @@ characters from strings.
Parameters:
value: (string/integer/float) Input value
value: (string/float) Input value
Returns:
integer/None Integer if successful conversion, otherwise None
<a id="jc.utils.convert_to_float"></a>
### convert\_to\_float
## convert_to_float
```python
convert_to_float(value)
def convert_to_float(value: Union[str, int]) -> Union[float, None]
```
Converts string and int input to float. Strips all non-numeric
@@ -106,16 +139,18 @@ characters from strings.
Parameters:
value: (string) Input value
value: (string/integer) Input value
Returns:
float/None Float if successful conversion, otherwise None
<a id="jc.utils.convert_to_bool"></a>
### convert\_to\_bool
## convert_to_bool
```python
convert_to_bool(value)
def convert_to_bool(value: Union[str, int, float]) -> bool
```
Converts string, integer, or float input to boolean by checking
@@ -130,43 +165,72 @@ Returns:
True/False False unless a 'truthy' number or string is found
('y', 'yes', 'true', '1', 1, -1, etc.)
<a id="jc.utils.stream_success"></a>
### stream\_success
## stream_success
```python
stream_success(output_line, ignore_exceptions)
def stream_success(output_line: Dict, ignore_exceptions: bool) -> Dict
```
Add `_jc_meta` object to output line if `ignore_exceptions=True`
## stream_error
<a id="jc.utils.stream_error"></a>
### stream\_error
```python
stream_error(e, ignore_exceptions, line)
def stream_error(e: BaseException, ignore_exceptions: bool, line: str) -> Dict
```
Reraise the stream exception with annotation or print an error
`_jc_meta` field if `ignore_exceptions=True`.
<a id="jc.utils.input_type_check"></a>
### input\_type\_check
## input_type_check
```python
input_type_check(data)
def input_type_check(data: str) -> None
```
Ensure input data is a string
## streaming_input_type_check
Ensure input data is a string. Raises `TypeError` if not.
<a id="jc.utils.streaming_input_type_check"></a>
### streaming\_input\_type\_check
```python
streaming_input_type_check(data)
def streaming_input_type_check(data: Iterable) -> None
```
Ensure input data is an iterable, but not a string or bytes
## streaming_line_input_type_check
Ensure input data is an iterable, but not a string or bytes. Raises
`TypeError` if not.
<a id="jc.utils.streaming_line_input_type_check"></a>
### streaming\_line\_input\_type\_check
```python
streaming_line_input_type_check(line)
def streaming_line_input_type_check(line: str) -> None
```
Ensure each line is a string
## timestamp
Ensure each line is a string. Raises `TypeError` if not.
<a id="jc.utils.timestamp"></a>
### timestamp Objects
```python
timestamp(datetime_string)
class timestamp()
```
<a id="jc.utils.timestamp.__init__"></a>
### \_\_init\_\_
```python
def __init__(datetime_string: str) -> None
```
Input a date-time text string of several formats and convert to a
@@ -179,16 +243,16 @@ Parameters:
Attributes:
string (str) the input datetime string
string (str) the input datetime string
format (int) the format rule that was used to
decode the datetime string. None if
conversion fails
format (int) the format rule that was used to
decode the datetime string. None if
conversion fails
naive (int) timestamp based on locally configured
timezone. None if conversion fails
naive (int) timestamp based on locally configured
timezone. None if conversion fails
utc (int) aware timestamp only if UTC timezone
detected in datetime string. None if
conversion fails
utc (int) aware timestamp only if UTC timezone
detected in datetime string. None if
conversion fails

View File

@@ -2,14 +2,14 @@
* kellyjonbrazil@gmail.com
This package serializes the output of many standard unix command line tools
to dictionaries and lists of dictionaries.
This package converts the output of many standard unix command line tools
and file-types to dictionaries and lists of dictionaries.
## Interactive Documentation
>>> help(jc)
>>> help(jc.lib)
>>> help(jc.util)
>>> help('jc')
>>> help('jc.lib')
>>> help('jc.utils')
>>> jc.get_help('parser_module_name')
## Online Documentation
@@ -53,21 +53,29 @@ modules directly:
Use `help(jc.lib)` for details:
parse(parser_module_name: str, data: str | iterable)
parse(parser_module_name: str, data: str | Iterable)
-> dict | list[dict] | Iterable[dict]
High-level API to easily access the parser. This API will find both
built-in parsers and local plugin parsers.
get_help(parser_module_name: str)
parser_info(parser_module_name: str) -> dict
Get the metadata for a particular parser.
all_parser_info() -> list[dict]
Get the metadata for all parsers.
get_help(parser_module_name: str) -> None
Convenience function to display the help screen for a parser using
its module name.
parser_mod_list()
parser_mod_list() -> list
Get a list of all available parser module names to be used in
parse() and get_help().
parse(), parser_info(), and get_help().
plugin_parser_mod_list()
Get a list of plugin parser module names. This list is a subset of
plugin_parser_mod_list() -> list
Get a list of plugin parser module names to be used in
parse(), parser_info(), and get_help(). This list is a subset of
parser_mod_list().
"""
from .lib import (__version__, parse, parser_mod_list,
plugin_parser_mod_list, get_help)
from .lib import (__version__, parse, parser_mod_list, plugin_parser_mod_list,
parser_info, all_parser_info, get_help)

View File

@@ -10,7 +10,8 @@ import signal
import shlex
import subprocess
import json
from .lib import __version__, parsers, local_parsers
from .lib import (__version__, all_parser_info, parsers,
_parser_argument, _get_parser)
from . import utils
from . import tracebackplus
from .exceptions import LibraryNotInstalled, ParseError
@@ -147,29 +148,12 @@ def parser_shortname(parser_arg):
return parser_arg[2:]
def parser_argument(parser):
"""Return short name of the parser with dashes and with -- prefix"""
return f'--{parser}'
def parser_mod_shortname(parser):
"""Return short name of the parser's module name (no -- prefix and dashes converted to underscores)"""
return parser.replace('--', '').replace('-', '_')
def parser_module(parser):
"""Import the module just in time and return the module object"""
shortname = 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):
"""Return the argument and description information from each parser"""
ptext = ''
for parser in parsers:
parser_arg = parser_argument(parser)
parser_mod = parser_module(parser)
parser_arg = _parser_argument(parser)
parser_mod = _get_parser(parser)
if hasattr(parser_mod, 'info'):
parser_desc = parser_mod.info.description
@@ -184,23 +168,6 @@ def parsers_text(indent=0, pad=0):
def about_jc():
"""Return jc info and the contents of each parser.info as a dictionary"""
parser_list = []
for parser in parsers:
parser_mod = parser_module(parser)
if hasattr(parser_mod, 'info'):
info_dict = {}
info_dict['name'] = parser_mod.__name__.split('.')[-1]
info_dict['argument'] = parser_argument(parser)
parser_entry = vars(parser_mod.info)
for k, v in parser_entry.items():
if not k.startswith('__'):
info_dict[k] = v
parser_list.append(info_dict)
return {
'name': 'jc',
'version': info.version,
@@ -210,8 +177,8 @@ def about_jc():
'website': info.website,
'copyright': info.copyright,
'license': info.license,
'parser_count': len(parser_list),
'parsers': parser_list
'parser_count': len(all_parser_info()),
'parsers': all_parser_info()
}
@@ -264,8 +231,7 @@ def help_doc(options):
parser_name = parser_shortname(arg)
if parser_name in parsers:
# load parser module just in time so we don't need to load all modules
parser = parser_module(arg)
parser = _get_parser(arg)
compatible = ', '.join(parser.info.compatible)
doc_text = \
f'{parser.__doc__}\n'\
@@ -491,7 +457,7 @@ def main():
# find the correct parser
if magic_found_parser:
parser = parser_module(magic_found_parser)
parser = _get_parser(magic_found_parser)
parser_name = parser_shortname(magic_found_parser)
else:
@@ -500,7 +466,7 @@ def main():
parser_name = parser_shortname(arg)
if parser_name in parsers:
parser = parser_module(arg)
parser = _get_parser(arg)
found = True
break
@@ -553,6 +519,7 @@ def main():
utils.error_message([f'Parser issue with {parser_name}:',
f'{e.__class__.__name__}: {e}',
'If this is the correct parser, try setting the locale to C (LANG=C).',
'For details use the -d or -dd option. Use "jc -h" for help.'])
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))
@@ -573,8 +540,9 @@ def main():
streaming_msg = 'Use the -qq option to ignore streaming parser errors.'
utils.error_message([
f'{parser_name} parser could not parse the input data. Did you use the correct parser?',
f'{parser_name} parser could not parse the input data.',
f'{streaming_msg}',
'If this is the correct parser, try setting the locale to C (LANG=C).',
'For details use the -d or -dd option. Use "jc -h" for help.'
])
sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT))

View File

@@ -6,9 +6,10 @@ import sys
import os
import re
import importlib
from typing import Dict, List, Iterable, Union, Iterator, Optional
from jc import appdirs
__version__ = '1.18.1'
__version__ = '1.18.2'
parsers = [
'acpi',
@@ -98,6 +99,14 @@ parsers = [
'zipinfo'
]
def _cliname_to_modname(parser_cli_name):
"""Return real module name (dashes converted to underscores)"""
return parser_cli_name.replace('--', '').replace('-', '_')
def _modname_to_cliname(parser_mod_name):
"""Return module's cli name (underscores converted to dashes)"""
return parser_mod_name.replace('_', '-')
# Create the local_parsers list. This is a list of custom or
# override parsers from <user_data_dir>/jc/jcparsers/*.py.
# Once this list is created, extend the parsers list with it.
@@ -109,31 +118,36 @@ if os.path.isdir(local_parsers_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)
local_parsers.append(_modname_to_cliname(plugin_name))
if plugin_name not in parsers:
parsers.append(plugin_name)
parsers.append(_modname_to_cliname(plugin_name))
try:
del name
except Exception:
pass
def _cliname_to_modname(parser_cli_name):
"""Return real module name (dashes converted to underscores)"""
return parser_cli_name.replace('-', '_')
def _modname_to_cliname(parser_mod_name):
"""Return module's cli name (underscores converted to dashes)"""
return parser_mod_name.replace('_', '-')
def _parser_argument(parser_mod_name):
"""Return short name of the parser with dashes and with -- prefix"""
parser = _modname_to_cliname(parser_mod_name)
return f'--{parser}'
def _get_parser(parser_mod_name):
"""Return the parser module object"""
# ensure parser_mod_name is a true module name and not a cli name
parser_mod_name = _cliname_to_modname(parser_mod_name)
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,
quiet=False, raw=False, ignore_exceptions=None, **kwargs):
def parse(
parser_mod_name: str,
data: Union[str, Iterable[str]],
quiet: bool = False,
raw: bool = False,
ignore_exceptions: bool = None,
**kwargs
) -> Union[Dict, List[Dict], Iterator[Dict]]:
"""
Parse the string data using the supplied parser module.
@@ -170,7 +184,10 @@ def parse(parser_mod_name, data,
Parameters:
parser_mod_name: (string) name of the parser module
parser_mod_name: (string) name of the parser module. This
function will accept module_name,
cli-name, and --argument-name
variants of the module name.
data: (string or data to parse (string for normal
iterator) parsers, iterator of strings for
@@ -196,17 +213,57 @@ def parse(parser_mod_name, data,
return jc_parser.parse(data, quiet=quiet, raw=raw, **kwargs)
def parser_mod_list():
def parser_mod_list() -> List[str]:
"""Returns a list of all available parser module names."""
return [_cliname_to_modname(p) for p in parsers]
def plugin_parser_mod_list():
def plugin_parser_mod_list() -> List[str]:
"""
Returns a list of plugin parser module names. This function is a
subset of `parser_mod_list()`.
"""
return [_cliname_to_modname(p) for p in local_parsers]
def get_help(parser_mod_name):
"""Show help screen for the selected parser."""
def parser_info(parser_mod_name: str) -> Union[Dict, None]:
"""
Returns a dictionary that includes the module metadata.
This function will accept **module_name**, **cli-name**, and
**--argument-name** variants of the module name string.
"""
# ensure parser_mod_name is a true module name and not a cli name
parser_mod_name = _cliname_to_modname(parser_mod_name)
parser_mod = _get_parser(parser_mod_name)
if hasattr(parser_mod, 'info'):
info_dict: Dict = {}
info_dict['name'] = parser_mod_name
info_dict['argument'] = _parser_argument(parser_mod_name)
parser_entry = vars(parser_mod.info)
for k, v in parser_entry.items():
if not k.startswith('__'):
info_dict[k] = v
if _modname_to_cliname(parser_mod_name) in local_parsers:
info_dict['plugin'] = True
return info_dict
return None
def all_parser_info() -> List[Optional[Dict]]:
"""
Returns a list of dictionaris that includes metadata for all modules.
"""
return [parser_info(_cliname_to_modname(p)) for p in parsers]
def get_help(parser_mod_name: str) -> None:
"""
Show help screen for the selected parser.
This function will accept **module_name**, **cli-name**, and
**--argument-name** variants of the module name string.
"""
help(_get_parser(parser_mod_name))

View File

@@ -39,6 +39,7 @@ Examples:
[]
"""
import jc.utils
from typing import List, Dict
class info():
@@ -57,7 +58,7 @@ class info():
__version__ = info.version
def _process(proc_data):
def _process(proc_data: List[Dict]) -> List[Dict]:
"""
Final processing to conform to the schema.
@@ -78,7 +79,11 @@ def _process(proc_data):
return proc_data
def parse(data, raw=False, quiet=False):
def parse(
data: str,
raw: bool = False,
quiet: bool = False
) -> List[Dict]:
"""
Main text parsing function
@@ -95,7 +100,7 @@ def parse(data, raw=False, quiet=False):
jc.utils.compatibility(__name__, info.compatible, quiet)
jc.utils.input_type_check(data)
raw_output = []
raw_output: List = []
if jc.utils.has_data(data):

View File

@@ -49,6 +49,7 @@ Examples:
{example output}
...
"""
from typing import Dict, Iterable
import jc.utils
from jc.utils import stream_success, stream_error
from jc.exceptions import ParseError
@@ -69,7 +70,7 @@ class info():
__version__ = info.version
def _process(proc_data):
def _process(proc_data: Dict) -> Dict:
"""
Final processing to conform to the schema.
@@ -90,7 +91,12 @@ def _process(proc_data):
return proc_data
def parse(data, raw=False, quiet=False, ignore_exceptions=False):
def parse(
data: Iterable[str],
raw: bool = False,
quiet: bool = False,
ignore_exceptions: bool = False
) -> Iterable[Dict]:
"""
Main text parsing generator function. Returns an iterator object.
@@ -115,7 +121,7 @@ def parse(data, raw=False, quiet=False, ignore_exceptions=False):
jc.utils.streaming_input_type_check(data)
for line in data:
output_line = {}
output_line: Dict = {}
try:
jc.utils.streaming_line_input_type_check(line)

View File

@@ -2,9 +2,10 @@
import string
from typing import List, Dict, Optional
def simple_table_parse(data):
def simple_table_parse(data: List[str]) -> List[Dict]:
"""
Parse simple tables. The last column may contain data with spaces.
@@ -32,7 +33,7 @@ def simple_table_parse(data):
return raw_output
def sparse_table_parse(data, delim='\u2063'):
def sparse_table_parse(data: List[str], delim: Optional[str] ='\u2063') -> List[Dict]:
"""
Parse tables with missing column data or with spaces in column data.

View File

@@ -5,9 +5,10 @@ import locale
import shutil
from datetime import datetime, timezone
from textwrap import TextWrapper
from typing import Dict, Iterable, List, Union, Optional
def warning_message(message_lines):
def warning_message(message_lines: List[str]) -> None:
"""
Prints warning message for non-fatal issues. The first line is
prepended with 'jc: Warning - ' and subsequent lines are indented.
@@ -43,7 +44,7 @@ def warning_message(message_lines):
print(message, file=sys.stderr)
def error_message(message_lines):
def error_message(message_lines: List[str]) -> None:
"""
Prints an error message for fatal issues. The first line is
prepended with 'jc: Error - ' and subsequent lines are indented.
@@ -75,7 +76,7 @@ def error_message(message_lines):
print(message, file=sys.stderr)
def compatibility(mod_name, compatible, quiet=False):
def compatibility(mod_name: str, compatible: List, quiet: Optional[bool] = False) -> None:
"""
Checks for the parser's compatibility with the running OS
platform.
@@ -109,7 +110,7 @@ def compatibility(mod_name, compatible, quiet=False):
f'Compatible platforms: {compat_list}'])
def has_data(data):
def has_data(data: str) -> bool:
"""
Checks if the input contains data. If there are any non-whitespace
characters then return True, else return False.
@@ -126,14 +127,14 @@ def has_data(data):
return bool(data and not data.isspace())
def convert_to_int(value):
def convert_to_int(value: Union[str, float]) -> Union[int, None]:
"""
Converts string and float input to int. Strips all non-numeric
characters from strings.
Parameters:
value: (string/integer/float) Input value
value: (string/float) Input value
Returns:
@@ -156,14 +157,14 @@ def convert_to_int(value):
return None
def convert_to_float(value):
def convert_to_float(value: Union[str, int]) -> Union[float, None]:
"""
Converts string and int input to float. Strips all non-numeric
characters from strings.
Parameters:
value: (string) Input value
value: (string/integer) Input value
Returns:
@@ -182,7 +183,7 @@ def convert_to_float(value):
return None
def convert_to_bool(value):
def convert_to_bool(value: Union[str, int, float]) -> bool:
"""
Converts string, integer, or float input to boolean by checking
for 'truthy' values.
@@ -220,7 +221,7 @@ def convert_to_bool(value):
return False
def stream_success(output_line, ignore_exceptions):
def stream_success(output_line: Dict, ignore_exceptions: bool) -> Dict:
"""Add `_jc_meta` object to output line if `ignore_exceptions=True`"""
if ignore_exceptions:
output_line.update({'_jc_meta': {'success': True}})
@@ -228,7 +229,7 @@ def stream_success(output_line, ignore_exceptions):
return output_line
def stream_error(e, ignore_exceptions, line):
def stream_error(e: BaseException, ignore_exceptions: bool, line: str) -> Dict:
"""
Reraise the stream exception with annotation or print an error
`_jc_meta` field if `ignore_exceptions=True`.
@@ -247,51 +248,53 @@ def stream_error(e, ignore_exceptions, line):
}
def input_type_check(data):
"""Ensure input data is a string"""
def input_type_check(data: str) -> None:
"""Ensure input data is a string. Raises `TypeError` if not."""
if not isinstance(data, str):
raise TypeError("Input data must be a 'str' object.")
def streaming_input_type_check(data):
"""Ensure input data is an iterable, but not a string or bytes"""
def streaming_input_type_check(data: Iterable) -> None:
"""
Ensure input data is an iterable, but not a string or bytes. Raises
`TypeError` if not.
"""
if not hasattr(data, '__iter__') or isinstance(data, (str, bytes)):
raise TypeError("Input data must be a non-string iterable object.")
def streaming_line_input_type_check(line):
"""Ensure each line is a string"""
def streaming_line_input_type_check(line: str) -> None:
"""Ensure each line is a string. Raises `TypeError` if not."""
if not isinstance(line, str):
raise TypeError("Input line must be a 'str' object.")
class timestamp:
"""
Input a date-time text string of several formats and convert to a
naive or timezone-aware epoch timestamp in UTC.
def __init__(self, datetime_string: str) -> None:
"""
Input a date-time text string of several formats and convert to a
naive or timezone-aware epoch timestamp in UTC.
Parameters:
Parameters:
datetime_string: (str) a string representation of a
date-time in several supported formats
datetime_string: (str) a string representation of a
date-time in several supported formats
Attributes:
Attributes:
string (str) the input datetime string
string (str) the input datetime string
format (int) the format rule that was used to
decode the datetime string. None if
conversion fails
format (int) the format rule that was used to
decode the datetime string. None if
conversion fails
naive (int) timestamp based on locally configured
timezone. None if conversion fails
naive (int) timestamp based on locally configured
timezone. None if conversion fails
utc (int) aware timestamp only if UTC timezone
detected in datetime string. None if
conversion fails
"""
def __init__(self, datetime_string):
utc (int) aware timestamp only if UTC timezone
detected in datetime string. None if
conversion fails
"""
self.string = datetime_string
dt = self._parse()
self.format = dt['format']
@@ -395,28 +398,33 @@ class timestamp:
# from https://www.timeanddate.com/time/zones/
# only removed UTC timezone and added known non-UTC offsets
tz_abbr = ['A', 'ACDT', 'ACST', 'ACT', 'ACWST', 'ADT', 'AEDT', 'AEST', 'AET', 'AFT', 'AKDT', 'AKST', 'ALMT',
'AMST', 'AMT', 'ANAST', 'ANAT', 'AQTT', 'ART', 'AST', 'AT', 'AWDT', 'AWST', 'AZOST', 'AZOT',
'AZST', 'AZT', 'AoE', 'B', 'BNT', 'BOT', 'BRST', 'BRT', 'BST', 'BTT', 'C', 'CAST', 'CAT', 'CCT',
'CDT', 'CEST', 'CET', 'CHADT', 'CHAST', 'CHOST', 'CHOT', 'CHUT', 'CIDST', 'CIST', 'CKT', 'CLST',
'CLT', 'COT', 'CST', 'CT', 'CVT', 'CXT', 'ChST', 'D', 'DAVT', 'DDUT', 'E', 'EASST', 'EAST',
'EAT', 'ECT', 'EDT', 'EEST', 'EET', 'EGST', 'EGT', 'EST', 'ET', 'F', 'FET', 'FJST', 'FJT', 'FKST',
'FKT', 'FNT', 'G', 'GALT', 'GAMT', 'GET', 'GFT', 'GILT', 'GMT', 'GST', 'GYT', 'H', 'HDT', 'HKT',
'HOVST', 'HOVT', 'HST', 'I', 'ICT', 'IDT', 'IOT', 'IRDT', 'IRKST', 'IRKT', 'IRST', 'IST', 'JST',
'K', 'KGT', 'KOST', 'KRAST', 'KRAT', 'KST', 'KUYT', 'L', 'LHDT', 'LHST', 'LINT', 'M', 'MAGST',
'MAGT', 'MART', 'MAWT', 'MDT', 'MHT', 'MMT', 'MSD', 'MSK', 'MST', 'MT', 'MUT', 'MVT', 'MYT', 'N',
'NCT', 'NDT', 'NFDT', 'NFT', 'NOVST', 'NOVT', 'NPT', 'NRT', 'NST', 'NUT', 'NZDT', 'NZST', 'O',
'OMSST', 'OMST', 'ORAT', 'P', 'PDT', 'PET', 'PETST', 'PETT', 'PGT', 'PHOT', 'PHT', 'PKT', 'PMDT',
'PMST', 'PONT', 'PST', 'PT', 'PWT', 'PYST', 'PYT', 'Q', 'QYZT', 'R', 'RET', 'ROTT', 'S', 'SAKT',
'SAMT', 'SAST', 'SBT', 'SCT', 'SGT', 'SRET', 'SRT', 'SST', 'SYOT', 'T', 'TAHT', 'TFT', 'TJT', 'TKT',
'TLT', 'TMT', 'TOST', 'TOT', 'TRT', 'TVT', 'U', 'ULAST', 'ULAT', 'UYST', 'UYT', 'UZT', 'V', 'VET',
'VLAST', 'VLAT', 'VOST', 'VUT', 'W', 'WAKT', 'WARST', 'WAST', 'WAT', 'WEST', 'WET', 'WFT', 'WGST',
'WGT', 'WIB', 'WIT', 'WITA', 'WST', 'WT', 'X', 'Y', 'YAKST', 'YAKT', 'YAPT', 'YEKST', 'YEKT', 'Z',
'UTC-1200', 'UTC-1100', 'UTC-1000', 'UTC-0930', 'UTC-0900', 'UTC-0800', 'UTC-0700', 'UTC-0600',
'UTC-0500', 'UTC-0400', 'UTC-0300', 'UTC-0230', 'UTC-0200', 'UTC-0100', 'UTC+0100', 'UTC+0200',
'UTC+0300', 'UTC+0400', 'UTC+0430', 'UTC+0500', 'UTC+0530', 'UTC+0545', 'UTC+0600', 'UTC+0630',
'UTC+0700', 'UTC+0800', 'UTC+0845', 'UTC+0900', 'UTC+1000', 'UTC+1030', 'UTC+1100', 'UTC+1200',
'UTC+1300', 'UTC+1345', 'UTC+1400']
tz_abbr = [
'A', 'ACDT', 'ACST', 'ACT', 'ACWST', 'ADT', 'AEDT', 'AEST', 'AET', 'AFT', 'AKDT',
'AKST', 'ALMT', 'AMST', 'AMT', 'ANAST', 'ANAT', 'AQTT', 'ART', 'AST', 'AT', 'AWDT',
'AWST', 'AZOST', 'AZOT', 'AZST', 'AZT', 'AoE', 'B', 'BNT', 'BOT', 'BRST', 'BRT', 'BST',
'BTT', 'C', 'CAST', 'CAT', 'CCT', 'CDT', 'CEST', 'CET', 'CHADT', 'CHAST', 'CHOST',
'CHOT', 'CHUT', 'CIDST', 'CIST', 'CKT', 'CLST', 'CLT', 'COT', 'CST', 'CT', 'CVT', 'CXT',
'ChST', 'D', 'DAVT', 'DDUT', 'E', 'EASST', 'EAST', 'EAT', 'ECT', 'EDT', 'EEST', 'EET',
'EGST', 'EGT', 'EST', 'ET', 'F', 'FET', 'FJST', 'FJT', 'FKST', 'FKT', 'FNT', 'G',
'GALT', 'GAMT', 'GET', 'GFT', 'GILT', 'GMT', 'GST', 'GYT', 'H', 'HDT', 'HKT', 'HOVST',
'HOVT', 'HST', 'I', 'ICT', 'IDT', 'IOT', 'IRDT', 'IRKST', 'IRKT', 'IRST', 'IST', 'JST',
'K', 'KGT', 'KOST', 'KRAST', 'KRAT', 'KST', 'KUYT', 'L', 'LHDT', 'LHST', 'LINT', 'M',
'MAGST', 'MAGT', 'MART', 'MAWT', 'MDT', 'MHT', 'MMT', 'MSD', 'MSK', 'MST', 'MT', 'MUT',
'MVT', 'MYT', 'N', 'NCT', 'NDT', 'NFDT', 'NFT', 'NOVST', 'NOVT', 'NPT', 'NRT', 'NST',
'NUT', 'NZDT', 'NZST', 'O', 'OMSST', 'OMST', 'ORAT', 'P', 'PDT', 'PET', 'PETST', 'PETT',
'PGT', 'PHOT', 'PHT', 'PKT', 'PMDT', 'PMST', 'PONT', 'PST', 'PT', 'PWT', 'PYST', 'PYT',
'Q', 'QYZT', 'R', 'RET', 'ROTT', 'S', 'SAKT', 'SAMT', 'SAST', 'SBT', 'SCT', 'SGT',
'SRET', 'SRT', 'SST', 'SYOT', 'T', 'TAHT', 'TFT', 'TJT', 'TKT', 'TLT', 'TMT', 'TOST',
'TOT', 'TRT', 'TVT', 'U', 'ULAST', 'ULAT', 'UYST', 'UYT', 'UZT', 'V', 'VET', 'VLAST',
'VLAT', 'VOST', 'VUT', 'W', 'WAKT', 'WARST', 'WAST', 'WAT', 'WEST', 'WET', 'WFT',
'WGST', 'WGT', 'WIB', 'WIT', 'WITA', 'WST', 'WT', 'X', 'Y', 'YAKST', 'YAKT', 'YAPT',
'YEKST', 'YEKT', 'Z', 'UTC-1200', 'UTC-1100', 'UTC-1000', 'UTC-0930', 'UTC-0900',
'UTC-0800', 'UTC-0700', 'UTC-0600', 'UTC-0500', 'UTC-0400', 'UTC-0300', 'UTC-0230',
'UTC-0200', 'UTC-0100', 'UTC+0100', 'UTC+0200', 'UTC+0300', 'UTC+0400', 'UTC+0430',
'UTC+0500', 'UTC+0530', 'UTC+0545', 'UTC+0600', 'UTC+0630', 'UTC+0700', 'UTC+0800',
'UTC+0845', 'UTC+0900', 'UTC+1000', 'UTC+1030', 'UTC+1100', 'UTC+1200', 'UTC+1300',
'UTC+1345', 'UTC+1400'
]
# normalize the timezone by taking out any timezone reference, except UTC
cleandata = data.replace('(', '').replace(')', '')

Some files were not shown because too many files have changed in this diff Show More