Ejemplo n.º 1
0
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.")
Ejemplo n.º 2
0
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)