in modular_api/helpers/decorators.py [0:0]
def process_table_view(self, response_meta: CommandResponse
) -> PrettyTable:
response = PrettyTable()
warnings, message, items, table_title = \
self.unpack_success_result_values(
response_meta=response_meta)
if message:
response.field_names = [MODULAR_API_RESPONSE]
response._max_width = {MODULAR_API_RESPONSE: 70}
response.add_row([message])
elif table_title and items:
all_values = {}
uniq_table_headers = []
width_table_columns = {}
for each_item in response_meta.items:
if not isinstance(each_item, dict):
each_item = {'Result': each_item}
for table_key, table_value in each_item.items():
if all_values.get(table_key):
all_values[table_key].append(table_value)
else:
all_values[table_key] = [table_value]
uniq_table_headers.extend([
table_key for table_key in each_item.keys()
if table_key not in uniq_table_headers
])
if not width_table_columns.get(table_key) \
or width_table_columns.get(table_key) \
< len(str(table_value)):
width_table_columns[table_key] = len(str(table_value))
import itertools
response.field_names = uniq_table_headers
response._max_width = {
each: MAX_COLUMNS_WIDTH for each in uniq_table_headers
}
last_string_index = 0
# Fills with an empty content absent items attributes to
# align the table
table_rows = itertools.zip_longest(
*[j for i, j in all_values.items()], fillvalue='')
for lst in table_rows:
response.add_row(lst)
row_separator = ['-' * min(
max(width_table_columns[uniq_table_headers[i]],
len(str(uniq_table_headers[i]))),
30) for i in range(len(uniq_table_headers))]
response.add_row(row_separator)
last_string_index += 2
response.del_row(last_string_index - 1)
response = (table_title + os.linesep if table_title else str()
) + str(response)
if response_meta.warnings:
response += _prettify_warnings(response_meta.warnings)
return response