import os import sys import json import urllib.parse import subprocess import threading import asyncio from aiohttp import web import folder_paths import struct from .utils import require_filename, resolve_within async def api_get_notebooks(request): script_dir = os.path.dirname(os.path.abspath(__file__)) nb_dir = os.path.join(script_dir, "notebooks") if not os.path.exists(nb_dir): os.makedirs(nb_dir) notebooks = [] for f in os.listdir(nb_dir): if f.endswith('.json'): try: with open(os.path.join(nb_dir, f), 'r', encoding='utf-8') as file: data = json.load(file) notebooks.append({ "filename": f, "name": data.get("name", f.replace('.json', '')), "data": data }) except Exception: pass return web.json_response({"notebooks": notebooks}) async def api_save_notebook(request): try: data = await request.json() filename = data.get("filename", "") if not filename.endswith('.json'): filename += '.json' try: filename = require_filename(filename) except ValueError: return web.json_response({"status": "error", "message": "Invalid filename"}, status=400) script_dir = os.path.dirname(os.path.abspath(__file__)) nb_dir = os.path.join(script_dir, "notebooks") if not os.path.exists(nb_dir): os.makedirs(nb_dir) file_path = resolve_within(nb_dir, filename) with open(file_path, 'w', encoding='utf-8') as f: json.dump(data.get("data", {}), f, indent=4, ensure_ascii=False) return web.json_response({"status": "success"}) except Exception as e: return web.json_response({"status": "error", "message": str(e)}) async def api_delete_notebook(request): try: data = await request.json() filename = data.get("filename", "") try: filename = require_filename(filename) except ValueError: return web.json_response({"status": "error", "message": "Invalid filename"}, status=400) script_dir = os.path.dirname(os.path.abspath(__file__)) nb_dir = os.path.join(script_dir, "notebooks") file_path = resolve_within(nb_dir, filename) if os.path.exists(file_path): os.remove(file_path) return web.json_response({"status": "success"}) return web.json_response({"status": "error", "message": "File not found"}) except Exception as e: return web.json_response({"status": "error", "message": str(e)})