def addHistory(self, ruleName, imageBytes=None, imageType=None): """ updates the action history table, blocking until all data is retrieved and stored """ """ returns true on successful update """ from Robots.robotFactory import Factory cob = Factory.getCurrentRobot() dao = DataAccess() dateNow = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') location = dao.getRobotByName(cob.name)['locationId'] historyId = dao.saveHistory(dateNow, ruleName, location) if (historyId > 0): dao.saveSensorHistory(historyId) if imageType == None: imageType = ActionHistory._defaultImageType if imageBytes == None: imageBytes = cob.getImage(retFormat=imageType) if imageBytes != None: dao.saveHistoryImage(historyId, imageBytes, imageType) return historyId > 0
def addHistory(self, ruleName, imageBytes=None, imageType=None): """ updates the action history table, blocking until all data is retrieved and stored """ """ returns true on successful update """ from Robots.robotFactory import Factory cob = Factory.getCurrentRobot() dao = DataAccess() dateNow = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") location = dao.getRobotByName(cob.name)["locationId"] historyId = dao.saveHistory(dateNow, ruleName, location) if historyId > 0: dao.saveSensorHistory(historyId) if imageType == None: imageType = ActionHistory._defaultImageType if imageBytes == None: imageBytes = cob.getImage(retFormat=imageType) if imageBytes != None: dao.saveHistoryImage(historyId, imageBytes, imageType) return historyId > 0
class MapImage(object): exposed = True def __init__(self): #TODO: Handle multiple robots self._dao = DataAccess() self._sr = StateResolver() activeLocation = Locations().getActiveExperimentLocation() if activeLocation == None: return cherrypy.HTTPError(500, "Unable to determine active location") robot = Robots().getRobot(activeLocation['activeRobot']) self._robotName = robot['robotName'] self._emptyMap = locations_config[activeLocation['location']]['map'] def GET(self, *args, **kwargs): #if len(args) < 1: #raise cherrypy.HTTPError(403, 'Directory Listing Denied') mp = MapProcessor(self._emptyMap) sensors = self._sr.resolveStates(self._dao.findSensors()) #sensors = self._sr.appendSensorMetadata(sensors, self._emptyMap) #adds location and type cob = self._dao.getRobotByName(self._robotName) robot = { 'icon':self._dao.sensors.getSensorIconByName('robot')['id'], 'name':cob['robotName'], 'xCoord': cob['xCoord'], 'yCoord': cob['yCoord'], 'orientation': '%sd' % cob['orientation'], 'id':'r%s' % (cob['robotId']) } elements = [] elements.extend(sensors) #important to put robot last as z-order is determined by render order in svg and we want the robot icon #to always be on top elements.append(robot) img = mp.buildMap(elements) data = io.BytesIO(img) cherrypy.response.headers['Content-Type'] = mimetypes.guess_type('img.svg')[0] cherrypy.response.headers['Cache-Control'] = "max-age=0, no-cache, must-revalidate" cherrypy.response.headers['Pragma'] = "no-cache" # In the past to prevent browser caching cherrypy.response.headers['Expires'] = (datetime.datetime.utcnow() - datetime.timedelta(hours=1)).strftime('%a, %d %b %Y %H:%M:%S GMT') return file_generator(data)
class MapImage(object): exposed = True def __init__(self): self._robotName = CareOBot().name self._dao = DataAccess() self._sr = StateResolver() def GET(self, *args, **kwargs): #if len(args) < 1: #raise cherrypy.HTTPError(403, 'Directory Listing Denied') mp = MapProcessor() sensors = self._sr.resolveStates(self._dao.findSensors()) sensors = self._sr.appendSensorMetadata( sensors) #adds location and type cob = self._dao.getRobotByName(self._robotName) robot = { 'type': 'robot', 'name': cob['robotName'], 'location': (cob['xCoord'], cob['yCoord'], '%sd' % (cob['orientation'] * -1) ), #svg rotates opposite of our cooridnate system 'id': 'r%s' % (cob['robotId']) } elements = [] elements.extend(sensors) #important to put robot last as z-order is determined by render order in svg and we want the robot icon #to always be on top elements.append(robot) img = mp.buildMap(elements) data = io.BytesIO(img) cherrypy.response.headers['Content-Type'] = mimetypes.guess_type( 'img.svg')[0] return file_generator(data)
def addHistory(self, ruleName, imageBytes=None, imageType=None): cob = CareOBot() dao = DataAccess() dateNow = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') location = dao.getRobotByName(cob.name)['locationId'] historyId = dao.saveHistory(dateNow, ruleName, location) if(historyId > 0): dao.saveSensorHistory(historyId) if imageType == None: imageType = ActionHistory._defaultImageType if imageBytes == None: imageBytes = cob.getImage(retFormat=imageType) if imageBytes != None: dao.saveHistoryImage(historyId, imageBytes, imageType) return historyId > 0
class MapImage(object): exposed = True def __init__(self): self._robotName = CareOBot().name self._dao = DataAccess() self._sr = StateResolver() def GET(self, *args, **kwargs): # if len(args) < 1: # raise cherrypy.HTTPError(403, 'Directory Listing Denied') mp = MapProcessor() sensors = self._sr.resolveStates(self._dao.findSensors()) sensors = self._sr.appendSensorMetadata(sensors) # adds location and type cob = self._dao.getRobotByName(self._robotName) robot = { "type": "robot", "name": cob["robotName"], "location": ( cob["xCoord"], cob["yCoord"], "%sd" % (cob["orientation"] * -1), ), # svg rotates opposite of our cooridnate system "id": "r%s" % (cob["robotId"]), } elements = [] elements.extend(sensors) # important to put robot last as z-order is determined by render order in svg and we want the robot icon # to always be on top elements.append(robot) img = mp.buildMap(elements) data = io.BytesIO(img) cherrypy.response.headers["Content-Type"] = mimetypes.guess_type("img.svg")[0] return file_generator(data)
def addHistoryComplete(self, ruleName, imageBytes=None, imageType=None, imageOverheadBytes=None, imageOverheadType=None): """ updates the action history table, blocking until all data is retrieved and stored """ """ returns true on successful update """ from Robots.robotFactory import Factory cob = Factory.getCurrentRobot() dao = DataAccess() dateNow = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') location = dao.getRobotByName(cob.name)['locationId'] user = self._dao.users.getActiveUser['userId'] historyId = dao.saveHistoryComplete(dateNow, ruleName, location, user) if(historyId > 0): #dao.saveSensorHistory(historyId) if imageType == None: imageType = ActionHistory._defaultImageType if imageBytes == None: imageBytes = cob.getImage(retFormat=imageType) if imageBytes != None: dao.saveHistoryImage(historyId, imageBytes, imageType) #the same but for the overhead camera image if imageOverheadType == None: imageOverheadType = ActionHistory._defaultImageType if imageOverheadBytes == None: imageOverheadBytes = cob.getImageOverhead(retFormat=imageOverheadType) if imageOverheadBytes != None: dao.saveHistoryImageOverhead(historyId, imageOverheadBytes, imageOverheadType) return historyId > 0