def process_table_view()

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