diff --git a/core/adb_handlers/campaign.py b/core/adb_handlers/campaign.py index a1a372e..529bcab 100644 --- a/core/adb_handlers/campaign.py +++ b/core/adb_handlers/campaign.py @@ -1,4 +1,4 @@ -from construct import Struct, Int16ul, Padding, Bytes, Int32ul, Int32sl +from construct import Struct, Padding, Bytes, Int32ul, Int32sl from .base import * diff --git a/core/adb_handlers/felica.py b/core/adb_handlers/felica.py index 479e84d..492313d 100644 --- a/core/adb_handlers/felica.py +++ b/core/adb_handlers/felica.py @@ -1,4 +1,4 @@ -from construct import Struct, Int32sl, Padding, Int8ub, Int16sl +from construct import Struct, Int32sl, Padding, Int8ub from typing import Union from .base import * diff --git a/core/aimedb.py b/core/aimedb.py index 08a1b65..00103ee 100644 --- a/core/aimedb.py +++ b/core/aimedb.py @@ -1,9 +1,8 @@ -import logging, coloredlogs from Crypto.Cipher import AES from typing import Dict, Tuple, Callable, Union, Optional import asyncio -from logging.handlers import TimedRotatingFileHandler +import core.logger from core.config import CoreConfig from core.utils import create_sega_auth_key from core.data import Data @@ -14,30 +13,7 @@ class AimedbServlette(): def __init__(self, core_cfg: CoreConfig) -> None: self.config = core_cfg self.data = Data(core_cfg) - - self.logger = logging.getLogger("aimedb") - if not hasattr(self.logger, "initted"): - log_fmt_str = "[%(asctime)s] Aimedb | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "aimedb"), - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.config.aimedb.loglevel) - coloredlogs.install( - level=core_cfg.aimedb.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.initted = True + self.logger = core.logger.create_logger("AimeDB", core_cfg, core_cfg.aimedb.loglevel) if not core_cfg.aimedb.key: self.logger.error("!!!KEY NOT SET!!!") diff --git a/core/allnet.py b/core/allnet.py index 5df4700..c4025cf 100644 --- a/core/allnet.py +++ b/core/allnet.py @@ -4,11 +4,9 @@ import zlib import json import yaml import logging -import coloredlogs import urllib.parse import math from typing import Dict, List, Any, Optional, Union, Final -from logging.handlers import TimedRotatingFileHandler from starlette.requests import Request from starlette.responses import PlainTextResponse from starlette.applications import Starlette @@ -20,6 +18,7 @@ from Crypto.Hash import SHA from Crypto.Signature import PKCS1_v1_5 from os import path, environ, mkdir, access, W_OK +import core.logger from .config import CoreConfig from .utils import Utils from .data import Data @@ -99,30 +98,11 @@ class AllnetServlet: self.config = core_cfg self.config_folder = cfg_folder self.data = Data(core_cfg) - - self.logger = logging.getLogger("allnet") - if not hasattr(self.logger, "initialized"): - log_fmt_str = "[%(asctime)s] Allnet | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "allnet"), - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(core_cfg.allnet.loglevel) - coloredlogs.install( - level=core_cfg.allnet.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.initialized = True + self.logger = core.logger.create_logger( + "Allnet", + core_cfg, + core_cfg.allnet.loglevel, + ) def startup(self) -> None: self.logger.info(f"Ready on port {self.config.allnet.port if self.config.allnet.standalone else self.config.server.port}") @@ -454,30 +434,7 @@ class BillingServlet: self.config = core_cfg self.config_folder = cfg_folder self.data = Data(core_cfg) - - self.logger = logging.getLogger("billing") - if not hasattr(self.logger, "initialized"): - log_fmt_str = "[%(asctime)s] Billing | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "billing"), - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(core_cfg.allnet.loglevel) - coloredlogs.install( - level=core_cfg.billing.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.initialized = True + self.logger = core.logger.create_logger("Billing", core_cfg, core_cfg.billing.loglevel) def startup(self) -> None: self.logger.info(f"Ready on port {self.config.billing.port if self.config.billing.standalone else self.config.server.port}") diff --git a/core/app.py b/core/app.py index e4d3330..3abf2cf 100644 --- a/core/app.py +++ b/core/app.py @@ -1,7 +1,5 @@ import yaml import logging -import coloredlogs -from logging.handlers import TimedRotatingFileHandler from starlette.routing import Route from starlette.requests import Request from starlette.applications import Starlette @@ -9,7 +7,7 @@ from starlette.responses import PlainTextResponse from os import environ, path, mkdir, W_OK, access from typing import List -from core import CoreConfig, TitleServlet, MuchaServlet, AllnetServlet, BillingServlet, AimedbServlette +from core import CoreConfig, TitleServlet, MuchaServlet, AllnetServlet, BillingServlet, logger from core.frontend import FrontendServlet async def dummy_rt(request: Request): @@ -29,24 +27,11 @@ if not access(cfg.server.log_dir, W_OK): ) exit(1) -logger = logging.getLogger("core") -log_fmt_str = "[%(asctime)s] Core | %(levelname)s | %(message)s" -log_fmt = logging.Formatter(log_fmt_str) - -fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(cfg.server.log_dir, "core"), when="d", backupCount=10 +logger = logger.create_logger( + "Core", + cfg, + logging.DEBUG if cfg.server.is_develop else logging.INFO, ) -fileHandler.setFormatter(log_fmt) - -consoleHandler = logging.StreamHandler() -consoleHandler.setFormatter(log_fmt) - -logger.addHandler(fileHandler) -logger.addHandler(consoleHandler) - -log_lv = logging.DEBUG if cfg.server.is_develop else logging.INFO -logger.setLevel(log_lv) -coloredlogs.install(level=log_lv, logger=logger, fmt=log_fmt_str) logger.info(f"Artemis starting in {'develop' if cfg.server.is_develop else 'production'} mode") diff --git a/core/config.py b/core/config.py index 3d7b919..d351ae7 100644 --- a/core/config.py +++ b/core/config.py @@ -1,4 +1,5 @@ -import logging, os +import logging +import os from typing import Any class ServerConfig: diff --git a/core/data/alembic/versions/81e44dd6047a_mai2_buddies_support.py b/core/data/alembic/versions/81e44dd6047a_mai2_buddies_support.py index 04d2217..1e24430 100644 --- a/core/data/alembic/versions/81e44dd6047a_mai2_buddies_support.py +++ b/core/data/alembic/versions/81e44dd6047a_mai2_buddies_support.py @@ -8,7 +8,6 @@ Create Date: 2024-03-12 19:10:37.063907 from alembic import op import sqlalchemy as sa -from sqlalchemy.dialects import mysql # revision identifiers, used by Alembic. revision = "81e44dd6047a" diff --git a/core/data/alembic/versions/835b862f9bf0_initial_migration.py b/core/data/alembic/versions/835b862f9bf0_initial_migration.py index bea17d7..cf1aa24 100644 --- a/core/data/alembic/versions/835b862f9bf0_initial_migration.py +++ b/core/data/alembic/versions/835b862f9bf0_initial_migration.py @@ -5,8 +5,6 @@ Revises: Create Date: 2024-01-09 13:06:10.787432 """ -from alembic import op -import sqlalchemy as sa # revision identifiers, used by Alembic. diff --git a/core/data/cache.py b/core/data/cache.py index 1490826..68cda51 100644 --- a/core/data/cache.py +++ b/core/data/cache.py @@ -2,7 +2,8 @@ from typing import Any, Callable from functools import wraps import hashlib import pickle -import logging + +import core.logger from core.config import CoreConfig cfg: CoreConfig = None # type: ignore @@ -39,11 +40,11 @@ def cached(lifetime: int = 10, extra_key: Any = None) -> Callable: try: result = memcache.get(cache_key) except pylibmc.Error as e: - logging.getLogger("database").error(f"Memcache failed: {e}") + core.logger.create_logger("Database").error(f"Memcache failed: {e}") result = None if result is not None: - logging.getLogger("database").debug(f"Cache hit: {result}") + core.logger.create_logger("Database").debug(f"Cache hit: {result}") return result # Generate output @@ -51,7 +52,7 @@ def cached(lifetime: int = 10, extra_key: Any = None) -> Callable: # Cache output if allowed if lifetime is not None and result is not None: - logging.getLogger("database").debug(f"Setting cache: {result}") + core.logger.create_logger("Database").debug(f"Setting cache: {result}") memcache.set(cache_key, result, lifetime) return result diff --git a/core/data/database.py b/core/data/database.py index bd6c4f2..21f9c42 100644 --- a/core/data/database.py +++ b/core/data/database.py @@ -1,15 +1,13 @@ -import logging, coloredlogs from typing import Optional from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy import create_engine -from logging.handlers import TimedRotatingFileHandler import os import secrets, string import bcrypt from hashlib import sha256 import alembic.config -import glob +import core.logger from core.config import CoreConfig from core.data.schema import * from core.utils import Utils @@ -51,31 +49,7 @@ class Data: if Data.base is None: Data.base = BaseData(self.config, self.session) - self.logger = logging.getLogger("database") - - # Prevent the logger from adding handlers multiple times - if not getattr(self.logger, "handler_set", None): - log_fmt_str = "[%(asctime)s] %(levelname)s | Database | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "db"), - encoding="utf-8", - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.config.database.loglevel) - coloredlogs.install( - cfg.database.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.handler_set = True # type: ignore + self.logger = core.logger.create_logger("Database", cfg, cfg.database.loglevel) def __alembic_cmd(self, command: str, *args: str) -> None: old_dir = os.path.abspath(os.path.curdir) diff --git a/core/data/schema/arcade.py b/core/data/schema/arcade.py index 680f827..389532d 100644 --- a/core/data/schema/arcade.py +++ b/core/data/schema/arcade.py @@ -1,8 +1,8 @@ -from typing import Optional, Dict, List +from typing import Optional, List from sqlalchemy import Table, Column, and_, or_ from sqlalchemy.sql.schema import ForeignKey, PrimaryKeyConstraint from sqlalchemy.types import Integer, String, Boolean, JSON -from sqlalchemy.sql import func, select +from sqlalchemy.sql import select from sqlalchemy.dialects.mysql import insert from sqlalchemy.engine import Row import re diff --git a/core/data/schema/base.py b/core/data/schema/base.py index 55eceaf..0219d94 100644 --- a/core/data/schema/base.py +++ b/core/data/schema/base.py @@ -1,16 +1,14 @@ import json -import logging from random import randrange from typing import Any, Optional, Dict, List -from sqlalchemy.engine import Row from sqlalchemy.engine.cursor import CursorResult from sqlalchemy.engine.base import Connection -from sqlalchemy.sql import text, func, select +from sqlalchemy.sql import text, func from sqlalchemy.exc import SQLAlchemyError from sqlalchemy import MetaData, Table, Column from sqlalchemy.types import Integer, String, TIMESTAMP, JSON -from sqlalchemy.dialects.mysql import insert +import core.logger from core.config import CoreConfig metadata = MetaData() @@ -33,7 +31,7 @@ class BaseData: def __init__(self, cfg: CoreConfig, conn: Connection) -> None: self.config = cfg self.conn = conn - self.logger = logging.getLogger("database") + self.logger = core.logger.create_logger("Database", cfg, cfg.database.loglevel) async def execute(self, sql: str, opts: Dict[str, Any] = {}) -> Optional[CursorResult]: res = None diff --git a/core/data/schema/card.py b/core/data/schema/card.py index c31e1b2..fa102ae 100644 --- a/core/data/schema/card.py +++ b/core/data/schema/card.py @@ -1,4 +1,4 @@ -from typing import Dict, List, Optional +from typing import List, Optional from sqlalchemy import Table, Column, UniqueConstraint from sqlalchemy.types import Integer, String, Boolean, TIMESTAMP from sqlalchemy.sql.schema import ForeignKey diff --git a/core/frontend.py b/core/frontend.py index 9a00ca5..a546e11 100644 --- a/core/frontend.py +++ b/core/frontend.py @@ -1,10 +1,9 @@ -import logging, coloredlogs +import logging from typing import Any, Dict, List, Union, Optional from starlette.requests import Request from starlette.routing import Route, Mount from starlette.responses import Response, PlainTextResponse, RedirectResponse from starlette.applications import Starlette -from logging.handlers import TimedRotatingFileHandler import jinja2 import bcrypt import re @@ -18,7 +17,7 @@ from enum import Enum from datetime import datetime, timezone from os import path, environ, mkdir, W_OK, access -from core import CoreConfig, Utils +from core import CoreConfig, Utils, logger from core.data import Data class PermissionOffset(Enum): @@ -53,33 +52,10 @@ class UserSession(): class FrontendServlet(): def __init__(self, cfg: CoreConfig, config_dir: str) -> None: self.config = cfg - log_fmt_str = "[%(asctime)s] Frontend | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) self.environment = jinja2.Environment(loader=jinja2.FileSystemLoader(".")) self.game_list: Dict[str, Dict[str, Any]] = {} - self.sn_cvt: Dict[str, str] = {} - - self.logger = logging.getLogger("frontend") - if not hasattr(self.logger, "inited"): - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "frontend"), - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(cfg.frontend.loglevel) - coloredlogs.install( - level=cfg.frontend.loglevel, logger=self.logger, fmt=log_fmt_str - ) - - self.logger.inited = True + self.sn_cvt: Dict[str, str] = {} + self.logger = logger.create_logger("Frontend", cfg, cfg.frontend.loglevel) games = Utils.get_all_titles() for game_dir, game_mod in games.items(): @@ -174,7 +150,7 @@ class FE_Base(): def __init__(self, cfg: CoreConfig, environment: jinja2.Environment) -> None: self.core_config = cfg self.data = Data(cfg) - self.logger = logging.getLogger("frontend") + self.logger = logger.create_logger("Frontend", cfg, cfg.frontend.loglevel) self.environment = environment self.nav_name = "index" diff --git a/core/logger.py b/core/logger.py new file mode 100644 index 0000000..c4b6b9b --- /dev/null +++ b/core/logger.py @@ -0,0 +1,54 @@ +import logging +import logging.handlers +import os +from typing import TYPE_CHECKING, Optional + +import coloredlogs + +if TYPE_CHECKING: + from core.config import CoreConfig + +__all__ = ( + "create_logger", +) + +log_fmt_str = "[%(asctime)s] %(title)s | %(levelname)s | %(message)s" +log_fmt = logging.Formatter(log_fmt_str) + +console_handler = logging.StreamHandler() +console_handler.setFormatter(log_fmt) + +artemis_logger = logging.getLogger("artemis") +artemis_logger.addHandler(console_handler) + +def create_logger( + title: str, + config: Optional["CoreConfig"] = None, + level: Optional[str] = None, + *, + logger_name: Optional[str] = None, +): + logger_name = logger_name or title.lower().replace(" ", "_") + logger = artemis_logger.getChild(logger_name) + + if getattr(logger, "initialized", False): + return logging.LoggerAdapter(logger, {"title": title}) + + if config is None: + raise ValueError("Logger has not been initialized, but no configuration was passed.") + + file_handler = logging.handlers.TimedRotatingFileHandler( + os.path.join(config.server.log_dir, f"{logger_name}.log"), + when="d", + backupCount=10, + ) + file_handler.setFormatter(log_fmt) + + logger.addHandler(file_handler) + logger.setLevel(level or logging.INFO) + + logger.initialized = True + + coloredlogs.install(level=level, logger=logger, fmt=log_fmt_str) + + return logging.LoggerAdapter(logger, {"title": title}) diff --git a/core/mucha.py b/core/mucha.py index 22e4789..37979fe 100644 --- a/core/mucha.py +++ b/core/mucha.py @@ -1,12 +1,11 @@ from typing import Dict, Any, Optional -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler from starlette.requests import Request from starlette.responses import PlainTextResponse from datetime import datetime from Crypto.Cipher import Blowfish import pytz +import core.logger from .config import CoreConfig from .utils import Utils from .title import TitleServlet @@ -18,27 +17,7 @@ class MuchaServlet: def __init__(self, cfg: CoreConfig, cfg_dir: str) -> None: self.config = cfg self.config_dir = cfg_dir - - self.logger = logging.getLogger("mucha") - log_fmt_str = "[%(asctime)s] Mucha | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "mucha"), - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(cfg.mucha.loglevel) - coloredlogs.install(level=cfg.mucha.loglevel, logger=self.logger, fmt=log_fmt_str) - + self.logger = core.logger.create_logger("Mucha", cfg, cfg.mucha.loglevel) self.data = Data(cfg) for _, mod in TitleServlet.title_registry.items(): diff --git a/core/title.py b/core/title.py index 7aeb433..9f91e37 100644 --- a/core/title.py +++ b/core/title.py @@ -1,11 +1,10 @@ from typing import Dict, List, Tuple, Any import json -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler from starlette.requests import Request from starlette.responses import Response from starlette.routing import Route +import core.logger from core.config import CoreConfig from core.data import Data from core.utils import Utils @@ -23,7 +22,7 @@ class BaseServlet: def __init__(self, core_cfg: CoreConfig, cfg_dir: str) -> None: self.core_cfg = core_cfg self.game_cfg = None - self.logger = logging.getLogger("title") + self.logger = core.logger.create_logger("Title", core_cfg, core_cfg.title.loglevel) @classmethod def is_game_enabled(cls, game_code: str, core_cfg: CoreConfig, cfg_dir: str) -> bool: @@ -99,30 +98,7 @@ class TitleServlet: self.config = core_cfg self.config_folder = cfg_folder self.data = Data(core_cfg) - - self.logger = logging.getLogger("title") - if not hasattr(self.logger, "initialized"): - log_fmt_str = "[%(asctime)s] Title | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.config.server.log_dir, "title"), - when="d", - backupCount=10, - ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(core_cfg.title.loglevel) - coloredlogs.install( - level=core_cfg.title.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.initialized = True + self.logger = core.logger.create_logger("Title", core_cfg, core_cfg.title.loglevel) plugins = Utils.get_all_titles() diff --git a/core/utils.py b/core/utils.py index a9d1705..e250ac9 100644 --- a/core/utils.py +++ b/core/utils.py @@ -8,6 +8,7 @@ import jwt from base64 import b64decode from datetime import datetime, timezone +import core.logger from .config import CoreConfig class Utils: @@ -28,7 +29,7 @@ class Utils: ret[dir] = mod except ImportError as e: - logging.getLogger("core").error(f"get_all_titles: {dir} - {e}") + core.logger.create_logger("Core").error(f"get_all_titles: {dir} - {e}") raise return ret diff --git a/dbutils.py b/dbutils.py index 955e509..70e4ae5 100644 --- a/dbutils.py +++ b/dbutils.py @@ -1,10 +1,10 @@ #!/usr/bin/env python3 import argparse -import logging from os import mkdir, path, access, W_OK import yaml import asyncio +import core.logger from core.data import Data from core.config import CoreConfig @@ -41,6 +41,7 @@ if __name__ == "__main__": exit(1) data = Data(cfg) + database_logger = core.logger.create_logger("Database", cfg, cfg.database.loglevel) if args.action == "create": data.create_database() @@ -50,7 +51,7 @@ if __name__ == "__main__": elif args.action == "downgrade": if not args.version: - logging.getLogger("database").error(f"Version argument required for downgrade") + database_logger.error("Version argument required for downgrade") exit(1) data.schema_downgrade(args.version) @@ -71,4 +72,4 @@ if __name__ == "__main__": loop.run_until_complete(data.create_revision_auto(args.message)) else: - logging.getLogger("database").info(f"Unknown action {args.action}") + database_logger.info(f"Unknown action {args.action}") diff --git a/index.py b/index.py index 40a1bbd..b14972c 100644 --- a/index.py +++ b/index.py @@ -3,10 +3,9 @@ import argparse import yaml from os import path, environ import uvicorn -import logging import asyncio -from core import CoreConfig, AimedbServlette +from core import CoreConfig, AimedbServlette, logger async def launch_main(cfg: CoreConfig, ssl: bool) -> None: if ssl: @@ -86,7 +85,7 @@ async def launcher(cfg: CoreConfig, ssl: bool) -> None: return_when=asyncio.FIRST_COMPLETED, ) - logging.getLogger("core").info("Shutdown") + logger.create_logger("Core").info("Shutdown") for pending_task in pending: pending_task.cancel("Another service died, server is shutting down") diff --git a/read.py b/read.py index 8a0ae72..1bf2aae 100644 --- a/read.py +++ b/read.py @@ -5,13 +5,11 @@ import os import yaml from os import path import logging -import coloredlogs import asyncio -from logging.handlers import TimedRotatingFileHandler from typing import List, Optional -from core import CoreConfig, Utils +from core import CoreConfig, Utils, logger class BaseReader: @@ -23,8 +21,8 @@ class BaseReader: opt_dir: Optional[str], extra: Optional[str], ) -> None: - self.logger = logging.getLogger("reader") self.config = config + self.logger = logger.create_logger("Reader") self.bin_dir = bin_dir self.opt_dir = opt_dir self.version = version @@ -94,24 +92,11 @@ if __name__ == "__main__": if path.exists(f"{args.config}/core.yaml"): config.update(yaml.safe_load(open(f"{args.config}/core.yaml"))) - log_fmt_str = "[%(asctime)s] Reader | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - logger = logging.getLogger("reader") - - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(config.server.log_dir, "reader"), when="d", backupCount=10 + logger = logger.create_logger( + "Reader", + config, + logging.DEBUG if config.server.is_develop else logging.INFO ) - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - logger.addHandler(fileHandler) - logger.addHandler(consoleHandler) - - log_lv = logging.DEBUG if config.server.is_develop else logging.INFO - logger.setLevel(log_lv) - coloredlogs.install(level=log_lv, logger=logger, fmt=log_fmt_str) if args.game is None or args.version is None: logger.error("Game or version not specified") diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..60ebf85 --- /dev/null +++ b/shell.nix @@ -0,0 +1,35 @@ +let + pkgs = import { }; + pythonPackages = pkgs.python39Packages; +in +pkgs.mkShell { + name = "artemis"; + venvDir = "./.venv"; + + NIX_LD = pkgs.lib.fileContents "${pkgs.stdenv.cc}/nix-support/dynamic-linker"; + NIX_LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ + pkgs.stdenv.cc.cc + pkgs.zlib + ]; + + buildInputs = with pkgs; [ + pythonPackages.python + pythonPackages.venvShellHook + zlib + ruff + ]; + + nativeBuildInputs = with pkgs; [ + libmysqlclient + pkg-config + ]; + + postVenvCreation = '' + unset SOURCE_DATE_EPOCH + pip install -r requirements.txt + ''; + + postShellHook = '' + export LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH + ''; +} \ No newline at end of file diff --git a/titles/chuni/amazon.py b/titles/chuni/amazon.py index 84f5a12..5510c3e 100644 --- a/titles/chuni/amazon.py +++ b/titles/chuni/amazon.py @@ -1,6 +1,4 @@ -from datetime import datetime, timedelta -from typing import Dict, Any -import pytz +from typing import Dict from core.config import CoreConfig from titles.chuni.base import ChuniBase diff --git a/titles/chuni/amazonplus.py b/titles/chuni/amazonplus.py index 9ce13cf..38db797 100644 --- a/titles/chuni/amazonplus.py +++ b/titles/chuni/amazonplus.py @@ -1,6 +1,4 @@ -from datetime import datetime, timedelta -from typing import Dict, Any -import pytz +from typing import Dict from core.config import CoreConfig from titles.chuni.base import ChuniBase diff --git a/titles/chuni/base.py b/titles/chuni/base.py index c3b9ca2..2a26118 100644 --- a/titles/chuni/base.py +++ b/titles/chuni/base.py @@ -1,11 +1,9 @@ -import logging -import json from datetime import datetime, timedelta -from time import strftime import pytz from typing import Dict, Any, List +import core.logger from core.config import CoreConfig from titles.chuni.const import ChuniConstants from titles.chuni.database import ChuniData @@ -18,7 +16,7 @@ class ChuniBase: self.game_cfg = game_cfg self.data = ChuniData(core_cfg) self.date_time_format = "%Y-%m-%d %H:%M:%S" - self.logger = logging.getLogger("chuni") + self.logger = core.logger.create_logger("Chunithm", logger_name="chuni") self.game = ChuniConstants.GAME_CODE self.version = ChuniConstants.VER_CHUNITHM diff --git a/titles/chuni/crystal.py b/titles/chuni/crystal.py index 9c08fd7..2a784e6 100644 --- a/titles/chuni/crystal.py +++ b/titles/chuni/crystal.py @@ -1,6 +1,4 @@ -from datetime import datetime, timedelta -from typing import Dict, Any -import pytz +from typing import Dict from core.config import CoreConfig from titles.chuni.base import ChuniBase diff --git a/titles/chuni/crystalplus.py b/titles/chuni/crystalplus.py index 90a0479..f7db129 100644 --- a/titles/chuni/crystalplus.py +++ b/titles/chuni/crystalplus.py @@ -1,6 +1,4 @@ -from datetime import datetime, timedelta -from typing import Dict, Any -import pytz +from typing import Dict from core.config import CoreConfig from titles.chuni.base import ChuniBase diff --git a/titles/chuni/index.py b/titles/chuni/index.py index b102d5e..bcc6146 100644 --- a/titles/chuni/index.py +++ b/titles/chuni/index.py @@ -1,8 +1,6 @@ from starlette.requests import Request from starlette.routing import Route from starlette.responses import Response -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler import zlib import yaml import json @@ -15,7 +13,7 @@ from Crypto.Hash import SHA1 from os import path from typing import Tuple, Dict, List -from core import CoreConfig, Utils +from core import CoreConfig, Utils, logger from core.title import BaseServlet from .config import ChuniConfig from .const import ChuniConstants @@ -63,31 +61,12 @@ class ChuniServlet(BaseServlet): ChuniSunPlus, ] - self.logger = logging.getLogger("chuni") - - if not hasattr(self.logger, "inited"): - log_fmt_str = "[%(asctime)s] Chunithm | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "chuni"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.inited = True + self.logger = logger.create_logger( + "Chunithm", + core_cfg, + self.game_cfg.server.loglevel, + logger_name="chuni", + ) for version, keys in self.game_cfg.crypto.keys.items(): if len(keys) < 3: diff --git a/titles/chuni/new.py b/titles/chuni/new.py index 9709f00..2e754be 100644 --- a/titles/chuni/new.py +++ b/titles/chuni/new.py @@ -1,9 +1,9 @@ -import logging from datetime import datetime, timedelta from random import randint from typing import Dict import pytz +import core.logger from core.config import CoreConfig from core.utils import Utils from titles.chuni.const import ChuniConstants @@ -19,7 +19,7 @@ class ChuniNew(ChuniBase): self.game_cfg = game_cfg self.data = ChuniData(core_cfg) self.date_time_format = "%Y-%m-%d %H:%M:%S" - self.logger = logging.getLogger("chuni") + self.logger = core.logger.create_logger("Chunithm", logger_name="chuni") self.game = ChuniConstants.GAME_CODE self.version = ChuniConstants.VER_CHUNITHM_NEW diff --git a/titles/chuni/newplus.py b/titles/chuni/newplus.py index 84467fb..98725c2 100644 --- a/titles/chuni/newplus.py +++ b/titles/chuni/newplus.py @@ -1,6 +1,5 @@ -from typing import Dict, Any +from typing import Dict -from core.utils import Utils from core.config import CoreConfig from titles.chuni.new import ChuniNew from titles.chuni.const import ChuniConstants diff --git a/titles/chuni/paradise.py b/titles/chuni/paradise.py index 88ed91c..330e14a 100644 --- a/titles/chuni/paradise.py +++ b/titles/chuni/paradise.py @@ -1,6 +1,4 @@ -from datetime import datetime, timedelta -from typing import Dict, Any -import pytz +from typing import Dict from core.config import CoreConfig from titles.chuni.base import ChuniBase diff --git a/titles/chuni/schema/item.py b/titles/chuni/schema/item.py index 5077e14..f778454 100644 --- a/titles/chuni/schema/item.py +++ b/titles/chuni/schema/item.py @@ -8,7 +8,6 @@ from sqlalchemy import ( delete, ) from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON -from sqlalchemy.engine.base import Connection from sqlalchemy.schema import ForeignKey from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert diff --git a/titles/chuni/schema/profile.py b/titles/chuni/schema/profile.py index 9864928..341b1b2 100644 --- a/titles/chuni/schema/profile.py +++ b/titles/chuni/schema/profile.py @@ -3,7 +3,7 @@ from sqlalchemy import Table, Column, UniqueConstraint, and_ from sqlalchemy.types import Integer, String, Boolean, JSON, BigInteger from sqlalchemy.schema import ForeignKey from sqlalchemy.engine import Row -from sqlalchemy.sql import select, delete +from sqlalchemy.sql import select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/chuni/schema/score.py b/titles/chuni/schema/score.py index 0a6424c..b8fc6cb 100644 --- a/titles/chuni/schema/score.py +++ b/titles/chuni/schema/score.py @@ -1,12 +1,10 @@ from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, BigInteger -from sqlalchemy.engine.base import Connection +from sqlalchemy import Table, Column, UniqueConstraint +from sqlalchemy.types import Integer, String, Boolean from sqlalchemy.schema import ForeignKey from sqlalchemy.engine import Row from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert -from sqlalchemy.sql.expression import exists from core.data.schema import BaseData, metadata course = Table( diff --git a/titles/chuni/schema/static.py b/titles/chuni/schema/static.py index ed67b5d..b4a7b05 100644 --- a/titles/chuni/schema/static.py +++ b/titles/chuni/schema/static.py @@ -7,13 +7,10 @@ from sqlalchemy import ( PrimaryKeyConstraint, and_, ) -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float -from sqlalchemy.engine.base import Connection +from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, Float from sqlalchemy.engine import Row -from sqlalchemy.schema import ForeignKey from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert -from datetime import datetime from core.data.schema import BaseData, metadata diff --git a/titles/chuni/sun.py b/titles/chuni/sun.py index 94dc1eb..0270d76 100644 --- a/titles/chuni/sun.py +++ b/titles/chuni/sun.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.chuni.newplus import ChuniNewPlus diff --git a/titles/chuni/sunplus.py b/titles/chuni/sunplus.py index 1f3f271..7678dd2 100644 --- a/titles/chuni/sunplus.py +++ b/titles/chuni/sunplus.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.chuni.sun import ChuniSun diff --git a/titles/cm/base.py b/titles/cm/base.py index e4fd1cb..1244595 100644 --- a/titles/cm/base.py +++ b/titles/cm/base.py @@ -1,13 +1,10 @@ -from datetime import date, datetime, timedelta -from typing import Any, Dict, List -import json -import logging -from enum import Enum +from datetime import datetime, timedelta +from typing import Dict import pytz +import core.logger from core.config import CoreConfig from core.utils import Utils -from core.data.cache import cached from titles.cm.const import CardMakerConstants from titles.cm.config import CardMakerConfig @@ -21,7 +18,7 @@ class CardMakerBase: "%Y-%m-%d %H:%M:%S.%f" # needs to be lopped off at [:-5] ) self.date_time_format_short = "%Y-%m-%d" - self.logger = logging.getLogger("cardmaker") + self.logger = core.logger.create_logger("Card Maker", core_cfg, game_cfg.server.loglevel, logger_name="cardmaker") self.game = CardMakerConstants.GAME_CODE self.version = CardMakerConstants.VER_CARD_MAKER diff --git a/titles/cm/cm135.py b/titles/cm/cm135.py index 5bc5460..957802d 100644 --- a/titles/cm/cm135.py +++ b/titles/cm/cm135.py @@ -1,7 +1,6 @@ from typing import Dict from core.config import CoreConfig -from core.data.cache import cached from titles.cm.base import CardMakerBase from titles.cm.const import CardMakerConstants from titles.cm.config import CardMakerConfig diff --git a/titles/cm/index.py b/titles/cm/index.py index c6d6746..85af4d5 100644 --- a/titles/cm/index.py +++ b/titles/cm/index.py @@ -2,16 +2,14 @@ import json import inflection import yaml import string -import logging -import coloredlogs import zlib from starlette.routing import Route from starlette.responses import Response from starlette.requests import Request from os import path from typing import List -from logging.handlers import TimedRotatingFileHandler +import core.logger from core.config import CoreConfig from core.utils import Utils from core.title import BaseServlet @@ -34,27 +32,11 @@ class CardMakerServlet(BaseServlet): CardMaker135(core_cfg, self.game_cfg) ] - self.logger = logging.getLogger("cardmaker") - log_fmt_str = "[%(asctime)s] Card Maker | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "cardmaker"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str + self.logger = core.logger.create_logger( + "Card Maker", + core_cfg, + self.game_cfg.server.loglevel, + logger_name="cardmaker", ) @classmethod diff --git a/titles/cm/read.py b/titles/cm/read.py index 2b5ec8a..95071e4 100644 --- a/titles/cm/read.py +++ b/titles/cm/read.py @@ -1,17 +1,13 @@ -from decimal import Decimal -import logging import os -import re import csv import xml.etree.ElementTree as ET -from typing import Any, Dict, List, Optional +from typing import Optional from read import BaseReader from core.config import CoreConfig from titles.ongeki.database import OngekiData from titles.cm.const import CardMakerConstants from titles.ongeki.const import OngekiConstants -from titles.ongeki.config import OngekiConfig from titles.mai2.database import Mai2Data from titles.mai2.const import Mai2Constants from titles.chuni.database import ChuniData diff --git a/titles/cxb/base.py b/titles/cxb/base.py index cc4e50d..9af64c3 100644 --- a/titles/cxb/base.py +++ b/titles/cxb/base.py @@ -1,10 +1,9 @@ -import logging import json -from decimal import Decimal from base64 import b64encode from typing import Any, Dict, List from os import path +import core.logger from core.config import CoreConfig from .config import CxbConfig from .const import CxbConstants @@ -18,7 +17,7 @@ class CxbBase: self.game_config = game_cfg self.data = CxbData(cfg) # Database self.game = CxbConstants.GAME_CODE - self.logger = logging.getLogger("cxb") + self.logger = self.logger = core.logger.create_logger("CXB") self.version = CxbConstants.VER_CROSSBEATS_REV def _get_data_contents(self, folder: str, filetype: str, encoding: str = None, subfolder: str = "") -> List[str]: diff --git a/titles/cxb/index.py b/titles/cxb/index.py index 513b813..7099e59 100644 --- a/titles/cxb/index.py +++ b/titles/cxb/index.py @@ -7,11 +7,11 @@ import yaml import json import re import inflection -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler +import logging from typing import Dict, Tuple, List from os import path +import core.logger from core.config import CoreConfig from core.title import BaseServlet, JSONResponseNoASCII from core.utils import Utils @@ -33,31 +33,7 @@ class CxbServlet(BaseServlet): yaml.safe_load(open(f"{cfg_dir}/{CxbConstants.CONFIG_NAME}")) ) - self.logger = logging.getLogger("cxb") - if not hasattr(self.logger, "inited"): - log_fmt_str = "[%(asctime)s] CXB | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "cxb"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.inited = True - + self.logger = core.logger.create_logger("CXB", core_cfg, self.game_cfg.server.loglevel) self.versions = [ CxbRev(core_cfg, self.game_cfg), CxbRevSunriseS1(core_cfg, self.game_cfg), diff --git a/titles/cxb/rev.py b/titles/cxb/rev.py index f811721..e87c2b7 100644 --- a/titles/cxb/rev.py +++ b/titles/cxb/rev.py @@ -1,12 +1,9 @@ import json from decimal import Decimal -from base64 import b64encode -from typing import Any, Dict -from hashlib import md5 -from datetime import datetime +from typing import Dict from core.config import CoreConfig -from core.data import Data, cached +from core.data import cached from .config import CxbConfig from .base import CxbBase from .const import CxbConstants diff --git a/titles/cxb/rss1.py b/titles/cxb/rss1.py index 4999cc5..e1a7270 100644 --- a/titles/cxb/rss1.py +++ b/titles/cxb/rss1.py @@ -1,12 +1,7 @@ -import json -from decimal import Decimal -from base64 import b64encode -from typing import Any, Dict -from hashlib import md5 -from datetime import datetime +from typing import Dict from core.config import CoreConfig -from core.data import Data, cached +from core.data import cached from .config import CxbConfig from .base import CxbBase from .const import CxbConstants diff --git a/titles/cxb/rss2.py b/titles/cxb/rss2.py index 070d88b..7c7d318 100644 --- a/titles/cxb/rss2.py +++ b/titles/cxb/rss2.py @@ -1,12 +1,7 @@ -import json -from decimal import Decimal -from base64 import b64encode -from typing import Any, Dict -from hashlib import md5 -from datetime import datetime +from typing import Dict from core.config import CoreConfig -from core.data import Data, cached +from core.data import cached from .config import CxbConfig from .base import CxbBase from .const import CxbConstants diff --git a/titles/cxb/schema/item.py b/titles/cxb/schema/item.py index 9e6a904..e73ce07 100644 --- a/titles/cxb/schema/item.py +++ b/titles/cxb/schema/item.py @@ -1,8 +1,7 @@ -from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean +from typing import Optional, Dict +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/cxb/schema/profile.py b/titles/cxb/schema/profile.py index a3e6039..d5ca8b2 100644 --- a/titles/cxb/schema/profile.py +++ b/titles/cxb/schema/profile.py @@ -1,8 +1,7 @@ from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, JSON from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/cxb/schema/score.py b/titles/cxb/schema/score.py index 7be33d8..11942e3 100644 --- a/titles/cxb/schema/score.py +++ b/titles/cxb/schema/score.py @@ -1,12 +1,11 @@ -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, JSON, Boolean +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, TIMESTAMP, JSON from sqlalchemy.schema import ForeignKey from sqlalchemy.sql import func from sqlalchemy.dialects.mysql import insert -from typing import Optional, List, Dict, Any +from typing import Optional, List, Dict from core.data.schema import BaseData, metadata -from core.data import cached score = Table( "cxb_score", diff --git a/titles/cxb/schema/static.py b/titles/cxb/schema/static.py index b863ef9..75651ce 100644 --- a/titles/cxb/schema/static.py +++ b/titles/cxb/schema/static.py @@ -1,10 +1,8 @@ -from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float -from sqlalchemy.engine.base import Connection +from typing import List, Optional +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Float from sqlalchemy.engine import Row -from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy.sql import select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/diva/base.py b/titles/diva/base.py index 7fe3fb5..f2be685 100644 --- a/titles/diva/base.py +++ b/titles/diva/base.py @@ -1,9 +1,9 @@ import datetime from typing import Dict -import logging import urllib.parse from threading import Thread +import core.logger from core.config import CoreConfig from titles.diva.config import DivaConfig from titles.diva.const import DivaConstants @@ -16,7 +16,7 @@ class DivaBase: self.game_config = game_cfg self.data = DivaData(cfg) # Database self.date_time_format = "%Y-%m-%d %H:%M:%S" - self.logger = logging.getLogger("diva") + self.logger = core.logger.create_logger("CXB", cfg, game_cfg.server.loglevel) self.game = DivaConstants.GAME_CODE self.version = DivaConstants.VER_PROJECT_DIVA_ARCADE_FUTURE_TONE diff --git a/titles/diva/index.py b/titles/diva/index.py index f414ab2..db7827d 100644 --- a/titles/diva/index.py +++ b/titles/diva/index.py @@ -2,8 +2,6 @@ from starlette.requests import Request from starlette.responses import PlainTextResponse from starlette.routing import Route import yaml -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler import zlib import json import urllib.parse @@ -11,6 +9,7 @@ import base64 from os import path from typing import Tuple, Dict, List +import core.logger from core.config import CoreConfig from core.title import BaseServlet from core.utils import Utils @@ -29,29 +28,7 @@ class DivaServlet(BaseServlet): ) self.base = DivaBase(core_cfg, self.game_cfg) - - self.logger = logging.getLogger("diva") - log_fmt_str = "[%(asctime)s] Diva | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "diva"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) + self.logger = core.logger.create_logger("Diva", core_cfg, self.game_cfg.server.loglevel) def get_routes(self) -> List[Route]: return [ diff --git a/titles/diva/schema/item.py b/titles/diva/schema/item.py index c09896b..ec86374 100644 --- a/titles/diva/schema/item.py +++ b/titles/diva/schema/item.py @@ -1,8 +1,7 @@ from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/diva/schema/profile.py b/titles/diva/schema/profile.py index f3d00ae..adc16b4 100644 --- a/titles/diva/schema/profile.py +++ b/titles/diva/schema/profile.py @@ -1,8 +1,7 @@ from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Boolean from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/diva/schema/score.py b/titles/diva/schema/score.py index e802a41..12d4717 100644 --- a/titles/diva/schema/score.py +++ b/titles/diva/schema/score.py @@ -1,13 +1,12 @@ -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, JSON, Boolean +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, TIMESTAMP from sqlalchemy.schema import ForeignKey from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert from sqlalchemy.engine import Row -from typing import Optional, List, Dict, Any +from typing import Optional, List from core.data.schema import BaseData, metadata -from core.data import cached score = Table( "diva_score", diff --git a/titles/diva/schema/static.py b/titles/diva/schema/static.py index e6aa207..98f7fdc 100644 --- a/titles/diva/schema/static.py +++ b/titles/diva/schema/static.py @@ -1,10 +1,8 @@ -from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float -from sqlalchemy.engine.base import Connection +from typing import List, Optional +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Boolean, Float from sqlalchemy.engine import Row -from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy.sql import select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/idac/base.py b/titles/idac/base.py index eb75b93..5d06ac9 100644 --- a/titles/idac/base.py +++ b/titles/idac/base.py @@ -1,5 +1,5 @@ -import logging +import core.logger from core.config import CoreConfig from titles.idac.config import IDACConfig from titles.idac.const import IDACConstants @@ -13,4 +13,4 @@ class IDACBase: self.game = IDACConstants.GAME_CODE self.version = IDACConstants.VER_IDAC_SEASON_1 self.data = IDACData(core_cfg) - self.logger = logging.getLogger("idac") + self.logger = self.logger = core.logger.create_logger("IDAC", core_cfg, game_cfg.server.loglevel) diff --git a/titles/idac/echo.py b/titles/idac/echo.py index 0458159..d3ba64a 100644 --- a/titles/idac/echo.py +++ b/titles/idac/echo.py @@ -4,6 +4,7 @@ import socket from socketserver import BaseRequestHandler, TCPServer from typing import Tuple +import core.logger from core.config import CoreConfig from titles.idac.config import IDACConfig from titles.idac.database import IDACData @@ -25,7 +26,7 @@ class IDACEchoTCP(BaseRequestHandler): ) -> None: self.core_config = cfg self.game_config = game_cfg - self.logger = logging.getLogger("idac") + self.logger = core.logger.create_logger("IDAC") self.data = IDACData(cfg) super().__init__(request, client_address, server) diff --git a/titles/idac/index.py b/titles/idac/index.py index 4e24491..83629a1 100644 --- a/titles/idac/index.py +++ b/titles/idac/index.py @@ -4,13 +4,11 @@ from starlette.routing import Route from starlette.requests import Request from starlette.responses import JSONResponse import yaml -import logging -import coloredlogs from os import path from typing import Dict, List, Tuple -from logging.handlers import TimedRotatingFileHandler import asyncio +import core.logger from core.config import CoreConfig from core.title import BaseServlet, JSONResponseNoASCII from core.utils import Utils @@ -33,29 +31,7 @@ class IDACServlet(BaseServlet): IDACBase(core_cfg, self.game_cfg), IDACSeason2(core_cfg, self.game_cfg) ] - - self.logger = logging.getLogger("idac") - log_fmt_str = "[%(asctime)s] IDAC | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "idac"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) + self.logger = core.logger.create_logger("IDAC", core_cfg, self.game_cfg.server.loglevel) @classmethod def is_game_enabled(cls, game_code: str, core_cfg: CoreConfig, cfg_dir: str) -> bool: diff --git a/titles/idac/read.py b/titles/idac/read.py index 3b7e034..6a98405 100644 --- a/titles/idac/read.py +++ b/titles/idac/read.py @@ -1,7 +1,6 @@ import json -import logging import os -from typing import Any, Dict, List, Optional +from typing import Any, Dict, Optional from read import BaseReader from core.data import Data diff --git a/titles/idac/schema/item.py b/titles/idac/schema/item.py index d617cd9..f57a1fc 100644 --- a/titles/idac/schema/item.py +++ b/titles/idac/schema/item.py @@ -3,11 +3,10 @@ from sqlalchemy import ( Table, Column, UniqueConstraint, - PrimaryKeyConstraint, and_, update, ) -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from sqlalchemy.types import Integer, String, TIMESTAMP, JSON from sqlalchemy.schema import ForeignKey from sqlalchemy.engine import Row from sqlalchemy.sql import func, select diff --git a/titles/idac/schema/profile.py b/titles/idac/schema/profile.py index bb6593b..70331be 100644 --- a/titles/idac/schema/profile.py +++ b/titles/idac/schema/profile.py @@ -1,6 +1,6 @@ -from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, BigInteger +from typing import Dict, Optional +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, TIMESTAMP from sqlalchemy.engine.base import Connection from sqlalchemy.schema import ForeignKey from sqlalchemy.sql import func, select diff --git a/titles/idac/season2.py b/titles/idac/season2.py index 72b15c3..548ae44 100644 --- a/titles/idac/season2.py +++ b/titles/idac/season2.py @@ -1,9 +1,8 @@ from datetime import datetime, timedelta import os from random import choice -from typing import Any, Dict, List +from typing import Dict, List import json -import logging from core.config import CoreConfig from core.utils import Utils diff --git a/titles/idz/handlers/base.py b/titles/idz/handlers/base.py index 6b1e5d5..ee88661 100644 --- a/titles/idz/handlers/base.py +++ b/titles/idz/handlers/base.py @@ -1,5 +1,6 @@ -import logging import struct + +import core.logger from core.data import Data from core.config import CoreConfig from ..config import IDZConfig @@ -15,7 +16,7 @@ class IDZHandlerBase: self.core_config = core_cfg self.game_cfg = game_cfg self.data = Data(core_cfg) - self.logger = logging.getLogger("idz") + self.logger = core.logger.create_logger("IDZ", core_cfg, game_cfg.server.loglevel) self.game = IDZConstants.GAME_CODE self.version = version self.size = 0x30 diff --git a/titles/idz/handlers/create_auto_team.py b/titles/idz/handlers/create_auto_team.py index 4c581fc..0567a2e 100644 --- a/titles/idz/handlers/create_auto_team.py +++ b/titles/idz/handlers/create_auto_team.py @@ -1,7 +1,6 @@ from operator import indexOf import struct -import json -from random import choice, randrange +from random import choice from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/discover_profile.py b/titles/idz/handlers/discover_profile.py index 9d40284..689ccfa 100644 --- a/titles/idz/handlers/discover_profile.py +++ b/titles/idz/handlers/discover_profile.py @@ -1,5 +1,4 @@ import struct -from typing import Tuple, List, Dict from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/load_2on2.py b/titles/idz/handlers/load_2on2.py index 8f1767f..19f45bd 100644 --- a/titles/idz/handlers/load_2on2.py +++ b/titles/idz/handlers/load_2on2.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/load_reward_table.py b/titles/idz/handlers/load_reward_table.py index 4f9da92..fdb60ea 100644 --- a/titles/idz/handlers/load_reward_table.py +++ b/titles/idz/handlers/load_reward_table.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/load_team_ranking.py b/titles/idz/handlers/load_team_ranking.py index db31f04..439d42b 100644 --- a/titles/idz/handlers/load_team_ranking.py +++ b/titles/idz/handlers/load_team_ranking.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/load_top_ten.py b/titles/idz/handlers/load_top_ten.py index 09a9f5f..f3295a2 100644 --- a/titles/idz/handlers/load_top_ten.py +++ b/titles/idz/handlers/load_top_ten.py @@ -1,5 +1,5 @@ import struct -from typing import Tuple, List, Dict +from typing import Tuple, List from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/save_expedition.py b/titles/idz/handlers/save_expedition.py index fc94cb3..867b84b 100644 --- a/titles/idz/handlers/save_expedition.py +++ b/titles/idz/handlers/save_expedition.py @@ -1,7 +1,6 @@ from .base import IDZHandlerBase from core.config import CoreConfig from ..config import IDZConfig -from ..const import IDZConstants class IDZHandlerSaveExpedition(IDZHandlerBase): diff --git a/titles/idz/handlers/save_profile.py b/titles/idz/handlers/save_profile.py index 3f5311d..e139a2d 100644 --- a/titles/idz/handlers/save_profile.py +++ b/titles/idz/handlers/save_profile.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/save_time_attack.py b/titles/idz/handlers/save_time_attack.py index bea83af..ed1eab4 100644 --- a/titles/idz/handlers/save_time_attack.py +++ b/titles/idz/handlers/save_time_attack.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/save_topic.py b/titles/idz/handlers/save_topic.py index 090ce52..d90317f 100644 --- a/titles/idz/handlers/save_topic.py +++ b/titles/idz/handlers/save_topic.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/unknown.py b/titles/idz/handlers/unknown.py index 8998d81..df0235c 100644 --- a/titles/idz/handlers/unknown.py +++ b/titles/idz/handlers/unknown.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/unlock_profile.py b/titles/idz/handlers/unlock_profile.py index 1be50f5..7a48fcb 100644 --- a/titles/idz/handlers/unlock_profile.py +++ b/titles/idz/handlers/unlock_profile.py @@ -3,7 +3,6 @@ import struct from .base import IDZHandlerBase from core.config import CoreConfig from ..config import IDZConfig -from ..const import IDZConstants class IDZHandlerUnlockProfile(IDZHandlerBase): diff --git a/titles/idz/handlers/update_provisional_store_rank.py b/titles/idz/handlers/update_provisional_store_rank.py index e62da3c..fc4087c 100644 --- a/titles/idz/handlers/update_provisional_store_rank.py +++ b/titles/idz/handlers/update_provisional_store_rank.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/update_story_clear_num.py b/titles/idz/handlers/update_story_clear_num.py index bcf44a5..3b80c81 100644 --- a/titles/idz/handlers/update_story_clear_num.py +++ b/titles/idz/handlers/update_story_clear_num.py @@ -1,4 +1,3 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig diff --git a/titles/idz/handlers/update_team_points.py b/titles/idz/handlers/update_team_points.py index a23d843..2554e2e 100644 --- a/titles/idz/handlers/update_team_points.py +++ b/titles/idz/handlers/update_team_points.py @@ -1,9 +1,7 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig from ..config import IDZConfig -from ..const import IDZConstants class IDZHandleUpdateTeamPoints(IDZHandlerBase): diff --git a/titles/idz/handlers/update_ui_report.py b/titles/idz/handlers/update_ui_report.py index 7e99b40..117c85e 100644 --- a/titles/idz/handlers/update_ui_report.py +++ b/titles/idz/handlers/update_ui_report.py @@ -1,9 +1,7 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig from ..config import IDZConfig -from ..const import IDZConstants class IDZHandleUpdateUIReport(IDZHandlerBase): diff --git a/titles/idz/handlers/update_user_log.py b/titles/idz/handlers/update_user_log.py index c862f52..f692872 100644 --- a/titles/idz/handlers/update_user_log.py +++ b/titles/idz/handlers/update_user_log.py @@ -1,9 +1,7 @@ -import struct from .base import IDZHandlerBase from core.config import CoreConfig from ..config import IDZConfig -from ..const import IDZConstants class IDZHandleUpdateUserLog(IDZHandlerBase): diff --git a/titles/idz/index.py b/titles/idz/index.py index 0ff5b8d..c318ad5 100644 --- a/titles/idz/index.py +++ b/titles/idz/index.py @@ -2,14 +2,12 @@ from starlette.requests import Request from starlette.responses import Response, PlainTextResponse from starlette.routing import Route import yaml -import logging -import coloredlogs -from logging.handlers import TimedRotatingFileHandler from os import path -from typing import Tuple, List, Dict +from typing import Tuple, List import importlib import asyncio +import core.logger from core.config import CoreConfig from core.title import BaseServlet from .config import IDZConfig @@ -26,33 +24,8 @@ class IDZServlet(BaseServlet): self.game_cfg.update( yaml.safe_load(open(f"{cfg_dir}/{IDZConstants.CONFIG_NAME}")) ) - - self.logger = logging.getLogger("idz") - if not hasattr(self.logger, "inited"): - log_fmt_str = "[%(asctime)s] IDZ | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "idz"), - encoding="utf8", - when="d", - backupCount=10, - ) - - self.rsa_keys: List[IDZKey] = [] - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.inited = True + + self.logger = core.logger.create_logger("IDZ", core_cfg, self.game_cfg.server.loglevel) @classmethod def rsaHashKeyN(cls, data): @@ -79,7 +52,9 @@ class IDZServlet(BaseServlet): return False if len(game_cfg.rsa_keys) <= 0 or not game_cfg.server.aes_key: - logging.getLogger("idz").error("IDZ: No RSA/AES keys! IDZ cannot start") + logger = core.logger.create_logger("IDZ", core_cfg, game_cfg.server.loglevel) + + logger.error("No RSA/AES keys! IDZ cannot start") return False return True diff --git a/titles/idz/userdb.py b/titles/idz/userdb.py index 089778a..66ab247 100644 --- a/titles/idz/userdb.py +++ b/titles/idz/userdb.py @@ -1,12 +1,11 @@ -import logging from Crypto.Cipher import AES import struct from typing import Dict, Optional, List, Type import random import asyncio +import core.logger from core.config import CoreConfig -from .database import IDZData from .config import IDZConfig from .const import IDZConstants from .handlers import IDZHandlerBase @@ -30,7 +29,7 @@ class IDZUserDB: keys: List[IDZKey], handlers: List[Dict], ) -> None: - self.logger = logging.getLogger("idz") + self.logger = core.logger.create_logger("IDZ", core_cfg, game_cfg.server.loglevel) self.core_config = core_cfg self.game_config = game_cfg self.rsa_keys = keys diff --git a/titles/mai2/base.py b/titles/mai2/base.py index 5a5edb9..50e8557 100644 --- a/titles/mai2/base.py +++ b/titles/mai2/base.py @@ -1,11 +1,11 @@ from datetime import datetime, timedelta from typing import Any, Dict, List -import logging from base64 import b64decode from os import path, stat, remove from PIL import ImageFile import pytz +import core.logger from core.config import CoreConfig from core.utils import Utils from .const import Mai2Constants @@ -19,7 +19,7 @@ class Mai2Base: self.game_config = game_cfg self.version = Mai2Constants.VER_MAIMAI self.data = Mai2Data(cfg) - self.logger = logging.getLogger("mai2") + self.logger = core.logger.create_logger("Mai2", cfg, game_cfg.server.loglevel) self.can_deliver = False self.can_usbdl = False self.old_server = "" diff --git a/titles/mai2/dx.py b/titles/mai2/dx.py index 0d3bddd..6bffd2e 100644 --- a/titles/mai2/dx.py +++ b/titles/mai2/dx.py @@ -1,8 +1,6 @@ from typing import Any, List, Dict from datetime import datetime, timedelta import pytz -import json -from random import randint from core.config import CoreConfig from titles.mai2.base import Mai2Base diff --git a/titles/mai2/dxplus.py b/titles/mai2/dxplus.py index 9062ff5..06d28cf 100644 --- a/titles/mai2/dxplus.py +++ b/titles/mai2/dxplus.py @@ -1,7 +1,3 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import pytz -import json from core.config import CoreConfig from titles.mai2.dx import Mai2DX diff --git a/titles/mai2/finale.py b/titles/mai2/finale.py index f9f1d88..f1434a1 100644 --- a/titles/mai2/finale.py +++ b/titles/mai2/finale.py @@ -1,7 +1,3 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import pytz -import json from core.config import CoreConfig from titles.mai2.base import Mai2Base diff --git a/titles/mai2/index.py b/titles/mai2/index.py index a1cd7b1..0a01975 100644 --- a/titles/mai2/index.py +++ b/titles/mai2/index.py @@ -4,12 +4,11 @@ from starlette.routing import Route import json import inflection import yaml -import logging, coloredlogs import zlib -from logging.handlers import TimedRotatingFileHandler from os import path, mkdir -from typing import Tuple, List, Dict +from typing import Tuple, List +import core.logger from core.config import CoreConfig from core.utils import Utils from core.title import BaseServlet @@ -61,31 +60,7 @@ class Mai2Servlet(BaseServlet): Mai2FestivalPlus, Mai2Buddies ] - - self.logger = logging.getLogger("mai2") - if not hasattr(self.logger, "initted"): - log_fmt_str = "[%(asctime)s] Mai2 | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "mai2"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.initted = True + self.logger = core.logger.create_logger("Mai2", core_cfg, self.game_cfg.server.loglevel) @classmethod def is_game_enabled( diff --git a/titles/mai2/read.py b/titles/mai2/read.py index d9450ac..f5b9c63 100644 --- a/titles/mai2/read.py +++ b/titles/mai2/read.py @@ -1,15 +1,12 @@ -from decimal import Decimal -import logging import os import re import xml.etree.ElementTree as ET -from typing import Any, Dict, List, Optional +from typing import Dict, List, Optional from Crypto.Cipher import AES import zlib import codecs from core.config import CoreConfig -from core.data import Data from read import BaseReader from titles.mai2.const import Mai2Constants from titles.mai2.database import Mai2Data diff --git a/titles/mai2/schema/item.py b/titles/mai2/schema/item.py index 9aaf592..f4048ee 100644 --- a/titles/mai2/schema/item.py +++ b/titles/mai2/schema/item.py @@ -2,10 +2,10 @@ from core.data.schema import BaseData, metadata from datetime import datetime from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ +from sqlalchemy import Table, Column, UniqueConstraint, and_ from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy.sql import func from sqlalchemy.dialects.mysql import insert from sqlalchemy.engine import Row diff --git a/titles/mai2/schema/profile.py b/titles/mai2/schema/profile.py index 8f1d5f3..dbd9845 100644 --- a/titles/mai2/schema/profile.py +++ b/titles/mai2/schema/profile.py @@ -2,10 +2,10 @@ from core.data.schema import BaseData, metadata from titles.mai2.const import Mai2Constants from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, BigInteger +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Boolean, JSON, BigInteger from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy.sql import select from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert from datetime import datetime diff --git a/titles/mai2/schema/score.py b/titles/mai2/schema/score.py index d13faae..491be56 100644 --- a/titles/mai2/schema/score.py +++ b/titles/mai2/schema/score.py @@ -1,8 +1,7 @@ from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, BigInteger +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Boolean, JSON, BigInteger from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/mai2/schema/static.py b/titles/mai2/schema/static.py index e33e4ec..a95799c 100644 --- a/titles/mai2/schema/static.py +++ b/titles/mai2/schema/static.py @@ -1,9 +1,8 @@ from core.data.schema.base import BaseData, metadata -from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float -from sqlalchemy.schema import ForeignKey +from typing import Optional, List +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, Float from sqlalchemy.sql import func, select from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/mai2/splash.py b/titles/mai2/splash.py index 026e3ae..5b30877 100644 --- a/titles/mai2/splash.py +++ b/titles/mai2/splash.py @@ -1,7 +1,3 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import pytz -import json from core.config import CoreConfig from titles.mai2.dxplus import Mai2DXPlus diff --git a/titles/mai2/splashplus.py b/titles/mai2/splashplus.py index 438941f..bf55a70 100644 --- a/titles/mai2/splashplus.py +++ b/titles/mai2/splashplus.py @@ -1,7 +1,3 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import pytz -import json from core.config import CoreConfig from titles.mai2.splash import Mai2Splash diff --git a/titles/mai2/universe.py b/titles/mai2/universe.py index 00353d3..ebc4a5f 100644 --- a/titles/mai2/universe.py +++ b/titles/mai2/universe.py @@ -1,8 +1,6 @@ -from typing import Any, List, Dict +from typing import List, Dict from random import randint from datetime import datetime, timedelta -import pytz -import json from core.config import CoreConfig from titles.mai2.splashplus import Mai2SplashPlus diff --git a/titles/ongeki/base.py b/titles/ongeki/base.py index 57a7363..5c075c5 100644 --- a/titles/ongeki/base.py +++ b/titles/ongeki/base.py @@ -1,10 +1,10 @@ -from datetime import date, datetime, timedelta +from datetime import datetime, timedelta from typing import Any, Dict, List import json -import logging from enum import Enum import pytz +import core.logger from core.config import CoreConfig from core.data.cache import cached from titles.ongeki.const import OngekiConstants @@ -99,7 +99,7 @@ class OngekiBase: "%Y-%m-%d %H:%M:%S.%f" # needs to be lopped off at [:-5] ) self.date_time_format_short = "%Y-%m-%d" - self.logger = logging.getLogger("ongeki") + self.logger = core.logger.create_logger("Ongeki", core_cfg, self.game_cfg.server.loglevel) self.game = OngekiConstants.GAME_CODE self.version = OngekiConstants.VER_ONGEKI diff --git a/titles/ongeki/bright.py b/titles/ongeki/bright.py index 690a118..7663bfe 100644 --- a/titles/ongeki/bright.py +++ b/titles/ongeki/bright.py @@ -1,8 +1,6 @@ -from datetime import date, datetime, timedelta -from typing import Any, Dict +from datetime import datetime +from typing import Dict from random import randint -import pytz -import json from core.config import CoreConfig from titles.ongeki.base import OngekiBase diff --git a/titles/ongeki/brightmemory.py b/titles/ongeki/brightmemory.py index 6fdd60a..a489897 100644 --- a/titles/ongeki/brightmemory.py +++ b/titles/ongeki/brightmemory.py @@ -1,10 +1,6 @@ -from datetime import date, datetime, timedelta -from typing import Any, Dict -import pytz -import json +from typing import Dict from core.config import CoreConfig -from titles.ongeki.base import OngekiBase from titles.ongeki.bright import OngekiBright from titles.ongeki.const import OngekiConstants from titles.ongeki.config import OngekiConfig diff --git a/titles/ongeki/const.py b/titles/ongeki/const.py index a7658f7..520b311 100644 --- a/titles/ongeki/const.py +++ b/titles/ongeki/const.py @@ -1,4 +1,3 @@ -from typing import Final, Dict from enum import Enum diff --git a/titles/ongeki/index.py b/titles/ongeki/index.py index d7f3e0e..a62d56b 100644 --- a/titles/ongeki/index.py +++ b/titles/ongeki/index.py @@ -5,10 +5,7 @@ import json import inflection import yaml import string -import logging -import coloredlogs import zlib -from logging.handlers import TimedRotatingFileHandler from Crypto.Cipher import AES from Crypto.Util.Padding import pad from Crypto.Protocol.KDF import PBKDF2 @@ -16,6 +13,7 @@ from Crypto.Hash import SHA1 from os import path from typing import Tuple, Dict, List +import core.logger from core.config import CoreConfig from core.utils import Utils from core.title import BaseServlet @@ -41,6 +39,7 @@ class OngekiServlet(BaseServlet): yaml.safe_load(open(f"{cfg_dir}/{OngekiConstants.CONFIG_NAME}")) ) + self.logger = core.logger.create_logger("Ongeki", core_cfg, self.game_cfg.server.loglevel) self.versions = [ OngekiBase(core_cfg, self.game_cfg), OngekiPlus(core_cfg, self.game_cfg), @@ -52,32 +51,6 @@ class OngekiServlet(BaseServlet): OngekiBrightMemory(core_cfg, self.game_cfg), ] - self.logger = logging.getLogger("ongeki") - - if not hasattr(self.logger, "inited"): - log_fmt_str = "[%(asctime)s] Ongeki | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "ongeki"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.inited = True - for version, keys in self.game_cfg.crypto.keys.items(): if len(keys) < 3: continue diff --git a/titles/ongeki/plus.py b/titles/ongeki/plus.py index 12c46b2..7603b39 100644 --- a/titles/ongeki/plus.py +++ b/titles/ongeki/plus.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.ongeki.base import OngekiBase diff --git a/titles/ongeki/red.py b/titles/ongeki/red.py index eac20ae..de5c9eb 100644 --- a/titles/ongeki/red.py +++ b/titles/ongeki/red.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.ongeki.base import OngekiBase diff --git a/titles/ongeki/redplus.py b/titles/ongeki/redplus.py index 99e63db..866f64c 100644 --- a/titles/ongeki/redplus.py +++ b/titles/ongeki/redplus.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.ongeki.base import OngekiBase diff --git a/titles/ongeki/schema/item.py b/titles/ongeki/schema/item.py index ca2de1f..9db9936 100644 --- a/titles/ongeki/schema/item.py +++ b/titles/ongeki/schema/item.py @@ -1,7 +1,7 @@ -from datetime import date, datetime, timedelta +from datetime import datetime from typing import Dict, Optional, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean from sqlalchemy.schema import ForeignKey from sqlalchemy.engine import Row from sqlalchemy.sql import func, select diff --git a/titles/ongeki/schema/log.py b/titles/ongeki/schema/log.py index fccd29f..a469c26 100644 --- a/titles/ongeki/schema/log.py +++ b/titles/ongeki/schema/log.py @@ -1,8 +1,7 @@ -from typing import Dict, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from typing import Optional +from sqlalchemy import Table, Column +from sqlalchemy.types import Integer, String, Boolean from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/ongeki/schema/profile.py b/titles/ongeki/schema/profile.py index b42a0a3..66142e0 100644 --- a/titles/ongeki/schema/profile.py +++ b/titles/ongeki/schema/profile.py @@ -1,9 +1,9 @@ from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, BigInteger +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Boolean, JSON, BigInteger from sqlalchemy.engine.base import Connection from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, delete +from sqlalchemy.sql import select, delete from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/ongeki/schema/score.py b/titles/ongeki/schema/score.py index dc3a91d..cb405e1 100644 --- a/titles/ongeki/schema/score.py +++ b/titles/ongeki/schema/score.py @@ -1,8 +1,8 @@ from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float +from sqlalchemy import Table, Column, UniqueConstraint +from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, Float from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy.sql import select from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/ongeki/schema/static.py b/titles/ongeki/schema/static.py index 85a9df4..7da9471 100644 --- a/titles/ongeki/schema/static.py +++ b/titles/ongeki/schema/static.py @@ -1,7 +1,6 @@ from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float -from sqlalchemy.schema import ForeignKey +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, Float from sqlalchemy.sql import func, select from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/ongeki/summer.py b/titles/ongeki/summer.py index c3f2ce0..647013d 100644 --- a/titles/ongeki/summer.py +++ b/titles/ongeki/summer.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.ongeki.base import OngekiBase diff --git a/titles/ongeki/summerplus.py b/titles/ongeki/summerplus.py index 576d615..72f4da6 100644 --- a/titles/ongeki/summerplus.py +++ b/titles/ongeki/summerplus.py @@ -1,4 +1,4 @@ -from typing import Dict, Any +from typing import Dict from core.config import CoreConfig from titles.ongeki.base import OngekiBase diff --git a/titles/pokken/base.py b/titles/pokken/base.py index 562f3b9..682f23b 100644 --- a/titles/pokken/base.py +++ b/titles/pokken/base.py @@ -1,10 +1,8 @@ -from datetime import datetime, timedelta -import json, logging +from datetime import datetime +import json from typing import Any, Dict, List -import random -from core.data import Data -from core import CoreConfig +from core import CoreConfig, logger from .config import PokkenConfig from .proto import jackal_pb2 from .database import PokkenData @@ -16,7 +14,7 @@ class PokkenBase: self.core_cfg = core_cfg self.game_cfg = game_cfg self.version = 0 - self.logger = logging.getLogger("pokken") + self.logger = logger.create_logger("Pokken", core_cfg, game_cfg.server.loglevel) self.data = PokkenData(core_cfg) self.SUPPORT_SET_NONE = 4294967295 diff --git a/titles/pokken/index.py b/titles/pokken/index.py index 8e2ce70..ec4fa60 100644 --- a/titles/pokken/index.py +++ b/titles/pokken/index.py @@ -7,13 +7,11 @@ from starlette.websockets import WebSocket, WebSocketState, WebSocketDisconnect import ast from datetime import datetime import yaml -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler import inflection from os import path from google.protobuf.message import DecodeError -from core import CoreConfig, Utils +from core import CoreConfig, Utils, logger from core.title import BaseServlet from .config import PokkenConfig from .base import PokkenBase @@ -28,31 +26,7 @@ class PokkenServlet(BaseServlet): if path.exists(f"{cfg_dir}/pokken.yaml"): self.game_cfg.update(yaml.safe_load(open(f"{cfg_dir}/pokken.yaml"))) - self.logger = logging.getLogger("pokken") - if not hasattr(self.logger, "inited"): - log_fmt_str = "[%(asctime)s] Pokken | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "pokken"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.inited = True - + self.logger = logger.create_logger("Pokken", core_cfg, self.game_cfg.server.loglevel) self.base = PokkenBase(core_cfg, self.game_cfg) @classmethod diff --git a/titles/pokken/schema/item.py b/titles/pokken/schema/item.py index cc633d7..8a000d1 100644 --- a/titles/pokken/schema/item.py +++ b/titles/pokken/schema/item.py @@ -1,9 +1,7 @@ -from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from typing import Optional +from sqlalchemy import Table, Column, UniqueConstraint +from sqlalchemy.types import Integer from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete -from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/pokken/schema/match.py b/titles/pokken/schema/match.py index 1c597d5..bd6565b 100644 --- a/titles/pokken/schema/match.py +++ b/titles/pokken/schema/match.py @@ -1,10 +1,8 @@ from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from sqlalchemy import Table, Column +from sqlalchemy.types import Integer, TIMESTAMP, JSON from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete from sqlalchemy.engine import Row -from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/pokken/schema/profile.py b/titles/pokken/schema/profile.py index b7237de..7915657 100644 --- a/titles/pokken/schema/profile.py +++ b/titles/pokken/schema/profile.py @@ -1,8 +1,8 @@ -from typing import Optional, Dict, List, Union -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from typing import Optional, List, Union +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Boolean, JSON from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete +from sqlalchemy.sql import select, update from sqlalchemy.sql.functions import coalesce from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/pokken/schema/static.py b/titles/pokken/schema/static.py index 121ebc4..9a1cafa 100644 --- a/titles/pokken/schema/static.py +++ b/titles/pokken/schema/static.py @@ -1,12 +1,5 @@ -from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON -from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete -from sqlalchemy.engine import Row -from sqlalchemy.dialects.mysql import insert -from core.data.schema import BaseData, metadata +from core.data.schema import BaseData class PokkenStaticData(BaseData): diff --git a/titles/sao/base.py b/titles/sao/base.py index 80f91a2..bc34ea2 100644 --- a/titles/sao/base.py +++ b/titles/sao/base.py @@ -1,10 +1,9 @@ -import logging from csv import * from random import choice from typing import Dict, List from os import path -from core.data import Data +import core.logger from core import CoreConfig from .config import SaoConfig from .database import SaoData @@ -16,7 +15,7 @@ class SaoBase: self.game_cfg = game_cfg self.data = SaoData(core_cfg) self.version = 0 - self.logger = logging.getLogger("sao") + self.logger = core.logger.create_logger("SAO", core_cfg, game_cfg.server.loglevel) def load_data_csv(self, file: str) -> List[Dict]: ret = [] diff --git a/titles/sao/const.py b/titles/sao/const.py index d181556..2cf3b00 100644 --- a/titles/sao/const.py +++ b/titles/sao/const.py @@ -1,4 +1,3 @@ -from enum import Enum class SaoConstants: diff --git a/titles/sao/index.py b/titles/sao/index.py index 1f68c43..25daab9 100644 --- a/titles/sao/index.py +++ b/titles/sao/index.py @@ -1,16 +1,14 @@ -from typing import Tuple, Dict, List +from typing import Tuple, List from starlette.requests import Request from starlette.responses import Response from starlette.routing import Route import yaml -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler from os import path from Crypto.Cipher import Blowfish from hashlib import md5 import secrets -from core import CoreConfig, Utils +from core import CoreConfig, Utils, logger from core.title import BaseServlet from titles.sao.config import SaoConfig from titles.sao.const import SaoConstants @@ -26,31 +24,7 @@ class SaoServlet(BaseServlet): if path.exists(f"{cfg_dir}/sao.yaml"): self.game_cfg.update(yaml.safe_load(open(f"{cfg_dir}/sao.yaml"))) - self.logger = logging.getLogger("sao") - if not hasattr(self.logger, "inited"): - log_fmt_str = "[%(asctime)s] SAO | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "sao"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) - self.logger.inited = True - + self.logger = logger.create_logger("SAO", core_cfg, self.game_cfg.server.loglevel) self.base = SaoBase(core_cfg, self.game_cfg) self.static_hash = None diff --git a/titles/sao/read.py b/titles/sao/read.py index 92aad8c..16b00ed 100644 --- a/titles/sao/read.py +++ b/titles/sao/read.py @@ -1,6 +1,5 @@ -from typing import Optional, Dict, List -from os import walk, path -import urllib +from typing import Optional +from os import path import csv from read import BaseReader diff --git a/titles/sao/schema/item.py b/titles/sao/schema/item.py index 332e135..7bc212e 100644 --- a/titles/sao/schema/item.py +++ b/titles/sao/schema/item.py @@ -1,8 +1,8 @@ from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, TIMESTAMP, Boolean, JSON from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete +from sqlalchemy.sql import func from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/sao/schema/profile.py b/titles/sao/schema/profile.py index 27d284d..89bab6f 100644 --- a/titles/sao/schema/profile.py +++ b/titles/sao/schema/profile.py @@ -1,13 +1,11 @@ -from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON +from typing import Optional +from sqlalchemy import Table, Column +from sqlalchemy.types import Integer, String from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata -from ..const import SaoConstants profile = Table( "sao_profile", diff --git a/titles/sao/schema/static.py b/titles/sao/schema/static.py index 8b5b1a1..9bc9c3f 100644 --- a/titles/sao/schema/static.py +++ b/titles/sao/schema/static.py @@ -1,10 +1,6 @@ from typing import Dict, List, Optional -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, Float -from sqlalchemy.engine.base import Connection -from sqlalchemy.engine import Row -from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy import Table, Column, UniqueConstraint +from sqlalchemy.types import Integer, String, Boolean from sqlalchemy.dialects.mysql import insert from core.data.schema import BaseData, metadata diff --git a/titles/wacca/base.py b/titles/wacca/base.py index 8a37c2b..426a641 100644 --- a/titles/wacca/base.py +++ b/titles/wacca/base.py @@ -1,5 +1,4 @@ from typing import Any, List, Dict -import logging import inflection from math import floor from datetime import datetime, timedelta @@ -8,6 +7,7 @@ from titles.wacca.config import WaccaConfig from titles.wacca.const import WaccaConstants from titles.wacca.database import WaccaData +import core.logger from titles.wacca.handlers import * from core.const import AllnetCountryCode @@ -19,7 +19,7 @@ class WaccaBase: self.game = WaccaConstants.GAME_CODE # Game code self.version = WaccaConstants.VER_WACCA # Game version self.data = WaccaData(cfg) # Database - self.logger = logging.getLogger("wacca") + self.logger = core.logger.create_logger("Wacca", cfg, game_cfg.server.loglevel) self.srvtime = datetime.now() self.season = 1 diff --git a/titles/wacca/config.py b/titles/wacca/config.py index e96c3f4..a354b8c 100644 --- a/titles/wacca/config.py +++ b/titles/wacca/config.py @@ -1,4 +1,4 @@ -from typing import Dict, List +from typing import List from core.config import CoreConfig diff --git a/titles/wacca/const.py b/titles/wacca/const.py index b25d3ac..f326b06 100644 --- a/titles/wacca/const.py +++ b/titles/wacca/const.py @@ -1,7 +1,6 @@ from enum import Enum from typing import Optional -from core.const import AllnetJapanRegionId class WaccaConstants: diff --git a/titles/wacca/index.py b/titles/wacca/index.py index 97a3fd4..ebaf872 100644 --- a/titles/wacca/index.py +++ b/titles/wacca/index.py @@ -1,18 +1,15 @@ from starlette.routing import Route import yaml -import logging, coloredlogs -from logging.handlers import TimedRotatingFileHandler -import logging import json from hashlib import md5 from starlette.requests import Request -from starlette.responses import JSONResponse, Response +from starlette.responses import Response from typing import Dict, Tuple, List from os import path import traceback import sys -from core import CoreConfig, Utils +from core import CoreConfig, Utils, logger from core.data import Data from core.title import BaseServlet from .config import WaccaConfig @@ -36,6 +33,7 @@ class WaccaServlet(BaseServlet): ) self.data = Data(core_cfg) + self.logger = logger.create_logger("Wacca", core_cfg, self.game_cfg.server.loglevel) self.versions = [ WaccaBase(core_cfg, self.game_cfg), WaccaS(core_cfg, self.game_cfg), @@ -43,29 +41,6 @@ class WaccaServlet(BaseServlet): WaccaLilyR(core_cfg, self.game_cfg), WaccaReverse(core_cfg, self.game_cfg), ] - - self.logger = logging.getLogger("wacca") - log_fmt_str = "[%(asctime)s] Wacca | %(levelname)s | %(message)s" - log_fmt = logging.Formatter(log_fmt_str) - fileHandler = TimedRotatingFileHandler( - "{0}/{1}.log".format(self.core_cfg.server.log_dir, "wacca"), - encoding="utf8", - when="d", - backupCount=10, - ) - - fileHandler.setFormatter(log_fmt) - - consoleHandler = logging.StreamHandler() - consoleHandler.setFormatter(log_fmt) - - self.logger.addHandler(fileHandler) - self.logger.addHandler(consoleHandler) - - self.logger.setLevel(self.game_cfg.server.loglevel) - coloredlogs.install( - level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str - ) def get_routes(self) -> List[Route]: return [ diff --git a/titles/wacca/lily.py b/titles/wacca/lily.py index cefa4b2..9f20d4e 100644 --- a/titles/wacca/lily.py +++ b/titles/wacca/lily.py @@ -1,6 +1,5 @@ -from typing import Any, List, Dict +from typing import Dict from datetime import datetime, timedelta -import json from core.config import CoreConfig from titles.wacca.s import WaccaS diff --git a/titles/wacca/lilyr.py b/titles/wacca/lilyr.py index 204a656..72a56cf 100644 --- a/titles/wacca/lilyr.py +++ b/titles/wacca/lilyr.py @@ -1,6 +1,4 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import json +from typing import Dict from core.config import CoreConfig from titles.wacca.handlers import Dict diff --git a/titles/wacca/read.py b/titles/wacca/read.py index 91fae03..647dc9f 100644 --- a/titles/wacca/read.py +++ b/titles/wacca/read.py @@ -1,7 +1,7 @@ from typing import Optional import wacky import json -from os import walk, path +from os import path from read import BaseReader from core.config import CoreConfig diff --git a/titles/wacca/reverse.py b/titles/wacca/reverse.py index be34024..90d3bf1 100644 --- a/titles/wacca/reverse.py +++ b/titles/wacca/reverse.py @@ -1,6 +1,5 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import json +from typing import Dict +from datetime import timedelta from core.config import CoreConfig from titles.wacca.lilyr import WaccaLilyR diff --git a/titles/wacca/s.py b/titles/wacca/s.py index 4e43237..e3c6164 100644 --- a/titles/wacca/s.py +++ b/titles/wacca/s.py @@ -1,6 +1,4 @@ -from typing import Any, List, Dict -from datetime import datetime, timedelta -import json +from typing import Dict from core.config import CoreConfig from titles.wacca.base import WaccaBase diff --git a/titles/wacca/schema/item.py b/titles/wacca/schema/item.py index 413b133..fa90ac1 100644 --- a/titles/wacca/schema/item.py +++ b/titles/wacca/schema/item.py @@ -1,8 +1,8 @@ -from typing import Optional, Dict, List -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case -from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean +from typing import Optional, List +from sqlalchemy import Table, Column, UniqueConstraint, and_, case +from sqlalchemy.types import Integer, TIMESTAMP from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select, update, delete +from sqlalchemy.sql import func, select, delete from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert diff --git a/titles/wacca/schema/score.py b/titles/wacca/schema/score.py index 114cce3..b61472e 100644 --- a/titles/wacca/schema/score.py +++ b/titles/wacca/schema/score.py @@ -1,13 +1,12 @@ -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, JSON, Boolean +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, TIMESTAMP from sqlalchemy.schema import ForeignKey from sqlalchemy.sql import func, select from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert -from typing import Optional, List, Dict, Any +from typing import Optional, List from core.data.schema import BaseData, metadata -from core.data import cached best_score = Table( "wacca_score_best", diff --git a/titles/wacca/schema/static.py b/titles/wacca/schema/static.py index 1714016..6a4270d 100644 --- a/titles/wacca/schema/static.py +++ b/titles/wacca/schema/static.py @@ -1,13 +1,11 @@ -from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_ -from sqlalchemy.types import Integer, String, TIMESTAMP, JSON, Boolean, Float -from sqlalchemy.schema import ForeignKey -from sqlalchemy.sql import func, select +from sqlalchemy import Table, Column, UniqueConstraint, and_ +from sqlalchemy.types import Integer, String, Float +from sqlalchemy.sql import select from sqlalchemy.engine import Row from sqlalchemy.dialects.mysql import insert -from typing import Optional, List, Dict, Any +from typing import Optional, List from core.data.schema import BaseData, metadata -from core.data import cached music = Table( "wacca_static_music",