ebcli/display/specialtables.py (65 lines of code) (raw):
# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
from copy import copy
from ebcli.core import io
from ebcli.display.table import Table, justify_and_trim
from ebcli.display import term
"""
Special table for request summary
"""
class RequestTable(Table):
def __init__(self, name, columns=None, screen=None):
super(RequestTable, self).__init__(name, columns, screen)
self.header_size = 3
def draw_header_row(self):
super(RequestTable, self).draw_header_row()
# now draw overall summary
full_data = self.screen.data
totals = full_data.get('environment')
totals['InstanceId'] = ' Overall'
# We can just draw a single row, but use environment data
row_data = self.get_row_data(totals)
term.echo_line(io.bold(' '.join(row_data)))
class StatusTable(RequestTable):
def __init__(self, name, columns=None, screen=None):
super(StatusTable, self).__init__(name, columns, screen)
self.header_size = 3
def draw(self, rows, table_data):
data = self.expand_rows(table_data)
super(StatusTable, self).draw(rows, data)
CAUSE_SCROLL_FACTOR = 5
def get_column_data(self, data, column):
if data.get('Copy', False) and column.key != 'Cause':
d = ' '
else:
d = str(data.get(column.key, '-'))
if (
column.key == 'Cause'
and self.screen.horizontal_offset > self.screen.max_columns
):
cause_scroll = (
self.screen.horizontal_offset
- self.screen.max_columns
) * StatusTable.CAUSE_SCROLL_FACTOR
d = d[cause_scroll:]
c_data = justify_and_trim(
d,
column.size or column.fit_size,
column.justify)
if 'Overall' in data.get('InstanceId'):
c_data = io.bold(c_data)
return c_data
def expand_rows(self, data):
new_data = list()
total = copy(self.screen.data['environment'])
total['InstanceId'] = ' Overall'
causes = total.get('Causes', [])
for i in range(1, len(causes)):
c = causes[i]
total_copy = copy(total)
total_copy['Cause'] = c
total_copy['Copy'] = True
new_data.append(total_copy)
for instance in data:
new_data.append(instance)
causes = instance.get('Causes', [])
for i in range(1, len(causes)):
c = causes[i]
instance_copy = copy(instance)
instance_copy['Cause'] = c
instance_copy['Copy'] = True
new_data.append(instance_copy)
return new_data