def _getContext(self): context = {} try: context['mac'] = str(web.input().mac.rstrip('/')) except AttributeError: context['mac'] = None try: context['app'] = str(web.input().app.rstrip('/')) except AttributeError: context['app'] = None return context
def postData(self, receivedData, subResource, username): dld = DustLinkData.DustLinkData() if subResource == ['send']: mac = DustLinkData.DustLinkData.stringToMac( str(web.input().mac.rstrip('/'))) appName = str(web.input().app.rstrip('/')) assert isinstance(receivedData, dict) assert len(receivedData.keys()) == 3 assert 'app' in receivedData.keys() del receivedData['app'] assert 'mac' in receivedData.keys() del receivedData['mac'] formData = json.loads(receivedData.keys()[0]) formData = DustWeb.simplifyWebInputFormat(formData) receivedKeys = formData.keys() receivedKeys.sort() fieldNames = dld.getAppFields( appName, DustLinkData.DustLinkData.APP_DIRECTION_TOMOTE, username=username, )['fieldNames'] fieldNames.sort() assert receivedKeys == fieldNames fields = {} for fieldName in fieldNames: fields[fieldName] = formData[fieldName] dispatcher.send(signal='fieldsToMesh_{0}'.format(appName), data={ 'mac': mac, 'fields': fields, }) elif subResource == ['clear']: mac = DustLinkData.DustLinkData.stringToMac( str(web.input().mac.rstrip('/'))) appname = str(web.input().app.rstrip('/')) assert isinstance(receivedData, dict) assert len(receivedData.keys()) == 3 assert 'app' in receivedData.keys() del receivedData['app'] assert 'mac' in receivedData.keys() del receivedData['mac'] formData = json.loads(receivedData.keys()[0]) formData = DustWeb.simplifyWebInputFormat(formData) receivedKeys = formData.keys() assert receivedKeys == ['command'] if formData['command'] == 'clear': dld.deleteData( mac=mac, appname=appname, username=username, ) else: raise web.notfound()
def getData(self, subResource, username): dld = DustLinkData.DustLinkData() mac = DustLinkData.DustLinkData.stringToMac( str(web.input().mac.rstrip('/'))) appName = str(web.input().app.rstrip('/')) if subResource == ['description']: # retrieve the description of that application try: appDescription = dld.getAppDescription( appName, username=username, ) except ValueError: return {'rawHtml': ''} # happens when no description else: return {'rawHtml': appDescription} elif subResource == ['received']: # retrieve the last data received from the mac/application rawData = dld.getLastData(mac, appName, username=username) if rawData: # assume no data received fieldNames = [] timelineData = [] # get field Names fieldNames = rawData[rawData.keys()[0]].keys() # fill in data timestamps = rawData.keys() timestamps.sort() for t in timestamps: thisData = {} thisData['timestamp'] = int(t * 1000) for f in fieldNames: thisData[f] = rawData[t][f] timelineData.append(thisData) return { 'metadata': { 'axis': tuple(fieldNames), }, 'datapoints': timelineData, } else: return { 'metadata': { 'axis': ['nodata'], }, 'datapoints': [ { "timestamp": 0, "nodata": 0 }, ], } elif subResource == ['clear']: return [{ 'name': 'command', 'value': '', 'type': 'text', }] elif subResource == ['send']: return [{ 'name': fieldname, 'value': '', 'type': 'text', } for fieldname in dld.getAppFields( appName, DustLinkData.DustLinkData.APP_DIRECTION_TOMOTE, username=username, )['fieldNames']] else: raise web.notfound()
def postData(self,receivedData,subResource,username): dld = DustLinkData.DustLinkData() if subResource==['send']: mac = DustLinkData.DustLinkData.stringToMac(str(web.input().mac.rstrip('/'))) appName = str(web.input().app.rstrip('/')) assert isinstance(receivedData,dict) assert len(receivedData.keys())==3 assert 'app' in receivedData.keys() del receivedData['app'] assert 'mac' in receivedData.keys() del receivedData['mac'] formData = json.loads(receivedData.keys()[0]) formData = DustWeb.simplifyWebInputFormat(formData) receivedKeys = formData.keys() receivedKeys.sort() fieldNames = dld.getAppFields( appName, DustLinkData.DustLinkData.APP_DIRECTION_TOMOTE, username=username, )['fieldNames'] fieldNames.sort() assert receivedKeys == fieldNames fields = {} for fieldName in fieldNames: fields[fieldName] = formData[fieldName] dispatcher.send( signal = 'fieldsToMesh_{0}'.format(appName), data = { 'mac': mac, 'fields': fields, } ) elif subResource==['clear']: mac = DustLinkData.DustLinkData.stringToMac(str(web.input().mac.rstrip('/'))) appname = str(web.input().app.rstrip('/')) assert isinstance(receivedData,dict) assert len(receivedData.keys())==3 assert 'app' in receivedData.keys() del receivedData['app'] assert 'mac' in receivedData.keys() del receivedData['mac'] formData = json.loads(receivedData.keys()[0]) formData = DustWeb.simplifyWebInputFormat(formData) receivedKeys = formData.keys() assert receivedKeys == ['command'] if formData['command']=='clear': dld.deleteData( mac = mac, appname = appname, username = username, ) else: raise web.notfound()
def getData(self,subResource,username): dld = DustLinkData.DustLinkData() mac = DustLinkData.DustLinkData.stringToMac(str(web.input().mac.rstrip('/'))) appName = str(web.input().app.rstrip('/')) if subResource==['description']: # retrieve the description of that application try: appDescription = dld.getAppDescription( appName, username=username, ) except ValueError: return {'rawHtml':''} # happens when no description else: return {'rawHtml':appDescription} elif subResource==['received']: # retrieve the last data received from the mac/application rawData = dld.getLastData(mac,appName,username=username) if rawData: # assume no data received fieldNames = [] timelineData = [] # get field Names fieldNames = rawData[rawData.keys()[0]].keys() # fill in data timestamps = rawData.keys() timestamps.sort() for t in timestamps: thisData = {} thisData['timestamp'] = int(t*1000) for f in fieldNames: thisData[f] = rawData[t][f] timelineData.append(thisData) return { 'metadata': { 'axis': tuple(fieldNames), }, 'datapoints': timelineData, } else: return { 'metadata': { 'axis': ['nodata'], }, 'datapoints': [ {"timestamp": 0, "nodata": 0}, ], } elif subResource==['clear']: return [ { 'name': 'command', 'value': '', 'type': 'text', } ] elif subResource==['send']: return [ { 'name': fieldname, 'value': '', 'type': 'text', } for fieldname in dld.getAppFields( appName, DustLinkData.DustLinkData.APP_DIRECTION_TOMOTE, username=username, )['fieldNames'] ] else: raise web.notfound()