Exemple #1
0
        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
Exemple #2
0
 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
Exemple #3
0
        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()
Exemple #4
0
        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()
Exemple #5
0
 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()
Exemple #6
0
 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()