From 16fb1a334f90abd1651d1d6a03f4be061bdd51e1 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Mon, 14 Jan 2008 14:50:44 -0500
Subject: [PATCH] Add "table" command to logtool. Fix stringification of empty
 DataTable.

---
 bin/logtool      | 30 +++++++++++++-----------------
 src/datatable.py | 14 ++++++++++----
 2 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/bin/logtool b/bin/logtool
index 780fdd4..7b66471 100755
--- a/bin/logtool
+++ b/bin/logtool
@@ -10,7 +10,9 @@ FILE is a log saved from a code run. COMMANDS may be one of the
 following:
 "list" to list the available variables,
 "plot expr_x,expr_y" to plot a graph,
-"datafile outfile expr_x,expr_y" to write out a data file."""
+"datafile outfile expr_x,expr_y" to write out a data file.
+"table variable" to print the full data table for a time series variable.
+"""
     parser = OptionParser(usage="%prog FILE COMMANDS FILE COMMANDS...",
             description=description)
 
@@ -40,8 +42,8 @@ following:
     did_plot = False
 
     while args:
-        if args[0] == "list":
-            args.pop(0)
+        cmd = args.pop(0)
+        if cmd == "list":
             print "Time series"
             print "-----------"
 
@@ -63,11 +65,8 @@ following:
 
             for key, value in items:
                 print "%s\t%s" % (key.ljust(col0_len), str(value))
-        elif args[0] == "plot":
-            args.pop(0)
-
-            expr_x, expr_y = args[0].split(",")
-            args.pop(0)
+        elif cmd == "plot":
+            expr_x, expr_y = args.pop(0).split(",")
 
             from pylab import xlabel, ylabel, plot
             (data_x, descr_x, unit_x), (data_y, descr_y, unit_y) = \
@@ -92,18 +91,15 @@ following:
             plot(data_x, data_y, hold=True, **kwargs)
 
             did_plot = True
-        elif args[0] == "datafile":
-            args.pop(0)
-
-            expr_x, expr_y = args[0].split(",")
-            args.pop(0)
+        elif cmd == "datafile":
+            expr_x, expr_y = args.pop(0).split(",")
 
-            logmgr.write_datafile(args[0], expr_x, expr_y)
-            args.pop(0)
+            logmgr.write_datafile(args.pop(0), expr_x, expr_y)
+        elif cmd == "table":
+            print logmgr.quantity_data[args.pop(0)].table
         else:
             # not a known command, interpret as file name
-            logmgr.load(args[0])
-            args.pop(0)
+            logmgr.load(cmd)
 
     if did_plot:
         from pylab import show, title, legend
diff --git a/src/datatable.py b/src/datatable.py
index d381743..02bd1ae 100644
--- a/src/datatable.py
+++ b/src/datatable.py
@@ -20,6 +20,9 @@ class DataTable:
         if len(self.column_indices) != len(self.column_names):
             raise RuntimeError, "non-unique column names encountered"
 
+    def __bool__(self):
+        return bool(self.data)
+
     def __len__(self):
         return len(self.data)
 
@@ -28,10 +31,13 @@ class DataTable:
 
     def __str__(self):
         """Return a pretty-printed version of the table."""
-        col_widths = [
-                max(len(self.column_names[i]), 
-                    max(len(str(row[i])) for row in self.data))
-                for i in range(len(self.column_names))]
+
+        def col_width(i):
+            width = len(self.column_names[i])
+            if self:
+                width = max(width, max(len(str(row[i])) for row in self.data))
+            return width
+        col_widths = [col_width(i) for i in range(len(self.column_names))]
 
         def format_row(row):
             return "|".join([str(cell).ljust(col_width)
-- 
GitLab