mirror of
https://github.com/yt-dlp/yt-dlp
synced 2025-07-03 20:42:53 -05:00
[utils] Allow alignment in render_table
and add tests
This commit is contained in:
@ -4805,10 +4805,11 @@ def determine_protocol(info_dict):
|
||||
return compat_urllib_parse_urlparse(url).scheme
|
||||
|
||||
|
||||
def render_table(header_row, data, delim=False, extraGap=0, hideEmpty=False):
|
||||
""" Render a list of rows, each as a list of values """
|
||||
def render_table(header_row, data, delim=False, extra_gap=0, hide_empty=False):
|
||||
""" Render a list of rows, each as a list of values.
|
||||
Text after a \t will be right aligned """
|
||||
def width(string):
|
||||
return len(remove_terminal_sequences(string))
|
||||
return len(remove_terminal_sequences(string).replace('\t', ''))
|
||||
|
||||
def get_max_lens(table):
|
||||
return [max(width(str(v)) for v in col) for col in zip(*table)]
|
||||
@ -4816,21 +4817,24 @@ def render_table(header_row, data, delim=False, extraGap=0, hideEmpty=False):
|
||||
def filter_using_list(row, filterArray):
|
||||
return [col for (take, col) in zip(filterArray, row) if take]
|
||||
|
||||
if hideEmpty:
|
||||
if hide_empty:
|
||||
max_lens = get_max_lens(data)
|
||||
header_row = filter_using_list(header_row, max_lens)
|
||||
data = [filter_using_list(row, max_lens) for row in data]
|
||||
|
||||
table = [header_row] + data
|
||||
max_lens = get_max_lens(table)
|
||||
extraGap += 1
|
||||
extra_gap += 1
|
||||
if delim:
|
||||
table = [header_row] + [[delim * (ml + extraGap) for ml in max_lens]] + data
|
||||
max_lens[-1] = 0
|
||||
table = [header_row, [delim * (ml + extra_gap) for ml in max_lens]] + data
|
||||
table[1][-1] = table[1][-1][:-extra_gap] # Remove extra_gap from end of delimiter
|
||||
for row in table:
|
||||
for pos, text in enumerate(map(str, row)):
|
||||
row[pos] = text + (' ' * (max_lens[pos] - width(text) + extraGap))
|
||||
ret = '\n'.join(''.join(row) for row in table)
|
||||
if '\t' in text:
|
||||
row[pos] = text.replace('\t', ' ' * (max_lens[pos] - width(text))) + ' ' * extra_gap
|
||||
else:
|
||||
row[pos] = text + ' ' * (max_lens[pos] - width(text) + extra_gap)
|
||||
ret = '\n'.join(''.join(row).rstrip() for row in table)
|
||||
return ret
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user