def process_table_view()

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