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

- Transform xaal.lib.binding.UUID to uuid.UUID to comply RapidJSON specs

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2818 b32b6428-25c9-4566-ad07-03861ab6144f
parent ef1af282
No related branches found
No related tags found
No related merge requests found
import rapidjson
from xaal.lib import bindings
"""
Since version 0.7 xAAL msg are CBOR encoded, this means w/ addresses now
......@@ -9,8 +10,42 @@ to sio package.
def dumps(*args,**kwargs):
obj = args[0]
#import pdb;pdb.set_trace()
return rapidjson.dumps(obj,uuid_mode=rapidjson.UM_CANONICAL)
try:
r = rapidjson.dumps(obj,uuid_mode=rapidjson.UM_CANONICAL)
except TypeError:
import pdb;pdb.set_trace()
return r
def cleanup(obj):
"""
recursive walk a object to search for un-wanted CBOR tags.
Transform this tag in string format, this can be UUID, URL..
Should be Ok, with list, dicts..
Warning: This operate in-place changes.
Warning: This won't work for tags in dict keys.
"""
if isinstance(obj,list):
for i in range(0,len(obj)):
obj[i] = cleanup(obj[i])
return obj
if isinstance(obj,dict):
for k in obj.keys():
obj.update({k:cleanup(obj[k])})
return obj
if type(obj) in bindings.classes:
r = obj.get()
return r
else:
return obj
def prepare_cbor(obj):
import copy
r = copy.deepcopy(obj)
return cleanup(r)
loads = rapidjson.loads
......@@ -15,7 +15,7 @@ def remote_addr(sid):
return env['REMOTE_ADDR']
def broadcast(event,sio_msg):
socket.emit(event,sio_msg)
socket.emit(event,json.prepare_cbor(sio_msg))
@socket.on('send_request')
def send_xaal_request(sid,addr,action,body):
......@@ -25,7 +25,7 @@ def send_xaal_request(sid,addr,action,body):
def query_attributes(sid,addr):
dev = xaal_core.get_device(addr)
if dev:
msg = { 'address': dev.address.get(),'attributes':dev.attributes}
msg = { 'address': dev.address.get(),'attributes':json.prepare_cbor(dev.attributes)}
socket.emit('event_attributeChanges',msg,room=sid)
@socket.on('refresh_attributes')
......@@ -34,7 +34,7 @@ def refresh_attributes(sid,addrs):
for addr in addrs:
dev = xaal_core.get_device(addr)
if dev:
msg = { 'address': dev.address.get(),'attributes':dev.attributes}
msg = { 'address': dev.address.get(),'attributes':json.prepare_cbor(dev.attributes)}
socket.emit('event_attributeChanges',msg,room=sid)
else:
print("Unknow device: %s" % addr)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment