def duplicate_node()

in project/paperbench/paperbench/gui/app.py [0:0]


def duplicate_node():
    """Duplicates the node with the given `node_id` and adds it as a sibling."""
    with lock:
        data = sanitize_request_data(request.json)
        node_id = data.get("node_id")

        try:
            with open(app.config["PATH_TO_PAPER"] / app.config["RUBRIC_FILE_NAME"], "r") as f:
                rubric = json.load(f)

            old_root = app.config["NODE_TYPE"].from_dict(rubric)
            if old_root.id == node_id:
                return jsonify({"status": "error", "message": "Cannot duplicate the root node."})

            node_to_duplicate = old_root.find(node_id)
            parent = old_root.get_parent(node_id)
            duplicate_node = node_to_duplicate.duplicate_with_new_ids()

            new_parent = parent.add_sub_task(duplicate_node)
            new_root = old_root.replace(parent.id, new_parent)

            with open(app.config["PATH_TO_PAPER"] / app.config["RUBRIC_FILE_NAME"], "w") as f:
                json.dump(new_root.to_dict(), f, indent=4)

            return jsonify({"status": "success"})
        except Exception as e:
            return jsonify(
                {"status": "error", "message": f"Error duplicating node {node_id}: {str(e)}"}
            )