78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
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)})
|
|
|