summaryrefslogtreecommitdiff
path: root/cloudinit/simpletable.py
diff options
context:
space:
mode:
authorChad Smith <chad.smith@canonical.com>2017-10-02 13:17:39 -0600
committerChad Smith <chad.smith@canonical.com>2017-10-02 13:17:39 -0600
commitb3acdff390329c8091b880b490e1f27441a7a486 (patch)
treed2797646aff98a76887dcc80cc26c1479af71f8c /cloudinit/simpletable.py
parentf010594beb75e146091db47b7d72d1fc1d763e98 (diff)
downloadcloud-init-git-b3acdff390329c8091b880b490e1f27441a7a486.tar.gz
Add missing simpletable and simpletable tests for failed merge
Diffstat (limited to 'cloudinit/simpletable.py')
-rw-r--r--cloudinit/simpletable.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/cloudinit/simpletable.py b/cloudinit/simpletable.py
new file mode 100644
index 00000000..90603228
--- /dev/null
+++ b/cloudinit/simpletable.py
@@ -0,0 +1,62 @@
+# Copyright (C) 2017 Amazon.com, Inc. or its affiliates
+#
+# Author: Ethan Faust <efaust@amazon.com>
+# Author: Andrew Jorgensen <ajorgens@amazon.com>
+#
+# This file is part of cloud-init. See LICENSE file for license information.
+
+
+class SimpleTable(object):
+ """A minimal implementation of PrettyTable
+ for distribution with cloud-init.
+ """
+
+ def __init__(self, fields):
+ self.fields = fields
+ self.rows = []
+
+ # initialize list of 0s the same length
+ # as the number of fields
+ self.column_widths = [0] * len(self.fields)
+ self.update_column_widths(fields)
+
+ def update_column_widths(self, values):
+ for i, value in enumerate(values):
+ self.column_widths[i] = max(
+ len(value),
+ self.column_widths[i])
+
+ def add_row(self, values):
+ if len(values) > len(self.fields):
+ raise TypeError('too many values')
+ values = [str(value) for value in values]
+ self.rows.append(values)
+ self.update_column_widths(values)
+
+ def _hdiv(self):
+ """Returns a horizontal divider for the table."""
+ return '+' + '+'.join(
+ ['-' * (w + 2) for w in self.column_widths]) + '+'
+
+ def _row(self, row):
+ """Returns a formatted row."""
+ return '|' + '|'.join(
+ [col.center(self.column_widths[i] + 2)
+ for i, col in enumerate(row)]) + '|'
+
+ def __str__(self):
+ """Returns a string representation of the table with lines around.
+
+ +-----+-----+
+ | one | two |
+ +-----+-----+
+ | 1 | 2 |
+ | 01 | 10 |
+ +-----+-----+
+ """
+ lines = [self._hdiv(), self._row(self.fields), self._hdiv()]
+ lines += [self._row(r) for r in self.rows] + [self._hdiv()]
+ return '\n'.join(lines)
+
+ def get_string(self):
+ return repr(self)