mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
working
This commit is contained in:
@ -45,10 +45,9 @@ Examples:
|
|||||||
"""
|
"""
|
||||||
from os import sep
|
from os import sep
|
||||||
import re
|
import re
|
||||||
from typing import Iterable, List, Dict, Tuple, Optional, Union, Generator
|
from typing import Iterable, List, Dict, Optional, Generator
|
||||||
import jc.utils
|
import jc.utils
|
||||||
from jc.exceptions import ParseError
|
from jc.exceptions import ParseError
|
||||||
from jc.parsers.universal import sparse_table_parse
|
|
||||||
|
|
||||||
|
|
||||||
class info():
|
class info():
|
||||||
@ -139,7 +138,7 @@ def _pretty_set_separators(table_lines: Iterable, separator: str) -> Generator[s
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# remove the table column separator characters and yield the line
|
# remove the table column separator characters and yield the line
|
||||||
line = line.replace('|', ' ').replace('│', ' ')
|
# line = line.replace('|', ' ').replace('│', ' ')
|
||||||
yield line
|
yield line
|
||||||
|
|
||||||
|
|
||||||
@ -187,6 +186,29 @@ def _pretty_normalize_rows(table_lines: Iterable,
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
def _pretty_table_parse(table: Iterable) -> List[Dict]:
|
||||||
|
temp_table = []
|
||||||
|
for line in table:
|
||||||
|
# normalize separator
|
||||||
|
line = line.replace('│', '|')
|
||||||
|
|
||||||
|
# remove first separator if it is the first char in the line
|
||||||
|
if line[0] == '|':
|
||||||
|
line = line.replace('|', ' ', 1)
|
||||||
|
|
||||||
|
# remove last separator if it is the last char in the line
|
||||||
|
if line[-1] == '|':
|
||||||
|
line = line[::-1].replace('|', ' ', 1)[::-1]
|
||||||
|
|
||||||
|
temp_table.append([x.strip() for x in line.split('|')])
|
||||||
|
|
||||||
|
headers = temp_table[0]
|
||||||
|
raw_data = temp_table[1:]
|
||||||
|
result = [dict.fromkeys(headers, None)]
|
||||||
|
result.extend([dict(zip(headers, r)) for r in raw_data])
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def _pretty_remove_header_rows(table: List[Dict], sep: str, data_sep: str) -> List[Optional[Dict]]:
|
def _pretty_remove_header_rows(table: List[Dict], sep: str, data_sep: str) -> List[Optional[Dict]]:
|
||||||
"""return a table with only data rows."""
|
"""return a table with only data rows."""
|
||||||
# create a new list of row objects with new key names
|
# create a new list of row objects with new key names
|
||||||
@ -294,13 +316,13 @@ def _parse_pretty(string: str) -> List:
|
|||||||
separator = ' ' + sep + ' '
|
separator = ' ' + sep + ' '
|
||||||
data_separator = ' ' + data_sep + ' '
|
data_separator = ' ' + data_sep + ' '
|
||||||
|
|
||||||
clean_gen = _pretty_set_separators(string_lines, separator)
|
clean: Generator = _pretty_set_separators(string_lines, separator)
|
||||||
normalized_gen = _pretty_normalize_rows(clean_gen, separator, data_separator)
|
normalized: Generator = _pretty_normalize_rows(clean, separator, data_separator)
|
||||||
raw_table = sparse_table_parse(normalized_gen)
|
raw_table: List[Dict] = _pretty_table_parse(normalized) # was sparse_table_parse()
|
||||||
new_keynames_dict = _pretty_map_new_keynames(raw_table, sep)
|
new_keynames: Dict = _pretty_map_new_keynames(raw_table, sep)
|
||||||
data_table = _pretty_remove_header_rows(raw_table, sep, data_sep)
|
data_table: List[Optional[Dict]] = _pretty_remove_header_rows(raw_table, sep, data_sep)
|
||||||
table_with_renamed_keys = _pretty_rename_keys(data_table, new_keynames_dict)
|
table_with_renamed_keys: List[Optional[Dict]] = _pretty_rename_keys(data_table, new_keynames)
|
||||||
final_table = _pretty_consolidate_rows(table_with_renamed_keys)
|
final_table: List[Dict] = _pretty_consolidate_rows(table_with_renamed_keys)
|
||||||
|
|
||||||
return final_table
|
return final_table
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user