From ceeca5260331be1ded69e6da7dad88cccf35bdcc Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Wed, 10 May 2023 16:28:25 +0800 Subject: [PATCH] Fix #247 --- src/main.py | 86 ++++++++++---------- src/module/app.py | 10 +-- src/module/conf/log.py | 7 +- src/module/conf/logging.conf | 72 ---------------- src/module/conf/uvicorn_logging.py | 8 +- src/module/manager/renamer.py | 7 -- src/module/parser/analyser/torrent_parser.py | 8 ++ src/test/test_torrent_parser.py | 6 ++ 8 files changed, 66 insertions(+), 138 deletions(-) delete mode 100644 src/module/conf/logging.conf diff --git a/src/main.py b/src/main.py index a30ccc30..5576a8ea 100644 --- a/src/main.py +++ b/src/main.py @@ -16,25 +16,32 @@ from module.conf.uvicorn_logging import logging_config logger = logging.getLogger(__name__) - - +rss_link = settings.rss_link() stop_event = threading.Event() -rss_link = settings.rss_link() + +def show_info(): + with open("icon", "r") as f: + for line in f.readlines(): + logger.info(line.strip("\n")) + logger.info( + f"Version {VERSION} Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan" + ) + logger.info("GitHub: https://github.com/EstrellaXD/Auto_Bangumi/") + logger.info("Starting AutoBangumi...") def rss_loop(stop_event, rss_link: str): rss_analyser = RSSAnalyser() while not stop_event.is_set(): rss_analyser.run(rss_link) - logger.info("RSS loop finished.") stop_event.wait(settings.program.rss_time) + def rename_loop(stop_event): while not stop_event.is_set(): with Renamer() as renamer: renamer.rename() - logger.info("Rename loop finished.") stop_event.wait(settings.program.rename_time) @@ -49,10 +56,37 @@ rename_thread = threading.Thread( ) +def stop_thread(): + global rss_thread, rename_thread + if not stop_event.is_set(): + stop_event.set() + rename_thread.join() + rss_thread.join() + + +def start_thread(): + global rss_thread, rename_thread + if stop_event.is_set(): + stop_event.clear() + time.sleep(1) + settings.load() + rss_link = settings.rss_link() + new_level = logging.DEBUG if settings.log.debug_enable else logging.INFO + setup_logger(new_level) + print(new_level) + rss_thread = threading.Thread(target=rss_loop, args=(stop_event, rss_link)) + rename_thread = threading.Thread(target=rename_loop, args=(stop_event,)) + rss_thread.start() + rename_thread.start() + return {"status": "ok"} + + @router.on_event("startup") async def startup(): global rss_thread, rename_thread - setup_logger() + log_level = logging.DEBUG if settings.log.debug_enable else logging.INFO + setup_logger(log_level) + show_info() rss_thread.start() rename_thread.start() @@ -65,48 +99,20 @@ async def shutdown(): @router.get("/api/v1/restart", tags=["program"]) async def restart(): - global rss_thread, rename_thread - if not rss_thread.is_alive(): - return {"status": "Already stopped."} - stop_event.set() - logger.info("Stopping RSS analyser...") - rss_thread.join() - rename_thread.join() - stop_event.clear() - time.sleep(1) - settings.load() - rss_link = settings.rss_link() - setup_logger() - rss_thread = threading.Thread(target=rss_loop, args=(stop_event, rss_link)) - rename_thread = threading.Thread(target=rename_loop, args=(stop_event,)) - rss_thread.start() - rename_thread.start() + stop_thread() + start_thread() return {"status": "ok"} @router.get("/api/v1/start", tags=["program"]) async def start(): - global rss_thread, rename_thread - if not stop_event.is_set(): - return {"status": "Already started."} - rss_thread = threading.Thread(target=rss_loop, args=(stop_event, rss_link)) - rename_thread = threading.Thread(target=rename_loop,args=(stop_event,)) - rss_thread.start() - rename_thread.start() + start_thread() return {"status": "ok"} @router.get("/api/v1/stop", tags=["program"]) async def stop(): - global rss_thread, rename_thread - if stop_event.is_set(): - return {"status": "Already stopped."} - stop_event.set() - logger.info("Stopping program...") - rename_thread.join() - rss_thread.join() - stop_event.clear() - logger.info("Program stopped.") + stop_thread() return {"status": "ok"} @@ -119,9 +125,7 @@ if VERSION != "DEV_VERSION": def index(request: Request): context = {"request": request} return templates.TemplateResponse("index.html", context) - else: - @router.get("/", status_code=302, tags=["html"]) def index(): return RedirectResponse("/docs") @@ -129,5 +133,5 @@ else: if __name__ == "__main__": uvicorn.run( - router, host="0.0.0.0", port=settings.program.webui_port + "main:router", host="0.0.0.0", port=settings.program.webui_port, log_config=logging_config, reload=True ) diff --git a/src/module/app.py b/src/module/app.py index 04dc880e..d907e12f 100644 --- a/src/module/app.py +++ b/src/module/app.py @@ -34,12 +34,4 @@ async def rename_loop(renamer: Renamer, wait_time: int = 360): await asyncio.sleep(wait_time) -def show_info(): - with open("icon", "r") as f: - for line in f.readlines(): - logger.info(line.strip("\n")) - logger.info( - f"Version {VERSION} Author: EstrellaXD Twitter: https://twitter.com/Estrella_Pan" - ) - logger.info("GitHub: https://github.com/EstrellaXD/Auto_Bangumi/") - logger.info("Starting AutoBangumi...") + diff --git a/src/module/conf/log.py b/src/module/conf/log.py index a6a35e03..5493b6d0 100644 --- a/src/module/conf/log.py +++ b/src/module/conf/log.py @@ -1,19 +1,18 @@ import logging -from .config import settings - LOG_PATH = "data/log.txt" -def setup_logger(): - level = logging.DEBUG if settings.log.debug_enable else logging.INFO +def setup_logger(level): logging.addLevelName(logging.DEBUG, "DEBUG:") logging.addLevelName(logging.INFO, "INFO:") logging.addLevelName(logging.WARNING, "WARNING:") LOGGING_FORMAT = "[%(asctime)s] %(levelname)-8s %(message)s" + TIME_FORMAT = "%Y-%m-%d %H:%M:%S" logging.basicConfig( level=level, format=LOGGING_FORMAT, + datefmt=TIME_FORMAT, encoding="utf-8", handlers=[ logging.FileHandler(LOG_PATH, encoding="utf-8"), diff --git a/src/module/conf/logging.conf b/src/module/conf/logging.conf deleted file mode 100644 index 047be4fb..00000000 --- a/src/module/conf/logging.conf +++ /dev/null @@ -1,72 +0,0 @@ -[loggers] -keys=root, gunicorn.error, gunicorn.access,uvicorn.error,uvicorn.access - -[handlers] -keys=console, error_file, access_file, accesscustom - -[formatters] -keys=generic, access, AccessFormatter - -[logger_root] -level=INFO -handlers=console -propagate=1 - -[logger_gunicorn.error] -level=INFO -handlers=error_file -propagate=0 -qualname=gunicorn.error - -[logger_gunicorn.access] -level=INFO -handlers=accesscustom -propagate=0 -qualname=gunicorn.access - -[logger_uvicorn.error] -level=INFO -handlers=error_file -propagate=0 -qualname=uvicorn.error - -[logger_uvicorn.access] -level=INFO -handlers=accesscustom -propagate=0 -qualname=uvicorn.access - -[handler_console] -class=StreamHandler -formatter=generic -args=(sys.stdout, ) - -[handler_error_file] -class=StreamHandler -formatter=generic -args=(sys.stdout, ) - -[handler_access_file] -class=StreamHandler -formatter=access -args=(sys.stdout, ) - -[handler_accesscustom] -class=StreamHandler -formatter=AccessFormatter -args=(sys.stdout, ) - -[formatter_generic] -format=%(levelname)s: %(message)s -datefmt=%Y-%m-%dT%H:%M:%S -class=uvicorn.logging.DefaultFormatter - -[formatter_access] -format=%(levelname)s: %(message)s -datefmt=%Y-%m-%dT%H:%M:%S -class=customlogger.CustomFormatter - -[formatter_AccessFormatter] -format={"event":"access_log","ip":"%(h)s","status":"%(s)s","method":"%(m)s","path":"%(U)s","referer":"%(f)s","x_session_id":"%(x-session-id)s","x_google_id":"%(x-google-id)s","x_server_time":"%(x-server-time)s","agent":"%(a)s"} -datefmt=%Y-%m-%dT%H:%M:%S -class=customlogger.CustomFormatter \ No newline at end of file diff --git a/src/module/conf/uvicorn_logging.py b/src/module/conf/uvicorn_logging.py index 59f24bb8..fbef67f1 100644 --- a/src/module/conf/uvicorn_logging.py +++ b/src/module/conf/uvicorn_logging.py @@ -7,7 +7,7 @@ logging_config = { "handlers": ["default"], "propagate": True, }, - "uvicorn.access": { + "uvicorn.asgi": { # 更改 "uvicorn.access" 为 "uvicorn.asgi" "level": "INFO", "handlers": ["access"], "propagate": True, @@ -18,18 +18,16 @@ logging_config = { "class": "logging.StreamHandler", "level": "INFO", "formatter": "default", - "stream": "ext://sys.stderr", }, "access": { "class": "logging.StreamHandler", - "level": "INFO", + "level": "DEBUG", "formatter": "access", - "stream": "ext://sys.stdout", }, }, "formatters": { "default": { - "format": "[%(asctime)s] %(levelname)s: %(message)s", + "format": "[%(asctime)s] %(levelname)-8s %(message)s", "datefmt": "%Y-%m-%d %H:%M:%S", }, "access": { diff --git a/src/module/manager/renamer.py b/src/module/manager/renamer.py index 68e0d007..c9317646 100644 --- a/src/module/manager/renamer.py +++ b/src/module/manager/renamer.py @@ -227,10 +227,3 @@ class Renamer(DownloadClient): ) else: logger.warning(f"{info.name} has no media file") - - -if __name__ == '__main__': - from module.conf import setup_logger - setup_logger() - with Renamer() as renamer: - renamer.rename() diff --git a/src/module/parser/analyser/torrent_parser.py b/src/module/parser/analyser/torrent_parser.py index 9535e7af..bc65dbbc 100644 --- a/src/module/parser/analyser/torrent_parser.py +++ b/src/module/parser/analyser/torrent_parser.py @@ -35,6 +35,8 @@ def get_group(group_and_title) -> tuple[str | None, str]: while "" in n: n.remove("") if len(n) > 1: + if re.match(r"\d+", n[1]): + return None, group_and_title return n[0], n[1] else: return None, n[0] @@ -96,3 +98,9 @@ def torrent_parser( episode=episode, suffix=suffix ) + + +if __name__ == '__main__': + name = "海盗战记 (2019) S01E01.mp4" + bf = torrent_parser(name, file_type="media") + print(bf) \ No newline at end of file diff --git a/src/test/test_torrent_parser.py b/src/test/test_torrent_parser.py index 2f1e87ec..7462e8ca 100644 --- a/src/test/test_torrent_parser.py +++ b/src/test/test_torrent_parser.py @@ -30,6 +30,12 @@ def test_torrent_parser(): assert bf.episode == 1082 assert bf.season == 1 + file_name = "海盗战记 (2019) S01E01.mp4" + bf = torrent_parser(file_name) + assert bf.title == "海盗战记 (2019)" + assert bf.episode == 1 + assert bf.season == 1 + file_name = "海盗战记/海盗战记 S01E01.mp4" bf = torrent_parser(file_name) assert bf.title == "海盗战记"