from flask import Flask, request, jsonify import subprocess import threading import os from dotenv import load_dotenv import functools load_dotenv() sptnr_web_server = Flask(__name__) WEB_API_KEY = os.getenv("WEB_API_KEY") ENABLE_WEB_API_KEY = os.getenv("ENABLE_WEB_API_KEY", "True") == "True" LOG_DIR = "data/logs" def api_key_required(f): @functools.wraps(f) def decorated_function(*args, **kwargs): if ENABLE_WEB_API_KEY and request.args.get("api_key") != WEB_API_KEY: return jsonify({"error": "Unauthorized"}), 401 return f(*args, **kwargs) return decorated_function def run_script(cmd): subprocess.run(cmd) @sptnr_web_server.route("/process", methods=["GET", "POST"]) @api_key_required def process_request(): cmd = ["python3", "sptnr.py"] if request.args.get("preview", "") == "true": cmd.append("--preview") if request.args.get("force", "") == "true": cmd.append("--force") artist_ids = request.args.getlist("artist") for artist_id in artist_ids: cmd.extend(["--artist", artist_id]) album_ids = request.args.getlist("album") for album_id in album_ids: cmd.extend(["--album", album_id]) start = request.args.get("start") if start: cmd.extend(["--start", start]) limit = request.args.get("limit") if limit: cmd.extend(["--limit", limit]) thread = threading.Thread(target=run_script, args=(cmd,)) thread.start() return jsonify({"message": "Processing started"}) @sptnr_web_server.route("/logs") @api_key_required def list_logs(): try: logs = os.listdir(LOG_DIR) logs = [log for log in logs if log.endswith(".log")] # Filter log files log_links = "".join(f'