Files
wakapi-readme-stats/sources/manager_debug.py
2023-02-22 21:10:36 +01:00

66 lines
2.2 KiB
Python

from datetime import datetime
from logging import getLogger, Logger, StreamHandler
from string import Template
from typing import Dict
from humanize import precisedelta
from manager_environment import EnvironmentManager as EM
def init_debug_manager():
"""
Initialize download manager:
- Setup headers for GitHub GraphQL requests.
- Launch static queries in background.
"""
DebugManager.create_logger("DEBUG" if EM.DEBUG_LOGGING else "ERROR")
class DebugManager:
_COLOR_RESET = "\u001B[0m"
_COLOR_RED = "\u001B[31m"
_COLOR_GREEN = "\u001B[32m"
_COLOR_BLUE = "\u001B[34m"
_COLOR_YELLOW = "\u001B[33m"
_DATE_TEMPLATE = "date"
_TIME_TEMPLATE = "time"
_logger: Logger
@staticmethod
def create_logger(level: str):
DebugManager._logger = getLogger(__name__)
DebugManager._logger.setLevel(level)
DebugManager._logger.addHandler(StreamHandler())
@staticmethod
def _process_template(message: str, kwargs: Dict) -> str:
if DebugManager._DATE_TEMPLATE in kwargs:
kwargs[DebugManager._DATE_TEMPLATE] = f"{datetime.strftime(kwargs[DebugManager._DATE_TEMPLATE], '%d-%m-%Y %H:%M:%S:%f')}"
if DebugManager._TIME_TEMPLATE in kwargs:
kwargs[DebugManager._TIME_TEMPLATE] = precisedelta(kwargs[DebugManager._TIME_TEMPLATE], minimum_unit="microseconds")
return Template(message).substitute(kwargs)
@staticmethod
def g(message: str, **kwargs):
message = DebugManager._process_template(message, kwargs)
DebugManager._logger.info(f"{DebugManager._COLOR_GREEN}{message}{DebugManager._COLOR_RESET}")
@staticmethod
def i(message: str, **kwargs):
message = DebugManager._process_template(message, kwargs)
DebugManager._logger.debug(f"{DebugManager._COLOR_BLUE}{message}{DebugManager._COLOR_RESET}")
@staticmethod
def w(message: str, **kwargs):
message = DebugManager._process_template(message, kwargs)
DebugManager._logger.warning(f"{DebugManager._COLOR_YELLOW}{message}{DebugManager._COLOR_RESET}")
@staticmethod
def p(message: str, **kwargs):
message = DebugManager._process_template(message, kwargs)
DebugManager._logger.error(message)