in awscli/table.py [0:0]
def calculate_column_widths(self, padding=0, max_width=None):
# postcondition: sum(widths) == max_width
unscaled_widths = [w + padding for w in self._max_widths]
if max_width is None:
return unscaled_widths
if not unscaled_widths:
return unscaled_widths
else:
# Compute scale factor for max_width.
scale_factor = max_width / float(sum(unscaled_widths))
scaled = [int(round(scale_factor * w)) for w in unscaled_widths]
# Once we've scaled the columns, we may be slightly over/under
# the amount we need so we have to adjust the columns.
off_by = sum(scaled) - max_width
while off_by != 0:
iter_order = range(len(scaled))
if off_by < 0:
iter_order = reversed(iter_order)
for i in iter_order:
if off_by > 0:
scaled[i] -= 1
off_by -= 1
else:
scaled[i] += 1
off_by += 1
if off_by == 0:
break
return scaled