From bd7bdb2eb8a3c2e5cd722a3611648b4964f61f81 Mon Sep 17 00:00:00 2001 From: Jim Paris Date: Tue, 30 Jul 2013 15:31:51 -0400 Subject: [PATCH] Add --optimize option to nilmtool intervals --- nilmdb/cmdline/intervals.py | 16 +++++++++++++--- tests/test_cmdline.py | 12 ++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/nilmdb/cmdline/intervals.py b/nilmdb/cmdline/intervals.py index 302c46b..ff46fa1 100644 --- a/nilmdb/cmdline/intervals.py +++ b/nilmdb/cmdline/intervals.py @@ -1,5 +1,6 @@ from nilmdb.utils.printf import * import nilmdb.utils.time +from nilmdb.utils.interval import Interval import fnmatch import argparse @@ -42,6 +43,8 @@ def setup(self, sub): group = cmd.add_argument_group("Misc options") group.add_argument("-T", "--timestamp-raw", action="store_true", help="Show raw timestamps when printing times") + group.add_argument("-o", "--optimize", action="store_true", + help="Optimize (merge adjacent) intervals") return cmd @@ -58,9 +61,16 @@ def cmd_intervals(self): time_string = nilmdb.utils.time.timestamp_to_human try: - for (start, end) in self.client.stream_intervals( - self.args.path, self.args.start, self.args.end, self.args.diff): - printf("[ %s -> %s ]\n", time_string(start), time_string(end)) + intervals = ( Interval(start, end) for (start, end) in + self.client.stream_intervals(self.args.path, + self.args.start, + self.args.end, + self.args.diff) ) + if self.args.optimize: + intervals = nilmdb.utils.interval.optimize(intervals) + for i in intervals: + printf("[ %s -> %s ]\n", time_string(i.start), time_string(i.end)) + except nilmdb.client.ClientError as e: self.die("error listing intervals: %s", str(e)) diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py index acdb253..4bacde0 100644 --- a/tests/test_cmdline.py +++ b/tests/test_cmdline.py @@ -1011,6 +1011,18 @@ class TestCmdline(object): self.match("[ Thu, 01 Jan 2004 00:00:00.000000 +0000 -" "> Sat, 01 Jan 2005 00:00:00.000000 +0000 ]\n") + # optimize + self.ok("insert -s 01-01-2002 -e 01-01-2004 /diff/1 /dev/null") + self.ok("intervals /diff/1") + self.match("[ Sat, 01 Jan 2000 00:00:00.000000 +0000 -" + "> Thu, 01 Jan 2004 00:00:00.000000 +0000 ]\n" + "[ Thu, 01 Jan 2004 00:00:00.000000 +0000 -" + "> Sat, 01 Jan 2005 00:00:00.000000 +0000 ]\n") + self.ok("intervals /diff/1 --optimize") + self.ok("intervals /diff/1 -o") + self.match("[ Sat, 01 Jan 2000 00:00:00.000000 +0000 -" + "> Sat, 01 Jan 2005 00:00:00.000000 +0000 ]\n") + self.ok("destroy -R /diff/1") self.ok("destroy -R /diff/2")