def serveUploadPost(self, qs): #, lastUploadCode, lastUploadConfig, lastUploadFile): global maybeIsInSubprocess global forceInterrupt # TODO lastUploadCode = "" lastUploadConfig = "" lastUploadFile = "" # Parse the form data posted form = cgi.FieldStorage( fp = self.rfile, headers = self.headers, environ = { 'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'] }) self.send_response(200) self.sendDefaultHeaders() self.end_headers() file_data = None codeType = "C" if "compile" in form: if "language" in form: codeType = form["language"].value.strip().lower() configuration.c.setCfgValue("codeType", codeType) if "slow" in form: slow = form["slow"].value == "on" else: slow = False configuration.c.setCfgValue("slowUpload", slow) configuration.c.save() code = None fileContents = None fileName = None if "compile" in form and "code" in form: code = form["code"].value if "upload" in form and "file" in form: fileContents = form["file"].file.read() fileName = form["file"].filename # check if what to upload is provided if not fileContents and not code: infoMsg = "Neither filename nor code specified!" maybeIsInSubprocess = False forceInterrupt = True self.writeChunk(infoMsg); return for m in motes.getMotes(): name = "mote" + m.getFullBasename() if name in form: isChecked = form[name].value == "on" else: isChecked = False if isChecked: m.isSelected = True else: m.isSelected = False # remember which motes were selected and which not motes.storeSelected() # check if any motes are selected if not motes.anySelected(): infoMsg = "No motes selected!" maybeIsInSubprocess = False forceInterrupt = True self.writeChunk(infoMsg); return config = "" if "config" in form.keys(): lastUploadConfig = form["config"].value config = lastUploadConfig if slow: config += "\nSLOW_UPLOAD=y\n" retcode = self.compileAndUpload(code, config, fileName, fileContents, codeType) motesText = self.serveMotes("upload", "Upload", None, form) codeType = configuration.c.getCfgValue("codeType") isSlow = configuration.c.getCfgValueAsBool("slowUpload") if retcode == 0: infoMsg = "Upload done!" else: infoMsg = "Upload failed!" self.writeChunk(infoMsg);
def serveUploadPost(self, qs, lastUploadCode, lastUploadConfig, lastUploadFile): global maybeIsInSubprocess global isPostEntered # Parse the form data posted form = cgi.FieldStorage( fp = self.rfile, headers = self.headers, environ = {'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], }) # signal the upload result thread that we are are ready to start serving isPostEntered = True self.send_response(200) self.sendDefaultHeaders() self.end_headers() file_data = None isSEAL = False if "compile" in form: if "language" in form: isSEAL = form["language"].value.strip() == "SEAL" configuration.c.setCfgValue("isSealCode", isSEAL) if "slow" in form: slow = form["slow"].value == "on" else: slow = False configuration.c.setCfgValue("slowUpload", slow) configuration.c.save() if "code" in form.keys(): code = form["code"].value else: code = None if "file" in form.keys(): fileContents = form["file"].file.read() else: fileContents = None # check if what to upload is provided if not fileContents and not code: text = "Neither filename nor code specified!" maybeIsInSubprocess = False self.serveAnyPage("error:critical", qs, errorMsg = text) return for m in motes.getMotes(): name = "mote" + m.getPortBasename() if name in form: isChecked = form[name].value == "on" else: isChecked = False if isChecked: m.isSelected = True else: m.isSelected = False # remember which motes were selected and which not motes.storeSelected() # check if any motes are selected if not motes.anySelected(): text = "No motes selected!" maybeIsInSubprocess = False return self.serveAnyPage("error:critical", qs, errorMsg = text, generatedContentOnly = True) config = "" if "config" in form.keys(): lastUploadConfig = form["config"].value config = lastUploadConfig if slow: config += "\nSLOW_UPLOAD=y\n" retcode = self.compileAndUpload(code, config, fileContents, isSEAL) motesText = self.serveMotes("upload", "Upload", None, form) isSealCode = configuration.c.getCfgValueAsBool("isSealCode") isSlow = configuration.c.getCfgValueAsBool("slowUpload") if retcode == 0: infoMsg = "<div><strong>Upload done!</strong></div><br/>" else: infoMsg = "<div><strong>Upload failed!</strong></div><br/>" '''self.serveAnyPage("upload", qs, True, {"MOTES_TXT" : motesText, "CCODE_CHECKED": 'checked="checked"' if not isSealCode else "", "SEALCODE_CHECKED" : 'checked="checked"' if isSealCode else "", "UPLOAD_CODE" : lastUploadCode, "UPLOAD_CONFIG" : lastUploadConfig, "UPLOAD_FILENAME": lastUploadFile, "SLOW_CHECKED" : 'checked="checked"' if isSlow else ""}, infoMsg = infoMsg)''' self.writeChunk("ok")
def do_GET(self): self.headerIsServed = False o = urlparse(self.path) qs = parse_qs(o.query) global lastUploadCode global lastUploadConfig global lastUploadFile # TODO: # if "Android" in self.headers["user-agent"]: # self.htmlDirectory = self.htmlDirectory + "_mobile" if o.path == "/" or o.path == "/default": self.serveDefault(qs) elif o.path == "/motes": self.serveMoteSelect(qs) elif o.path == "/config": self.serveConfig(qs) elif o.path == "/graph": self.serveGraphs(qs) elif o.path == "/graph-data": self.serveGraphData(qs) elif o.path == "/graph-form": self.serveGraphForm(qs) elif o.path == "/upload": self.serveUploadGet(qs, lastUploadCode, lastUploadConfig, lastUploadFile) elif o.path == "/login": self.serveLogin(qs) elif o.path == "/server": self.serveServer(qs) elif o.path == "/account": self.serveAccount(qs) elif o.path == "/users": self.serveUsers(qs) elif o.path == "/upload-result": self.serveUploadResult(qs) elif o.path == "/listen": self.serveListen(qs) elif o.path == "/listen-data": self.serveListenData(qs) elif o.path == "/blockly": self.serveBlockly(qs) elif o.path == "/seal-frame": self.serveSealFrame(qs) elif o.path[:13] == "/seal-blockly": self.serveFile(os.path.join(self.sealBlocklyDirectory, o.path[14:]), qs) elif o.path == "/sync": self.serveSync(qs) elif o.path == "/code": # qs['src'] contains SEAL-Blockly code code = qs.get('src')[0] if "src" in qs else "" config = qs.get('config')[0] if "config" in qs else "" if motes.anySelected(): self.compileAndUpload(code, config, None, True) self.serveSync(qs) elif o.path[-4:] == ".css": self.serveFile(os.path.join(self.htmlDirectory, "css", o.path[1:]), qs) elif o.path[-4:] in [".png", ".jpg", ".gif", ".tif"]: self.serveFile(os.path.join(self.htmlDirectory, "img", o.path[1:]), qs) elif o.path[-3:] in [".js"]: self.serveFile(os.path.join(self.htmlDirectory, "js", o.path[1:]), qs) else: self.serve404Error(o.path, qs)
def serveListen(self, qs): self.setSession(qs) self.send_response(200) self.sendDefaultHeaders() self.end_headers() motesText = self.serveMotes("listen", "Listen", qs, None) errorMsg = None global isListening if "action" in qs and self.getLevel() > 1: if qs["action"][0] == "Start": if not motes.anySelected(): errorMsg = "\n<h4 class='err'>Error: No motes selected!</h4>\n" if isListening: errorMsg = "\n<h4 class='err'>Already listening!</h4>\n" else: sensor_data.moteData.reset() ht.openAllSerial() isListening = True # Open DB connection data_utils.openDBConnection() else: ht.closeAllSerial() isListening = False # Close DB connection data_utils.closeDBConnection() txt = "" for line in sensor_data.moteData.listenTxt: txt += line + "<br/>" action = "Stop" if isListening else "Start" dataFilename = configuration.c.getCfgValue("saveToFilename") saveProcessedData = configuration.c.getCfgValueAsBool("saveProcessedData") if self.getLevel() > 1: if "dataFile" in qs: dataFilename = qs["dataFile"][0] if len(dataFilename) and dataFilename.find(".") == -1: dataFilename += ".csv" if "dataType" in qs: saveProcessedData = not qs["dataType"][0] == "raw" saveMultipleFiles = qs["dataType"][0] == "mprocessed" configuration.c.setCfgValue("saveToFilename", dataFilename) configuration.c.setCfgValue("saveProcessedData", bool(saveProcessedData)) configuration.c.save() rawdataChecked = not saveProcessedData mprocessedChecked = saveProcessedData div_height = "0" if "div_height" in qs: div_height = qs["div_height"][0] self.serveAnyPage("listen", qs, True, {"MOTES_TXT" : motesText, "LISTEN_TXT" : txt, "MOTE_ACTION": action, "DATA_FILENAME" : dataFilename, "RAWDATA_CHECKED" : 'checked="checked"' if rawdataChecked else "", "MPROCDATA_CHECKED" : 'checked="checked"' if mprocessedChecked else "", "DIV_HEIGHT" : div_height}, errorMsg = errorMsg)
def serveUploadPost( self, qs): #, lastUploadCode, lastUploadConfig, lastUploadFile): global maybeIsInSubprocess global forceInterrupt # TODO lastUploadCode = "" lastUploadConfig = "" lastUploadFile = "" # Parse the form data posted form = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={ 'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': self.headers['Content-Type'] }) self.send_response(200) self.sendDefaultHeaders() self.end_headers() file_data = None codeType = "C" if "compile" in form: if "language" in form: codeType = form["language"].value.strip().lower() configuration.c.setCfgValue("codeType", codeType) if "slow" in form: slow = form["slow"].value == "on" else: slow = False configuration.c.setCfgValue("slowUpload", slow) configuration.c.save() code = None fileContents = None fileName = None if "compile" in form and "code" in form: code = form["code"].value if "upload" in form and "file" in form: fileContents = form["file"].file.read() fileName = form["file"].filename # check if what to upload is provided if not fileContents and not code: infoMsg = "Neither filename nor code specified!" maybeIsInSubprocess = False forceInterrupt = True self.writeChunk(infoMsg) return for m in motes.getMotes(): name = "mote" + m.getFullBasename() if name in form: isChecked = form[name].value == "on" else: isChecked = False if isChecked: m.isSelected = True else: m.isSelected = False # remember which motes were selected and which not motes.storeSelected() # check if any motes are selected if not motes.anySelected(): infoMsg = "No motes selected!" maybeIsInSubprocess = False forceInterrupt = True self.writeChunk(infoMsg) return config = "" if "config" in form.keys(): lastUploadConfig = form["config"].value config = lastUploadConfig if slow: config += "\nSLOW_UPLOAD=y\n" retcode = self.compileAndUpload(code, config, fileName, fileContents, codeType) motesText = self.serveMotes("upload", "Upload", None, form) codeType = configuration.c.getCfgValue("codeType") isSlow = configuration.c.getCfgValueAsBool("slowUpload") if retcode == 0: infoMsg = "Upload done!" else: infoMsg = "Upload failed!" self.writeChunk(infoMsg)
def do_GET(self): self.headerIsServed = False o = urlparse(self.path) qs = parse_qs(o.query) # global lastUploadCode # global lastUploadConfig # global lastUploadFile # TODO: # if "Android" in self.headers["user-agent"]: # self.htmlDirectory = self.htmlDirectory + "_mobile" if o.path == "/" or o.path == "/default": self.serveDefault(qs) elif o.path == "/motes": self.serveMoteSelect(qs) elif o.path == "/config": self.serveConfig(qs) elif o.path == "/graph": self.serveGraphs(qs) elif o.path == "/graph-data": self.serveGraphData(qs) elif o.path == "/graph-form": self.serveGraphForm(qs) elif o.path == "/upload": self.serveUploadGet(qs) #, lastUploadCode, lastUploadConfig, lastUploadFile) elif o.path == "/login": self.serveLogin(qs) elif o.path == "/server": self.serveServer(qs) elif o.path == "/account": self.serveAccount(qs) elif o.path == "/users": self.serveUsers(qs) elif o.path == "/upload-result": self.serveUploadResult(qs) elif o.path == "/listen": self.serveListen(qs) elif o.path == "/listen-single": self.serveListenSingle(qs) elif o.path == "/talk-to": self.serveTalkTo(qs) elif o.path == "/listen-data": self.serveListenData(qs) elif o.path == "/blockly": self.serveBlockly(qs) elif o.path == "/seal-frame": self.serveSealFrame(qs) elif o.path[:13] == "/seal-blockly": self.serveFile(os.path.join(self.sealBlocklyDirectory, o.path[14:]), qs) elif o.path == "/sync": self.serveSync(qs) elif o.path == "/code": # qs['src'] contains SEAL-Blockly code code = qs.get('src')[0] if "src" in qs else "" config = qs.get('config')[0] if "config" in qs else "" # Parse the form data posted self.serveMotes("upload", "Upload", qs, None) if motes.anySelected(): self.compileAndUpload(code, config, None, None, 'seal') self.serveSync(qs) elif o.path[-4:] == ".css": self.serveFile(os.path.join(self.htmlDirectory, "css", o.path[1:]), qs) elif o.path[-4:] in [".png", ".jpg", ".gif", ".tif"]: self.serveFile(os.path.join(self.htmlDirectory, "img", o.path[1:]), qs) elif o.path[-3:] in [".js"]: self.serveFile(os.path.join(self.htmlDirectory, "js", o.path[1:]), qs) else: self.serve404Error(o.path, qs)
def serveListen(self, qs): self.setSession(qs) self.send_response(200) self.sendDefaultHeaders() self.end_headers() motesText = self.serveMotes("listen", "Listen", qs, None, True) errorStyle = "none" errorMsg = "" global isListening if "action" in qs and self.getLevel() > 1: if qs["action"][0] == "Start": if not motes.anySelected(): errorMsg = "\n<h4 class='err'>Error: No motes selected!</h4>\n" errorStyle = "block" elif isListening: errorMsg = "\n<h4 class='err'>Already listening!</h4>\n" errorStyle = "block" else: sensor_data.moteData.reset() ht.openAllSerial() isListening = True # Open DB connection data_utils.openDBConnection() else: ht.closeAllSerial() isListening = False # Close DB connection data_utils.closeDBConnection() txt = "" for line in sensor_data.moteData.listenTxt: txt += line + "<br/>" if errorMsg == "": action = "Stop" if isListening else "Start" else: action = "Start" dataFilename = configuration.c.getCfgValue("saveToFilename") saveProcessedData = configuration.c.getCfgValueAsBool("saveProcessedData") if self.getLevel() > 1: if "dataFile" in qs: dataFilename = qs["dataFile"][0] if len(dataFilename) and dataFilename.find(".") == -1: dataFilename += ".csv" if "dataType" in qs: saveProcessedData = not qs["dataType"][0] == "raw" saveMultipleFiles = qs["dataType"][0] == "mprocessed" configuration.c.setCfgValue("saveToFilename", dataFilename) configuration.c.setCfgValue("saveProcessedData", bool(saveProcessedData)) configuration.c.save() rawdataChecked = not saveProcessedData mprocessedChecked = saveProcessedData self.serveAnyPage("listen", qs, True, {"MOTES_TXT" : motesText, "LISTEN_TXT" : txt, "MOTE_ACTION": action, "DATA_FILENAME" : dataFilename, "RAWDATA_CHECKED" : 'checked="checked"' if rawdataChecked else "", "MPROCDATA_CHECKED" : 'checked="checked"' if mprocessedChecked else "", "ERROR_MSG" : errorMsg, "ERROR_STATUS" : errorStyle})