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:
parent
28e72fd53e
commit
a547ddbbba
nilmdb/server
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue
Block a user