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

doc update

This commit is contained in:
Kelly Brazil
2022-03-22 12:25:59 -07:00
parent aea2e1b0a9
commit f23f19da45
5 changed files with 122 additions and 9 deletions

View File

@ -147,6 +147,7 @@ option.
- `--airport` enables the `airport -I` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/airport)) - `--airport` enables the `airport -I` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/airport))
- `--airport-s` enables the `airport -s` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/airport_s)) - `--airport-s` enables the `airport -s` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/airport_s))
- `--arp` enables the `arp` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/arp)) - `--arp` enables the `arp` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/arp))
- `--asciitable` enables the ASCII and Unicode table parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/asciitable))
- `--asciitable-m` enables the multi-line ASCII and Unicode table parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/asciitable_m)) - `--asciitable-m` enables the multi-line ASCII and Unicode table parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/asciitable_m))
- `--blkid` enables the `blkid` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/blkid)) - `--blkid` enables the `blkid` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/blkid))
- `--cksum` enables the `cksum` and `sum` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/cksum)) - `--cksum` enables the `cksum` and `sum` command parser ([documentation](https://kellyjonbrazil.github.io/jc/docs/parsers/cksum))

View File

@ -0,0 +1,97 @@
[Home](https://kellyjonbrazil.github.io/jc/)
<a id="jc.parsers.asciitable"></a>
# jc.parsers.asciitable
jc - JSON Convert `asciitable` parser
This parser converts ASCII and Unicode text tables with single-line rows.
Column headers must be at least two spaces apart from each other and must
be unique.
For example:
╒══════════╤═════════╤════════╕
│ foo │ bar │ baz │
╞══════════╪═════════╪════════╡
│ good day │ │ 12345 │
├──────────┼─────────┼────────┤
│ hi there │ abc def │ 3.14 │
╘══════════╧═════════╧════════╛
or
+-----------------------------+
| foo bar baz |
+-----------------------------+
| good day 12345 |
| hi there abc def 3.14 |
+-----------------------------+
or
| foo | bar | baz |
|----------|---------|--------|
| good day | | 12345 |
| hi there | abc def | 3.14 |
or
foo bar baz
--------- -------- ------
good day 12345
hi there abc def
etc.
Usage (cli):
$ cat table.txt | jc --asciitable
Usage (module):
import jc
result = jc.parse('asciitable', asciitable_string)
Schema:
[
{
"column_name1": string, # empty string is null
"column_name2": string # empty string is null
}
]
Examples:
$ asciitable | jc --asciitable -p
[]
$ asciitable | jc --asciitable -p -r
[]
<a id="jc.parsers.asciitable.parse"></a>
### parse
```python
def parse(data: str, raw: bool = False, quiet: bool = False) -> List[Dict]
```
Main text parsing function
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
Returns:
List of Dictionaries. Raw or processed structured data.
### Parser Information
Compatibility: linux, darwin, cygwin, win32, aix, freebsd
Version 1.0 by Kelly Brazil (kellyjonbrazil@gmail.com)

View File

@ -41,8 +41,8 @@ Schema:
[ [
{ {
"column_name1": string, "column_name1": string, # empty string is null
"column_name2": string "column_name2": string # empty string is null
} }
] ]

View File

@ -36,8 +36,8 @@ Schema:
[ [
{ {
"column_name1": string, "column_name1": string, # empty string is null
"column_name2": string "column_name2": string # empty string is null
} }
] ]
@ -92,7 +92,7 @@ Examples:
] ]
""" """
import re import re
from typing import Iterable, Tuple, List, Dict from typing import Iterable, Tuple, List, Dict, Optional
import jc.utils import jc.utils
from jc.exceptions import ParseError from jc.exceptions import ParseError
@ -350,11 +350,21 @@ def _collapse_data(table: List[List[List[str]]]) -> List[List[str]]:
return result return result
def _create_table_dict(header: List[str], data: List[List[str]]) -> List[Dict[str, str]]: def _create_table_dict(header: List[str], data: List[List[str]]) -> List[Dict[str, Optional[str]]]:
return [dict(zip(header, r)) for r in data] """
zip the headers and data to create a list of dictionaries. Also convert
empty strings to None.
"""
table_list_dict: List[Dict[str, Optional[str]]] = [dict(zip(header, r)) for r in data]
for row in table_list_dict:
for k, v in row.items():
if v == '':
row[k] = None
return table_list_dict
def _parse_pretty(string: str) -> List[Dict[str, str]]: def _parse_pretty(string: str) -> List[Dict[str, Optional[str]]]:
string_lines: List[str] = string.splitlines() string_lines: List[str] = string.splitlines()
clean: List[Tuple[int, List[str]]] = _normalize_rows(string_lines) clean: List[Tuple[int, List[str]]] = _normalize_rows(string_lines)
raw_headers: List[List[str]] = _get_headers(clean) raw_headers: List[List[str]] = _get_headers(clean)
@ -362,7 +372,7 @@ def _parse_pretty(string: str) -> List[Dict[str, str]]:
new_headers: List[str] = _collapse_headers(raw_headers) new_headers: List[str] = _collapse_headers(raw_headers)
new_data: List[List[str]] = _collapse_data(raw_data) new_data: List[List[str]] = _collapse_data(raw_data)
final_table: List[Dict[str, str]] = _create_table_dict(new_headers, new_data) final_table: List[Dict[str, Optional[str]]] = _create_table_dict(new_headers, new_data)
return final_table return final_table

View File

@ -37,6 +37,11 @@ Parsers:
\fB--arp\fP \fB--arp\fP
`arp` command parser `arp` command parser
.TP
.B
\fB--asciitable\fP
ASCII and Unicode table parser
.TP .TP
.B .B
\fB--asciitable-m\fP \fB--asciitable-m\fP