summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorKevin Van Brunt <kmvanbrunt@gmail.com>2020-04-09 16:37:46 -0400
committerKevin Van Brunt <kmvanbrunt@gmail.com>2020-04-09 16:37:46 -0400
commitd815d2cd19a24bac89bd19416fb2b7cd0dadfe03 (patch)
tree2570d13b2561822911b000b36519be742ec89345 /examples
parent0d4be64b6ec76fcf5f87933293dbc7c134a32cf0 (diff)
downloadcmd2-git-d815d2cd19a24bac89bd19416fb2b7cd0dadfe03.tar.gz
Initial commit of table creation API
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/table_creation.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/examples/table_creation.py b/examples/table_creation.py
new file mode 100755
index 00000000..605c20d9
--- /dev/null
+++ b/examples/table_creation.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# coding=utf-8
+"""Examples of using the cmd2 table creation API"""
+import functools
+import sys
+from typing import Any, List
+
+from cmd2 import ansi
+from cmd2.table_creator import AlternatingTable, BorderedTable, Column, HorizontalAlignment, SimpleTable
+
+
+class DollarFormatter:
+ """Example class to show that any object type can be passed as data to TableCreator and converted to a string"""
+ def __init__(self, val: float) -> None:
+ self.val = val
+
+ def __str__(self) -> str:
+ """Returns the value in dollar currency form (e.g. $100.22)"""
+ return "${:,.2f}".format(self.val)
+
+
+# Text styles used in the data
+bold_yellow = functools.partial(ansi.style, fg=ansi.fg.bright_yellow, bold=True)
+blue = functools.partial(ansi.style, fg=ansi.fg.bright_blue)
+green = functools.partial(ansi.style, fg=ansi.fg.green)
+
+# Table Columns
+columns: List[Column] = list()
+columns.append(Column("Name", width=20))
+columns.append(Column("Address", width=38))
+columns.append(Column("Income", width=14,
+ header_horiz_align=HorizontalAlignment.RIGHT,
+ data_horiz_align=HorizontalAlignment.RIGHT))
+
+# Table data which demonstrates handling of wrapping and text styles
+data_list: List[List[Any]] = list()
+data_list.append(["Billy Smith",
+ "123 Sesame St.\n"
+ "Fake Town, USA 33445", DollarFormatter(100333.03)])
+data_list.append(["William Longfellow Marmaduke III",
+ "984 Really Long Street Name Which Will Wrap Nicely\n"
+ "Apt 22G\n"
+ "Pensacola, FL 32501", DollarFormatter(55135.22)])
+data_list.append(["James " + blue("Bluestone"),
+ bold_yellow("This address has line feeds,\n"
+ "text styles, and wrapping. ") + blue("Style is preserved across lines."),
+ DollarFormatter(300876.10)])
+data_list.append(["John Jones",
+ "9235 Highway 32\n"
+ + green("Greenville") + ", SC 29604",
+ DollarFormatter(82987.71)])
+
+
+def ansi_print(text):
+ """Wraps style_aware_write so style can be stripped if needed"""
+ ansi.style_aware_write(sys.stdout, text + '\n')
+
+
+def main():
+ # Default to terminal mode so redirecting to a file won't include the ANSI style sequences
+ ansi.allow_style = ansi.STYLE_TERMINAL
+
+ st = SimpleTable(columns)
+ table = st.generate_table(data_list)
+ ansi_print(table)
+
+ bt = BorderedTable(columns)
+ table = bt.generate_table(data_list)
+ ansi_print(table)
+
+ at = AlternatingTable(columns)
+ table = at.generate_table(data_list)
+ ansi_print(table)
+
+
+if __name__ == '__main__':
+ main()