mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00: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
	 pukkandan
					pukkandan