diff --git a/src/module/api.py b/src/module/api.py index 00cccbde..9368c47c 100644 --- a/src/module/api.py +++ b/src/module/api.py @@ -6,10 +6,11 @@ from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles import logging -from .core import APIProcess -from .conf import settings, DATA_PATH, LOG_PATH -from .utils import json_config -from .models.api import * +from module.core import APIProcess +from module.conf import settings, DATA_PATH, LOG_PATH +from module.utils import json_config +from module.models.api import * +from module.models import Config logger = logging.getLogger(__name__) @@ -20,13 +21,6 @@ app.mount("/assets", StaticFiles(directory="templates/assets"), name="assets") templates = Jinja2Templates(directory="templates") -# HTML Response -@app.get("/", response_class=HTMLResponse) -def index(request: Request): - context = {"request": request} - return templates.TemplateResponse("index.html", context) - - @app.get("/api/v1/data") def get_data(): data = json_config.load(DATA_PATH) @@ -63,6 +57,18 @@ async def add_rule(info: AddRule): return api_func.add_rule(info.title, info.season) +@app.post("/api/v1/updateConfig", tags=["config"]) +async def update_config(config: Config): + return api_func.update_config(config) + + +# HTML Response +@app.get("/{full_path:path}", response_class=HTMLResponse) +def index(request: Request): + context = {"request": request} + return templates.TemplateResponse("index.html", context) + + def run(): LOGGING_CONFIG["formatters"]["default"]["fmt"] = "[%(asctime)s] %(levelprefix)s %(message)s" uvicorn.run(app, host="0.0.0.0", port=settings.program.webui_port) diff --git a/src/module/core/api_func.py b/src/module/core/api_func.py index 9c48d242..1a64315f 100644 --- a/src/module/core/api_func.py +++ b/src/module/core/api_func.py @@ -1,13 +1,20 @@ import re +import os +import logging +import signal from module.core import DownloadClient from module.manager import FullSeasonGet from module.rss import RSSAnalyser from module.utils import json_config from module.conf import DATA_PATH +from module.conf.config import save_config_to_file, CONFIG_PATH +from module.models import Config from module.ab_decorator import api_failed +logger = logging.getLogger(__name__) + class APIProcess: def __init__(self): @@ -63,4 +70,15 @@ class APIProcess: } data["bangumi_info"].append(extra_data) json_config.save(DATA_PATH, data) - return "Success" \ No newline at end of file + return "Success" + + @staticmethod + def update_config(config: Config): + save_config_to_file(config, CONFIG_PATH) + return {"message": "Success"} + + def restart_main_process(self, mp): + os.kill(mp.pid, signal.SIGTERM) + global main_process + main_process = multiprocessing.Process(target=main_program) + main_process.start()