in r8s/r8s_group/__init__.py [0:0]
def process_table_view(self, status, response_meta):
response = PrettyTable()
if status == ERROR_STATUS:
response.field_names = [R8S_STATUS,
CLOUD_ADMIN_CODE,
R8S_MESSAGE]
response._max_width = {R8S_STATUS: 10,
CLOUD_ADMIN_CODE: 5,
R8S_MESSAGE: 70}
error_type, error_code, message = self.unpack_error_result_values(
response_meta=response_meta)
response.add_row([status, error_code, message])
response = response.__str__()
return response
elif status == SUCCESS_STATUS:
success_code, warnings, message, items = \
self.unpack_success_result_values(
response_meta=response_meta)
if message:
response.field_names = [R8S_STATUS,
CLOUD_ADMIN_CODE,
R8S_RESPONSE]
response._max_width = {R8S_STATUS: 10,
CLOUD_ADMIN_CODE: 5,
R8S_RESPONSE: 70}
response.add_row([status, success_code, message])
elif items:
all_values = {}
uniq_table_headers = []
width_table_columns = {}
for each_item in 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}
try:
if MAX_COLUMNS_WIDTH * len(uniq_table_headers) > \
os.get_terminal_size().columns and \
input(CONFIRMATION_MESSAGE).lower().strip() \
in POSITIVE_ANSWERS:
return self.process_json_view(status, response_meta)
except Exception:
pass
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 = str(response)
if warnings:
response += self._prettify_warnings(warnings)
return response