55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import os
|
|
import logging
|
|
import importlib.util
|
|
from flask import Flask, request, jsonify, Response
|
|
from flask_cors import CORS
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
NOTEBOOK_PATH = os.environ.get("NOTEBOOK_PATH")
|
|
if not NOTEBOOK_PATH or not os.path.isfile(NOTEBOOK_PATH):
|
|
raise RuntimeError(f"NOTEBOOK_PATH not set or file not found: {NOTEBOOK_PATH}")
|
|
|
|
# Determine .ipynb path
|
|
notebook_ipynb_path = NOTEBOOK_PATH[:-3] + ".ipynb"
|
|
|
|
spec = importlib.util.spec_from_file_location("notebook_module", NOTEBOOK_PATH)
|
|
notebook_module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(notebook_module)
|
|
|
|
app = Flask(__name__)
|
|
CORS(app)
|
|
|
|
@app.route("/health", methods=["GET"])
|
|
def health():
|
|
return jsonify({"status": "ok"}), 200
|
|
|
|
@app.route("/", methods=["GET"])
|
|
def info():
|
|
return jsonify(notebook_module.info())
|
|
|
|
@app.route("/start", methods=["POST"])
|
|
def start():
|
|
data = request.get_json()
|
|
return jsonify(notebook_module.start(data))
|
|
|
|
@app.route("/move", methods=["POST"])
|
|
def move():
|
|
data = request.get_json()
|
|
return jsonify(notebook_module.move(data))
|
|
|
|
@app.route("/end", methods=["POST"])
|
|
def end():
|
|
data = request.get_json()
|
|
return jsonify(notebook_module.end(data))
|
|
|
|
@app.route("/notebook", methods=["GET"])
|
|
def get_notebook():
|
|
if os.path.isfile(notebook_ipynb_path):
|
|
with open(notebook_ipynb_path, "r", encoding="utf-8") as f:
|
|
return Response(f.read(), mimetype="application/json")
|
|
return jsonify({"error": "notebook not found"}), 404
|
|
|
|
if __name__ == "__main__":
|
|
port = int(os.environ.get("PORT", 8000))
|
|
app.run(host="0.0.0.0", port=port)
|