From 2c80431314e744725e58b675c5c7f79d5584df3e Mon Sep 17 00:00:00 2001 From: annihilation7071 Date: Sun, 19 Jan 2025 19:51:23 +0300 Subject: [PATCH] v164 --- app.py | 8 +- backend/classes/db.py | 2 +- backend/classes/files.py | 2 +- backend/classes/projecte.py | 2 +- backend/classes/templates.py | 2 +- backend/db/connect.py | 2 +- backend/downloader.py | 2 +- backend/downloaders/gallerydl.py | 2 +- backend/downloaders/nhentai.py | 2 +- backend/editor/item_editor.py | 2 +- backend/editor/selector.py | 2 +- backend/editor/variants_editor.py | 2 +- backend/logger.py | 83 -------------- backend/modules/logger.py | 129 ++++++++++++++++++++++ backend/processors/gallery-dl-hitomila.py | 2 +- backend/processors/gallery-dl-nhentai.py | 2 +- backend/processors/general.py | 2 +- backend/processors/nhentai.py | 2 +- backend/projects/projects.py | 2 +- backend/projects/projects_utils.py | 2 +- backend/upgrade/vinfo.py | 2 +- backend/utils.py | 2 +- routers/extra.py | 2 +- routers/main.py | 5 +- static/favicon.ico | Bin 0 -> 10462 bytes 25 files changed, 160 insertions(+), 105 deletions(-) delete mode 100644 backend/logger.py create mode 100644 backend/modules/logger.py create mode 100644 static/favicon.ico diff --git a/app.py b/app.py index 9a5941f..27533a3 100644 --- a/app.py +++ b/app.py @@ -6,11 +6,12 @@ from backend.projects.projects import Projects from backend.projects.projects_utils import update_projects from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse from routers import main, extra import os import asyncio from backend import utils -from backend import logger +from backend.modules import logger log = logger.get_logger("App.app") @@ -53,6 +54,11 @@ async def lifespan(app: FastAPI): app.include_router(extra.router) +@app.get("/favicon.ico", include_in_schema=False) +async def favicon(): + return FileResponse("static/favicon.ico") + + if __name__ == "__main__": import uvicorn uvicorn.run(app, host="127.0.0.1", port=1707, log_level="debug") \ No newline at end of file diff --git a/backend/classes/db.py b/backend/classes/db.py index 19ff6ba..32880c8 100644 --- a/backend/classes/db.py +++ b/backend/classes/db.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, Integer, String, DateTime, Boolean, JSON from sqlalchemy.orm import DeclarativeBase -from backend import logger +from backend.modules import logger log = logger.get_logger("Classes.db") diff --git a/backend/classes/files.py b/backend/classes/files.py index 735922f..d9bf5b2 100644 --- a/backend/classes/files.py +++ b/backend/classes/files.py @@ -2,7 +2,7 @@ from pydantic import BaseModel, field_validator from pathlib import Path from pydantic_core.core_schema import ValidationInfo -from backend import logger +from backend.modules import logger from backend import utils from backend.classes.templates import ProjectTemplate import os diff --git a/backend/classes/projecte.py b/backend/classes/projecte.py index fcc6586..e9f48f9 100644 --- a/backend/classes/projecte.py +++ b/backend/classes/projecte.py @@ -8,7 +8,7 @@ from backend.classes.lib import Lib from backend.classes.files import ProjectInfoFile, ProjectInfoFileError import json -from backend import logger +from backend.modules import logger from backend import utils from sqlalchemy.orm import Session from backend.classes.templates import ProjectTemplateDB diff --git a/backend/classes/templates.py b/backend/classes/templates.py index 78f486f..23156d0 100644 --- a/backend/classes/templates.py +++ b/backend/classes/templates.py @@ -4,7 +4,7 @@ from dateutil import parser from pydantic import BaseModel, model_validator, ValidationInfo, field_validator from datetime import datetime -from backend import logger +from backend.modules import logger from backend import utils from pathlib import Path from typing import TYPE_CHECKING, Annotated diff --git a/backend/db/connect.py b/backend/db/connect.py index f072eb6..6681fce 100644 --- a/backend/db/connect.py +++ b/backend/db/connect.py @@ -1,6 +1,6 @@ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session -from backend import logger +from backend.modules import logger from backend.classes.db import Base log = logger.get_logger("DB") diff --git a/backend/downloader.py b/backend/downloader.py index 7a27a66..1d55176 100644 --- a/backend/downloader.py +++ b/backend/downloader.py @@ -8,7 +8,7 @@ from backend.downloaders.error import DownloaderError from backend.projects.projects import Projects from backend.projects.projects_utils import update_projects -from backend import logger +from backend.modules import logger log = logger.get_logger("Downloader.main") diff --git a/backend/downloaders/gallerydl.py b/backend/downloaders/gallerydl.py index f9ec175..dc570cd 100644 --- a/backend/downloaders/gallerydl.py +++ b/backend/downloaders/gallerydl.py @@ -1,7 +1,7 @@ from backend.utils import run_command import os import json -from backend import logger +from backend.modules import logger from backend.classes.lib import Lib log = logger.get_logger("Downloader.gallerydl") diff --git a/backend/downloaders/nhentai.py b/backend/downloaders/nhentai.py index 26eb355..8066de2 100644 --- a/backend/downloaders/nhentai.py +++ b/backend/downloaders/nhentai.py @@ -1,7 +1,7 @@ from backend.utils import run_command import os import json -from backend import logger +from backend.modules import logger from backend.classes.lib import Lib log = logger.get_logger("Downloader.nhentai") diff --git a/backend/editor/item_editor.py b/backend/editor/item_editor.py index 2bbec95..99a13e0 100644 --- a/backend/editor/item_editor.py +++ b/backend/editor/item_editor.py @@ -1,6 +1,6 @@ from backend import dep from backend.utils import tag_normalizer -from backend import logger +from backend.modules import logger from backend.classes.projecte import ProjectE, ProjectEPool from backend.classes.files import ProjectInfoFile from sqlalchemy.orm import Session diff --git a/backend/editor/selector.py b/backend/editor/selector.py index 3a05746..1249dee 100644 --- a/backend/editor/selector.py +++ b/backend/editor/selector.py @@ -1,6 +1,6 @@ from backend.editor import item_editor, variants_editor from backend.classes.projecte import ProjectE -from backend import logger +from backend.modules import logger from sqlalchemy.orm import Session from backend.modules.filesession import FSession diff --git a/backend/editor/variants_editor.py b/backend/editor/variants_editor.py index eab0181..fd50942 100644 --- a/backend/editor/variants_editor.py +++ b/backend/editor/variants_editor.py @@ -1,6 +1,6 @@ from backend import dep from backend.utils import tag_normalizer -from backend import logger +from backend.modules import logger from backend.classes.projecte import ProjectE, ProjectEPool from backend import utils from typing import TYPE_CHECKING diff --git a/backend/logger.py b/backend/logger.py deleted file mode 100644 index ff47396..0000000 --- a/backend/logger.py +++ /dev/null @@ -1,83 +0,0 @@ -import logging -import os -from logging.handlers import SocketHandler, RotatingFileHandler -from pathlib import Path -import shutil - - -path = Path("./logs") -shutil.rmtree(path, ignore_errors=True) -Path(path).mkdir(parents=True, exist_ok=True) - - -socket_handler = SocketHandler('127.0.0.1', 19996) -socket_handler.setLevel(logging.DEBUG) - - -def get_logger(name: str) -> logging.Logger: - if logging.Logger.manager.loggerDict.get(name): - return logging.Logger.manager.loggerDict.get(name) - - formatter = logging.Formatter(f"%(asctime)s %(levelname)-8s: {name}: %(message)s") - - file_handler = RotatingFileHandler(filename=f"./logs/{name}.log", mode="a", encoding="utf-8") - file_handler.setFormatter(formatter) - file_handler.setLevel(logging.DEBUG) - - file_handler_all = RotatingFileHandler(filename=f"./logs/All.log", mode="a", encoding="utf-8") - file_handler_all.setFormatter(formatter) - file_handler_all.setLevel(logging.DEBUG) - - stream_handler = logging.StreamHandler() - stream_handler.setFormatter(formatter) - stream_handler.setLevel(logging.INFO) - - # noinspection PyShadowingNames - log = logging.getLogger(name) - log.setLevel(logging.DEBUG) - log.addHandler(socket_handler) - log.addHandler(file_handler) - log.addHandler(file_handler_all) - log.addHandler(stream_handler) - - return log - - -# def log_exception(exc_type, exc_value, exc_tb): -# # noinspection PyShadowingNames -# log = logger.get_logger("General") -# -# log.error("Exception", exc_info=(exc_type, exc_value, exc_tb)) -# -# -# def thread_exceprion_hook(args): -# log_exception(args.exc_type, args.exc_value, args.exc_traceback) -# -# -# def handle_async_exception(loop, context): -# exc = context.get('exception') -# if exc: -# log_exception(type(exc), exc, exc.__traceback__) -# else: -# log.exception(f"Async exception: {context['message']}") - - -if __name__ == '__main__': - os.chdir(Path(os.getcwd()).parent) - - log = get_logger("Root logger") - - log.debug("A DEBUG Message") - log.info("An INFO") - log.warning("A WARNING") - log.error("An ERROR") - log.critical("A message of CRITICAL severity") - - try: - x = 5/0 - except ZeroDivisionError: - log.exception("An exception occurred") - raise - - - diff --git a/backend/modules/logger.py b/backend/modules/logger.py new file mode 100644 index 0000000..4b88f05 --- /dev/null +++ b/backend/modules/logger.py @@ -0,0 +1,129 @@ +import logging +import os +from logging.handlers import SocketHandler, RotatingFileHandler +from pathlib import Path +import shutil +from dataclasses import dataclass + + +@dataclass +class Settings: + path: str = "./logs" + + filehandler_separated: bool = True + filehandler_separated_level: int = logging.DEBUG + + filehandler_all: bool = True + filehandler_all_level: int = logging.DEBUG + + streamhandler: bool = True + streamhandler_level: int = logging.INFO + + sockethandler: bool = True + sockethandler_settings: str = '127.0.0.1:19996' + sockethandler_level: int = logging.DEBUG + + +settings = Settings() + +__init = False +__path: Path | None = None +__socket_handler: logging.Handler | None = None + + +def init(): + global __path + global __socket_handler + global __init + + if settings.filehandler_separated or settings.filehandler_all: + __path = Path(settings.path) + shutil.rmtree(__path, ignore_errors=True) + Path(__path).mkdir(parents=True, exist_ok=True) + + if settings.sockethandler: + ip = settings.sockethandler_settings.split(":")[0] + port = int(settings.sockethandler_settings.split(":")[1]) + __socket_handler = SocketHandler(ip, port) + __socket_handler.setLevel(settings.sockethandler_level) + + __init = True + + +def get_logger(name: str) -> logging.Logger: + if not __init: + init() + + if logging.Logger.manager.loggerDict.get(name): + return logging.Logger.manager.loggerDict.get(name) + + formatter = logging.Formatter(f"%(asctime)s %(levelname)-8s: {name}: %(message)s") + + # noinspection PyShadowingNames + log = logging.getLogger(name) + log.setLevel(logging.DEBUG) + + if settings.sockethandler: + log.addHandler(__socket_handler) + + if settings.filehandler_separated: + path = __path / f"{name}.log" + file_handler = RotatingFileHandler(filename=path, mode="a", encoding="utf-8") + file_handler.setFormatter(formatter) + file_handler.setLevel(settings.filehandler_separated_level) + log.addHandler(file_handler) + + if settings.filehandler_all: + path = __path / f"All.log" + file_handler_all = RotatingFileHandler(filename=path, mode="a", encoding="utf-8") + file_handler_all.setFormatter(formatter) + file_handler_all.setLevel(settings.filehandler_all_level) + log.addHandler(file_handler_all) + + if settings.streamhandler: + stream_handler = logging.StreamHandler() + stream_handler.setFormatter(formatter) + stream_handler.setLevel(settings.streamhandler_level) + log.addHandler(stream_handler) + + return log + + +# def log_exception(exc_type, exc_value, exc_tb): +# # noinspection PyShadowingNames +# log = logger.get_logger("General") +# +# log.error("Exception", exc_info=(exc_type, exc_value, exc_tb)) +# +# +# def thread_exceprion_hook(args): +# log_exception(args.exc_type, args.exc_value, args.exc_traceback) +# +# +# def handle_async_exception(loop, context): +# exc = context.get('exception') +# if exc: +# log_exception(type(exc), exc, exc.__traceback__) +# else: +# log.exception(f"Async exception: {context['message']}") + + +# if __name__ == '__main__': +# os.chdir(Path(os.getcwd()).parent) +# +# log = get_logger("Root logger") +# +# log.debug("A DEBUG Message") +# log.info("An INFO") +# log.warning("A WARNING") +# log.error("An ERROR") +# log.critical("A message of CRITICAL severity") +# +# try: +# x = 5/0 +# except ZeroDivisionError: +# log.exception("An exception occurred") +# raise + + + diff --git a/backend/processors/gallery-dl-hitomila.py b/backend/processors/gallery-dl-hitomila.py index db51e63..37b48a7 100644 --- a/backend/processors/gallery-dl-hitomila.py +++ b/backend/processors/gallery-dl-hitomila.py @@ -7,7 +7,7 @@ from backend import utils from backend.classes.templates import ProjectTemplate from pathlib import Path -from backend import logger +from backend.modules import logger from datetime import datetime log = logger.get_logger("Processor.gallery-dl-hitomila") diff --git a/backend/processors/gallery-dl-nhentai.py b/backend/processors/gallery-dl-nhentai.py index 34c20a1..4debf88 100644 --- a/backend/processors/gallery-dl-nhentai.py +++ b/backend/processors/gallery-dl-nhentai.py @@ -7,7 +7,7 @@ from backend import utils from backend.classes.templates import ProjectTemplate from pathlib import Path -from backend import logger +from backend.modules import logger from datetime import datetime log = logger.get_logger("Processor.gallery-dl-nhentai") diff --git a/backend/processors/general.py b/backend/processors/general.py index 851ab85..717b8b3 100644 --- a/backend/processors/general.py +++ b/backend/processors/general.py @@ -3,7 +3,7 @@ from backend import utils from backend.classes.templates import ProjectTemplate from pathlib import Path -from backend import logger +from backend.modules import logger from backend.modules.filesession import FSession from backend.upgrade.vinfo import upgrade from importlib import import_module diff --git a/backend/processors/nhentai.py b/backend/processors/nhentai.py index 11d7f6d..8dab7f7 100644 --- a/backend/processors/nhentai.py +++ b/backend/processors/nhentai.py @@ -6,7 +6,7 @@ from backend import utils from backend.classes.templates import ProjectTemplate from pathlib import Path -from backend import logger +from backend.modules import logger from datetime import datetime log = logger.get_logger("Processor.nhentai") diff --git a/backend/projects/projects.py b/backend/projects/projects.py index 7714b96..0aecae4 100644 --- a/backend/projects/projects.py +++ b/backend/projects/projects.py @@ -8,7 +8,7 @@ from icecream import ic from backend.classes.projecte import ProjectE, ProjectEPool from backend.classes.templates import ProjectTemplateDB -from backend import logger +from backend.modules import logger from sqlalchemy.orm import Session from sqlalchemy import select, delete, update from backend.projects import projects_utils diff --git a/backend/projects/projects_utils.py b/backend/projects/projects_utils.py index fc411e2..19faa8b 100644 --- a/backend/projects/projects_utils.py +++ b/backend/projects/projects_utils.py @@ -3,7 +3,7 @@ import os from importlib import import_module from backend import utils, cmdargs -from backend import logger +from backend.modules import logger from backend.upgrade import vinfo from backend.processors import general as general import json diff --git a/backend/upgrade/vinfo.py b/backend/upgrade/vinfo.py index 203ec67..542d276 100644 --- a/backend/upgrade/vinfo.py +++ b/backend/upgrade/vinfo.py @@ -1,7 +1,7 @@ from backend import utils from pathlib import Path from backend.classes.templates import ProjectTemplate -from backend import logger +from backend.modules import logger from backend.classes.files import ProjectInfoFile log = logger.get_logger("Upgrader") diff --git a/backend/utils.py b/backend/utils.py index 36770ca..11342a1 100644 --- a/backend/utils.py +++ b/backend/utils.py @@ -7,7 +7,7 @@ import imagehash from pathlib import Path import asyncio -from backend import logger +from backend.modules import logger from backend.classes.templates import ProjectTemplate, ProjectTemplateDB from backend.classes.db import Project from backend.classes.templates import ProjectTemplate diff --git a/routers/extra.py b/routers/extra.py index 2c0fa00..042f868 100644 --- a/routers/extra.py +++ b/routers/extra.py @@ -3,7 +3,7 @@ from backend.projects.projects import Projects, Project from backend import utils, downloader from sqlalchemy import func, select -from backend import logger +from backend.modules import logger log = logger.get_logger("App.routers.extra") diff --git a/routers/main.py b/routers/main.py index 448f4ab..9f98e55 100644 --- a/routers/main.py +++ b/routers/main.py @@ -10,7 +10,8 @@ from urllib.parse import quote, unquote import mimetypes from backend.editor import selector as edit_selector -from backend import logger +from backend.modules import logger +from datetime import datetime log = logger.get_logger("App.routers.main") @@ -56,12 +57,14 @@ def get_with_cache(project_lid: str): @router.get("/", response_class=HTMLResponse, name="index") async def index(request: Request, page: int = 1, search: str = ""): log.debug(f"index") + timer = datetime.now() search_query = search.strip().lower() displayed_projects = projects.get_page(PPG, page=page, search=search_query) total_pages = (projects.len() + PPG - 1) // PPG visible_pages = get_visible_pages(page, total_pages) + log.debug(f"Loading time: {datetime.now() - timer}") return templates.TemplateResponse( "index.html", diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..21c26ba44109494abd2a1f07d60d581fd272b617 GIT binary patch literal 10462 zcmeI2O>az57{^bw+7UseArhr6i`rD8U!YbcVaLMDLL`Dn6FU(LGXxQl_y896gr$Ta zZdV)uP$T_id$?q_3K)@2uv^vBoq7uEBtK=nOTob%b4!Ow0W=>a$6R=UeNhO6$) z=Qq@6I@5Q-Rv=LhZ@^`BQi#?e%N(>XKZBRxBG?WR*+JtyP;P^Xa*=$EasFI?M0XNw z20EvqWdjCpfTV8SOX*+}$k5{6=5%l}64o*jMFyO{@!Wz`?7_L5x_B1{;S0O~t2RBCTGs$b<>O;15rnR>Q zKq&F|Os6&c0}d5?Qm-blc?sy8gcj99H{M?B;68jBYy-=!u93-q-#OmM!Ojz#U#~uJ zZ&I)38P;$gscu(*ySEi3Zi}sj*UJ`#s76}P`x?_#zC{xt6F)qbgdcqZ)PBhrEKc)95c}smE#}u+AN!di`8*vq{=g} z?l1IJ*;wvySbo$Of44mAamDs!Pxr<4^=t1D`epbQT;l)v^}%#IV=hLO5&X7CQAymv z2Sr$Kg;AB``02;_6pC0zzeXP5F3XHpKQcwjc6`b5PRrev?f58;v>K26DZZG?mKDGB HvDD{(uBiy2 literal 0 HcmV?d00001