Skip to content
Snippets Groups Projects
Commit 1dff502f authored by jkerdreu's avatar jkerdreu
Browse files

Finished the metadb API

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@1878 b32b6428-25c9-4566-ad07-03861ab6144f
parent 111ac3e2
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
from xaal.lib import Engine,Device,tools from xaal.lib import Engine,Device,tools
import platform import platform
import copy import copy
import atexit
PACKAGE_NAME = "xaal.metadb" PACKAGE_NAME = "xaal.metadb"
logger = tools.get_logger(PACKAGE_NAME,'DEBUG') logger = tools.get_logger(PACKAGE_NAME,'DEBUG')
...@@ -13,6 +14,7 @@ class MetaDB(object): ...@@ -13,6 +14,7 @@ class MetaDB(object):
self.cfg = tools.load_cfg_or_die(PACKAGE_NAME) self.cfg = tools.load_cfg_or_die(PACKAGE_NAME)
self.setup() self.setup()
self.dirty = False self.dirty = False
atexit.register(self.periodic_save)
def setup(self): def setup(self):
...@@ -29,7 +31,10 @@ class MetaDB(object): ...@@ -29,7 +31,10 @@ class MetaDB(object):
dev.add_method('getKeysValues',self.get_keys_values) dev.add_method('getKeysValues',self.get_keys_values)
dev.add_method('getValue', self.get_value) dev.add_method('getValue', self.get_value)
dev.add_method('updateKeysValues', self.update_keys_values) dev.add_method('updateKeysValues', self.update_keys_values)
dev.add_method('addKeysValues', self.add_keys_values)
self.dev = dev
self.engine.add_device(dev) self.engine.add_device(dev)
self.engine.add_timer(self.periodic_save,60) self.engine.add_timer(self.periodic_save,60)
...@@ -93,24 +98,55 @@ class MetaDB(object): ...@@ -93,24 +98,55 @@ class MetaDB(object):
def update_keys_values(self,_device,_map): def update_keys_values(self,_device,_map):
dev = self.get_device(_device) dev = self.get_device(_device)
updated = {}
if dev: if dev:
dev.update(_map) # if _map is empty, remove the device
if _map == None:
self.cfg['devices'].pop(_device)
self.dirty = True
return
# loop throught the map
for k in _map:
# remove item if empty
if _map[k] == None:
dev.pop(k)
self.dirty = True
else:
dev.update({k:_map[k]})
updated.update({k:_map[k]})
self.dirty = True
else: else:
self.cfg['devices'].update({_device:_map}) self.cfg['devices'][_device]=_map
self.dirty = True updated = _map
self.dirty = True
if len(updated):
self.engine.send_attributes_change(self.dev,{'device':_device,'map':updated})
def add_keys_values(self,_device,_map):
dev = self.get_device(_device)
updated = {}
if dev:
for k in _map:
if k not in dev.keys():
dev.update({k:_map[k]})
updated.update({k:_map[k]})
self.dirty = True
else:
self.cfg['devices'][_device]=_map
updated = _map
self.dirty = True
if len(updated):
self.engine.send_attributes_change(self.dev,{'device':_device,'map':updated})
def periodic_save(self): def periodic_save(self):
if self.dirty: if self.dirty:
logger.info("Saving configuration file") logger.info("Saving configuration file")
self.commit() self.cfg.write()
self.dirty = False self.dirty = False
def commit(self):
self.cfg.write()
def run(): def run():
eng = Engine() eng = Engine()
mdb = MetaDB(eng) mdb = MetaDB(eng)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment