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

looking for bytes in body.

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2319 b32b6428-25c9-4566-ad07-03861ab6144f
parent 1512c02b
No related branches found
No related tags found
No related merge requests found
......@@ -43,7 +43,7 @@ def setup_xaal():
cfg['config']['db_server'] = ''
cfg.write()
dev = Device("hmi.basic")
dev.address = tools.parse_uuid(cfg['config']['addr'])
dev.address = tools.str_to_uuid(cfg['config']['addr'])
dev.vendor_id = "IHSEV"
dev.product_id = "REST API"
dev.version = 0.1
......@@ -66,6 +66,13 @@ def xaal_loop(engine):
def json_encode(obj):
return rapidjson.dumps(obj,uuid_mode=rapidjson.UM_CANONICAL,indent=4)
def search_device(addr):
dev = None
uid = tools.str_to_uuid(addr)
if uid:
dev=monitor.devices.get_with_addr(uid)
return dev
@get('/static/<filename:path>')
def send_static(filename):
root = os.path.dirname(__file__)
......@@ -90,9 +97,8 @@ def list_devices():
@get('/devices/<addr>')
def get_device(addr):
""" Return the full description of a device """
uid = tools.parse_uuid(addr)
dev=monitor.devices.get_with_addr(uid)
response.headers['Content-Type'] = 'application/json'
dev = search_device(addr)
if dev:
res = {'address':dev.address,'devtype':dev.devtype}
res.update({'attributes':dev.attributes})
......@@ -109,9 +115,9 @@ def send_request(addr,action):
body = {}
for k in request.query.keys():
body.update({k:request.query[k]})
uid = tools.parse_uuid(addr)
dev=monitor.devices.get_with_addr(uid)
response.headers['Content-Type'] = 'application/json'
dev = search_device(addr)
if dev:
monitor.engine.send_request(monitor.dev,[uid,],action,body)
res = {'address':dev.address}
......
......@@ -83,7 +83,7 @@ class InfoDumper:
def main():
if len(sys.argv) == 2:
addr = tools.parse_uuid(sys.argv[1])
addr = tools.str_to_uuid(sys.argv[1])
if addr:
t0 = time.time()
eng = Engine()
......
......@@ -76,7 +76,7 @@ class GW(gevent.Greenlet):
cfg = self.cfg['devices'][sid]
model_old = cfg.get('model',None)
tmp = cfg.get('base_addr',None)
base_addr = tools.parse_uuid(tmp)
base_addr = tools.str_to_uuid(tmp)
dev = None
if model != model_old:
logger.warn("Device %s wrong model" % sid)
......
......@@ -43,7 +43,7 @@ if __name__ =='__main__':
try:
addr = None
if len(sys.argv) > 1:
addr = tools.parse_uuid(sys.argv[-1])
addr = tools.str_to_uuid(sys.argv[-1])
if not addr:
print("Wrong address")
main(addr)
......
......@@ -56,7 +56,7 @@ if __name__ == '__main__':
try:
addr = None
if len(sys.argv) > 1:
addr = tools.parse_uuid(sys.argv[-1])
addr = tools.str_to_uuid(sys.argv[-1])
if not addr:
print("Wrong address")
main(addr)
......
......@@ -35,6 +35,7 @@ import base64
import struct
import sys
import codecs
import copy
import logging
logger = logging.getLogger(__name__)
......@@ -71,8 +72,14 @@ class MessageFactory(object):
buf.append(msg.devtype)
buf.append(msg.msgtype.value)
buf.append(msg.action)
if msg.body:
buf.append(msg.body)
# for body, we need to marshall for special object, ie UUIDs
body = copy.copy(msg.body)
if body:
for k in body:
if hasattr(body[k],'bytes'):
body.update({k:body[k].bytes})
buf.append(body)
clear = cbor.dumps(buf)
# Additionnal Data == cbor serialization of the targets array
ad = result[3]
......
......@@ -61,7 +61,7 @@ def new_cfg(app_name):
filename = get_cfg_filename(app_name)
cfg = ConfigObj(filename,indent_type=' ')
cfg['config'] = {}
cfg['config']['addr']=str(get_random_uuid())
cfg['config']['addr']=get_random_uuid().str
return cfg
def get_random_uuid():
......@@ -70,20 +70,27 @@ def get_random_uuid():
def get_random_base_uuid():
return UUID.random_base()
def parse_uuid(value):
def str_to_uuid(val):
""" return an xAAL address for a given string"""
try:
addr = UUID(value)
return addr
return UUID(val)
except ValueError:
pass
return None
def is_valid_address(val):
def bytes_to_uuid(val):
try:
return UUID(bytes=val)
except ValueError:
return None
def is_valid_uuid(val):
if type(val) == UUID:
return True
return False
def is_valid_address(val):
return is_valid_uuid(val)
def is_valid_devtype(val):
if re.match(XAAL_DEVTYPE_PATTERN,val):
return True
......
......@@ -44,7 +44,6 @@ class Device:
def __init__(self, addr, devtype):
self.address = addr
self.short_address = tools.reduce_addr(addr)
self.str_address = str(addr)
self.devtype = devtype
# device cache
self.attributes = TimedDict(refresh_rate=REFRESH_RATE)
......@@ -60,6 +59,9 @@ class Device:
return self.attributes.update(data)
def update_description(self, data):
group_id = data.get('groupId',None)
if group_id:
data['groupId'] = tools.bytes_to_uuid(group_id)
return self.description.update(data)
def update_db(self,data):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment