Change table.get_timestamp to table.__getitem__

This lets us use simple indexing to get timestamps from the table,
which allows us to use 'bisect' directly without needing a proxy class.
This commit is contained in:
Jim Paris 2013-03-15 17:59:07 -04:00
parent 28e72fd53e
commit a547ddbbba
2 changed files with 4 additions and 12 deletions

View File

@ -478,7 +478,7 @@ class Table(object):
row += count
return "".join(ret)
def get_timestamp(self, row):
def __getitem__(self, row):
"""Extract timestamps from a row, with table[n] notation."""
if (row is None or row < 0 or row >= self.nrows):
raise IndexError("Index out of range")
@ -575,11 +575,3 @@ class Table(object):
self._remove_rows(subdir, filename, row_offset, row_offset + count)
remaining -= count
row += count
class TimestampOnlyTable(object):
"""Helper that lets us pass a Tables object into bisect, by
returning only the timestamp when a particular row is requested."""
def __init__(self, table):
self.table = table
def __getitem__(self, index):
return self.table.get_timestamp(index)

View File

@ -472,7 +472,7 @@ class NilmDB(object):
# Optimization for the common case where an interval wasn't truncated
if dbinterval.start == dbinterval.db_start:
return dbinterval.db_startpos
return bisect.bisect_left(bulkdata.TimestampOnlyTable(table),
return bisect.bisect_left(table,
dbinterval.start,
dbinterval.db_startpos,
dbinterval.db_endpos)
@ -491,7 +491,7 @@ class NilmDB(object):
# want to include the given timestamp in the results. This is
# so a queries like 1:00 -> 2:00 and 2:00 -> 3:00 return
# non-overlapping data.
return bisect.bisect_left(bulkdata.TimestampOnlyTable(table),
return bisect.bisect_left(table,
dbinterval.end,
dbinterval.db_startpos,
dbinterval.db_endpos)
@ -539,7 +539,7 @@ class NilmDB(object):
row_max = row_start + remaining
if row_max < row_end:
row_end = row_max
restart = table.get_timestamp(row_max)
restart = table[row_max]
# Gather these results up
result.append(table.get_data(row_start, row_end))