Skip to content
Snippets Groups Projects
Commit 18d95e9f authored by jkerdreu's avatar jkerdreu
Browse files

finishing implementation, still need to add some checks

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/fork@1607 b32b6428-25c9-4566-ad07-03861ab6144f
parent efdaa530
No related branches found
No related tags found
No related merge requests found
......@@ -51,9 +51,24 @@ class QueryDB:
mf = self.eng.msg_factory
body = {'key':'location'}
"""
body = {'key':'foobar','value':12}
body = None
msg = mf.build_msg(self.dev,[], 'request','getDevices',body)
self.eng.queue_tx(msg)
"""
"""
body = {'device': '2f31c922-01b2-4097-bfae-5753dde2cd41','key':'location'}
msg = mf.build_msg(self.dev,[], 'request','getValue',body)
self.eng.queue_tx(msg)
"""
_map = {'nickname' : 'goo','size':'small'}
body = {'device': 'ccc44227-d4fc-46eb-8578-159e2c47d000','map':_map}
msg = mf.build_msg(self.dev,[], 'request','updateKeysValues',body)
self.eng.queue_tx(msg)
term('cyan')
print("** Device : [%s]" % self.target)
......
from xaal.lib import Engine,Device,tools
import platform
import copy
PACKAGE_NAME = "xaal.metadb"
logger = tools.get_logger(PACKAGE_NAME,'DEBUG')
......@@ -11,6 +12,8 @@ class MetaDB(object):
self.engine = engine
self.cfg = tools.load_cfg_or_die(PACKAGE_NAME)
self.setup()
self.dirty = False
def setup(self):
addr = self.cfg['config']['addr']
......@@ -23,16 +26,91 @@ class MetaDB(object):
dev.info = "%s@%s" % (PACKAGE_NAME,platform.node())
dev.add_method('getDevices',self.get_devices)
dev.add_method('getKeysValues',self.get_keys_values)
dev.add_method('getValue', self.get_value)
dev.add_method('updateKeysValues', self.update_keys_values)
self.engine.add_device(dev)
self.engine.add_timer(self.periodic_save,60)
def get_devices(self,key=None,value=None):
def get_devices(self,_key=None,_value=None):
devices = self.cfg['devices']
result = devices.keys()
import pdb;pdb.set_trace()
# search for a given key=value and break
if _key and _value:
value = str(_value)
temp = []
for dev in result:
if _key in devices[dev].keys():
if devices[dev][_key] == value:
temp.append(dev)
return {'devices' : temp}
# filter key
if _key:
for dev in copy.copy(result):
#print("%s %s %s" % (dev,key,devices[dev].keys()))
if _key not in devices[dev].keys():
result.remove(dev)
# filter value
if _value:
value = str(_value)
for dev in copy.copy(result):
print("%s %s %s" % (dev,value,devices[dev].values()))
if value not in devices[dev].values():
result.remove(dev)
return {'devices' : result}
def get_device(self,addr):
devices = self.cfg['devices']
try:
return devices[addr]
except KeyError:
return None
def get_keys_values(self,_device):
dev = self.get_device(_device)
if dev:
return dev
logger.info('Unknown device %s' % _device)
def get_value(self,_device,_key):
dev = self.get_device(_device)
if not dev:
logger.info('Unknown device %s' % _device)
return
try:
return {'value':dev[_key]}
except KeyError:
logger.info('Unknown key %s for %s' % (_key,_device))
def update_keys_values(self,_device,_map):
dev = self.get_device(_device)
if dev:
dev.update(_map)
else:
self.cfg['devices'].update({_device:_map})
self.dirty = True
def periodic_save(self):
if self.dirty:
logger.info("Saving configuration file")
self.commit()
self.dirty = False
def commit(self):
self.cfg.write()
def run():
eng = Engine()
mdb = MetaDB(eng)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment