from dataclasses import dataclass import logging import configparser import os def configure_loging(main_logging: logging) -> None: log_dir: str = os.path.join(os.path.abspath(os.path.dirname(__file__)), "logs") logging.info("configure logging") for handler in main_logging.root.handlers[:]: main_logging.root.removeHandler(handler) main_logging.basicConfig( level=cfg.log.console_lvl, datefmt=cfg.log.dare_format, format=cfg.log.format, ) file_handler = main_logging.FileHandler(os.path.join(log_dir, "logfile.log")) file_handler.setLevel(cfg.log.file_lvl) file_handler.setFormatter(logging.Formatter(cfg.log.format)) main_logging.getLogger().addHandler(file_handler) main_logging.info("success configure logging") def load_config() -> configparser.ConfigParser: cfg_dir: str = os.path.join(os.path.abspath(os.path.dirname(__file__)), "config") logging.info("loading config") loaded_config: configparser.ConfigParser = configparser.ConfigParser( interpolation=None ) user_config: str = os.path.join(cfg_dir, "config.ini") loaded_config.read(user_config) logging.info("success loading config") return loaded_config config = load_config() @dataclass class ConfigLog: console_lvl: int = config["log"].getint("console_lvl") file_lvl: int = config["log"].getint("file_lvl") dare_format: str = config["log"].get("dare_format") format: str = config["log"].get("format") @dataclass class ConfigTelegram: send: bool = config["tg"].getboolean("send") if send: bot_token: str = os.getenv("TG_BOT_TOKEN") chat_id: int = int(os.getenv("TG_CHAT_ID")) @dataclass class ConfigBcp: dir: str = os.path.join(os.path.abspath(os.path.dirname(__file__)), "backups") file: str = config["bcp"].get("file") pattern: str = config["bcp"].get("pattern") start_at: str = config["bcp"].get("start_at") @dataclass class ConfigNetDev: user: str = os.getenv("NET_DEV_USER") domain: str = os.getenv("NET_DEV_DOMAIN") pwd: str = os.getenv("NET_DEV_PWD") ssh_port: int = config["net_dev"].getint("ssh_port") read_timeout: int = config["net_dev"].getint("read_timeout") delay_factor: int = config["net_dev"].getint("delay_factor") debug: bool = config["net_dev"].getboolean("debug") @dataclass class ConfigGit: push: str = config["git"].getboolean("push") user: str = config["git"].get("user") mail: str = config["git"].get("mail") remote: str = config["git"].get("remote") branch: str = config["git"].get("branch") protocol: str = config["git"].get("protocol") username: str = os.getenv("GIT_USERNAME") token: str = os.getenv("GIT_TOKEN") @dataclass class ConfigMail: send: bool = config["mail"].getboolean("send") if send: user: str = os.getenv('MAIL_USER') pwd: str = os.getenv('MAIL_PWD') server: str = config['mail'].get('server') port: int = config['mail'].getint('port') from_address : str = config['mail'].get('from_address') to_address : str = config['mail'].get('to_address') subject : str = config['mail'].get('subject') @dataclass() class ConfigAll: log: ConfigLog = ConfigLog tg: ConfigTelegram = ConfigTelegram bcp: ConfigBcp = ConfigBcp net_dev: ConfigNetDev = ConfigNetDev git: ConfigGit = ConfigGit mail: ConfigMail = ConfigMail cfg = ConfigAll configure_loging(logging)