def response( userObj, data ): logger.info("Screening RESPONSE Request") for deviceKey in data.keys(): deviceObj = GardenModels.getDevice( identifier = deviceKey) if deviceObj == None: return False logger.debug( "DeviceObj: " + deviceObj.identifier ) # making sure device belongs to the user if deviceObj.user.identifier != userObj.identifier: logger.error( "Device Does Not Belong To User: "******"DataTypeObj: " + dataTypeObj.identifier ) #endfor #endfor return __retrieveResponse( data )
def __retrieveResponse( data ): returnData = {} for deviceKey in data.keys(): deviceObj = GardenModels.getDevice( identifier = deviceKey) logger.debug( "DeviceObj: " + deviceObj.identifier ) for dataTypeKey in data[ deviceKey ]: dataTypeObj = GardenModels.getDataType( identifier = dataTypeKey ) logger.debug( "DataTypeObj: " + dataTypeObj.identifier ) returnData[ deviceObj.identifier ] = {} responseObj= GardenModels.getResponse( device = deviceObj, datatype = dataTypeObj) if responseObj == None: return False logger.debug( "Response Object: " + str( responseObj.identifier ) ) returnData[ responseObj.device.identifier ][ responseObj.datatype.identifier ] = \ responseObj.value #endfor returnDataString = DataFormat.formatJsonResponse( returnData ) logger.debug("Response: " + returnDataString ) return returnDataString
def request( userObj , data ): logger.info("Screening DATA Request") for deviceKey in data.keys(): deviceObj = GardenModels.getDevice( identifier = deviceKey) if deviceObj == None: return False logger.debug( "DeviceObj: " + deviceObj.identifier ) # making sure device belongs to the user if deviceObj.user.identifier != userObj.identifier: logger.error( "Device Does Not Belong To User: "******"DataTypeObj: " + dataTypeObj.identifier ) __prepareResponseObject( deviceObj , dataTypeObj ) #endfor #endfor return __storeData( data )
def __storeData( data ): logger.info("Storing Data For Request") for deviceKey in data.keys(): logger.debug( "Processing Device: " + deviceKey ) deviceObj = GardenModels.getDevice( identifier = deviceKey) # device may have different data types for dataTypeKey in data[ deviceKey ].keys(): logger.debug( "Processing DataType: " + dataTypeKey ) dataTypeObj = GardenModels.getDataType( identifier = dataTypeKey ) logger.info( "Converting Data" ) storeData = json.dumps( data[ deviceKey ][ dataTypeKey ] ) logger.debug( storeData ) logger.info( "Creating Data Objects -> Device: " + deviceKey + " Type: " + dataTypeKey ) GardenModels.setData( deviceObj , dataTypeObj , storeData ) #endfor logger.info( "Done with Device" ) #endfor return 1
def postResponse( data ): logger.info("POST PROCESSOR REQUESET"); for responseIdent in data: if GardenModels.getResponse(identifier = responseIdent ) == None: return False #endfor for responseIdent in data: responseObj = GardenModels.getResponse(identifier = responseIdent ) responseObj.value = data[ responseIdent ] responseObj.save() return True
def getData( request ): logger.info("GET PROCESSOR REQUESET"); response = {} dataCount = 0 for device in request: logger.debug("Device: " + device) response[ device ] = {} for datatype in request[ device ]: logger.debug("DataType: " + datatype ) response[ device ][ datatype ] = {} data = GardenModels.getDataRange( int(request[ device ][ datatype ]['points']), device = device, datatype = datatype ) dataCount = dataCount + len(data) logger.debug("Data Returned: " + str(data)) for datapoint in data: dataAge = int( ( datapoint.created.replace(tzinfo=None) - datetime.datetime(1970,1,1)).total_seconds() ) if 'time' in request[ device ][ datatype ] : if dataAge < ( int( time.time() ) - request[ device ][ datatype ]['time' ] ) : logger.debug(int( time.time() ) - dataAge ) dataCount = dataCount - 1 continue response[ device ][ datatype ][ datapoint.identifier ] = { 'value' : datapoint.value, 'created' : int( ( datapoint.created.replace(tzinfo=None) - datetime.datetime(1970,1,1)).total_seconds() ) } #endfor #endfor logger.info("Returning: " + str(dataCount) + " Points of Data") return DataFormat.formatJsonResponse( response )
def __prepareResponseObject( deviceObj , dataTypeObj ): logger.debug("PreparingResponseObject") if None == GardenModels.getResponse( device = deviceObj , datatype = dataTypeObj ): responseObj = GardenModels.setResponse( deviceObj, dataTypeObj, "" ) Processor.createProcessor( dataTypeObj , deviceObj , responseObj )