summaryrefslogtreecommitdiff
path: root/ebus/datastore.py
diff options
context:
space:
mode:
Diffstat (limited to 'ebus/datastore.py')
-rw-r--r--ebus/datastore.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/ebus/datastore.py b/ebus/datastore.py
index 88dcdc9..930b4fb 100644
--- a/ebus/datastore.py
+++ b/ebus/datastore.py
@@ -40,8 +40,12 @@ class Datastore(object):
if not name in self.files:
path = os.path.join(self.basepath, name+".hdf")
print "open {0}".format(path)
- file = tables.openFile(path, "a", title = "eBus Datastore")
- self.files[name] = file
+ if os.path.exists(path):
+ self.files[name] = tables.openFile(path, "a", title = "eBus Datastore")
+ elif klass:
+ self.files[name] = tables.openFile(path, "w", title = "eBus Datastore")
+ else:
+ raise Exception("No such sensor {0}".format(name))
if not name in self.tables:
t = None
@@ -49,6 +53,7 @@ class Datastore(object):
t = self.files[name].getNode("/"+name)
except tables.NoSuchNodeError,e:
if not klass: raise e
+
t = self.files[name].createTable("/",
name,
klass,
@@ -56,17 +61,27 @@ class Datastore(object):
filters=tables.Filters(complevel=1),
createparents=True)
t.cols.timestamp.createCSIndex()
+ self.files[name].close()
+
+ self.files[name] = tables.openFile(path, "a", title = "eBus Datastore")
+ t = self.files[name].getNode("/"+name)
+
self.tables[name] = t
return self.tables[name]
def addValue(self, name, ts, value, klass,flush=False):
t = self.getTable(name, klass)
+ if klass != None:
+ assert klass.columns['value'].type == t.cols.value.type, "Type check failed"
+
with self.fileLock:
t.row['timestamp'] = ts
t.row['value'] = value
t.row.append()
- if flush: t.flush()
+ if flush:
+ t.flush()
+ t.flushRowsToIndex()
def addValueInt(self, name, ts, value): self.addValue(name, ts, value, ValueInt)
def addValueString(self, name, ts, value): self.addValue(name, ts, value, ValueString)