def validateInput(input): if not input: raise Exception("No input data provided.") if not "status" in input: raise Exception("No status information provided.") # Convert INT representation of status to Enum. input["status"] = Node.Status(input["status"]) if input["status"] == Node.Status.INIT: if not "model" in input: raise Exception("No model information provided.") if not "version" in input: raise Exception("No firmware version information provided.")
def wibednode(id): logging.debug('Node request from node with id %s', id) output = {} logging.debug('NODE REQUEST: %s', request.get_json(force=True)) try: input = json.loads(request.data) validateInput(input) # Attempt to get existing node from id node = Node.query.get(id) # If it doesn't exist, create a new one if not node: if Node.Status(input["status"]) == Node.Status.IDLE: output["reinit"] = {} return jsonify(**output) else: node = Node(id) db.session.add(node) # Update node fields based on input updateNode(node, input) handleExperimentData(node, input, output) handleFirmwareUpgrade(node, input, output) handleCommands(node, input, output) handleSendRestore(node, input, output) except Exception as e: logging.debug('Exception joining node: %s', e) output["errors"] = [str(e)] db.session.rollback() logging.debug('SERVER REPLY: %s', output) return jsonify(**output)