from flask import Flask, request, jsonify import json import subprocess import threading import os from dotenv import load_dotenv import datetime load_dotenv() sptnr_web_server = Flask(__name__) API_KEY = os.getenv("WEB_API_KEY") LOG_DIR = "data/logs" def run_script(cmd): subprocess.run(cmd) def log_post_data(data): timestamp = datetime.datetime.now().isoformat() log_filename = os.path.join(LOG_DIR, f"log_{timestamp}.txt") with open(log_filename, "w") as log_file: json.dump(data, log_file, indent=4) @sptnr_web_server.route("/process", methods=["GET", "POST"]) def process_request(): if request.args.get("api_key") != API_KEY: return jsonify({"error": "Unauthorized"}), 401 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") 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'