#!/usr/bin/env python # -*- coding: UTF-8 -*- """ @Project :payment @File :__init__.py.py @IDE :PyCharm @Author :rengengchen @Time :2024/11/06 16:11 """ import argparse import os import random import sys from argparse import Namespace from configparser import ConfigParser import requests from loguru import logger random_seed = 20240717 ROOT_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) def setup_seed(seed): # import torch # torch.manual_seed(seed) # torch.cuda.manual_seed_all(seed) # torch.backends.cudnn.deterministic = True # import numpy as np # np.random.seed(seed) random.seed(seed) setup_seed(random_seed) class Config: def __init__(self, config_parser: ConfigParser = None, argument_parser: Namespace = None, **kwargs): if argument_parser: for k in vars(argument_parser): kwargs[k] = getattr(argument_parser, k) if config_parser: kwargs1 = kwargs.copy() for section in config_parser.sections(): section1 = kwargs.setdefault(section, Config(**kwargs1)) for option in config_parser.options(section): section1[option] = config_parser.get(section, option) self.config = {k: Config(**v) if isinstance(v, dict) else v for k, v in kwargs.items()} def refresh(self, **kwargs): kwargs = {k: Config(**v) if isinstance(v, dict) else v for k, v in kwargs.items()} self.config.update(kwargs) def get(self, item, default=None): if item in self.config: return self.config[item] return default def get_int(self, item): v = self.get(item) if v is not None: return int(v) def get_float(self, item): v = self.get(item) if v is not None: return float(v) def get_bool(self, item): v = self.get(item) if v is not None: return bool(v) def __getitem__(self, item): return self.config[item] def __setitem__(self, key, value): self.config[key] = value def __getattr__(self, key): if key in self.__dict__: return self.__dict__[key] try: return self.config[key] except KeyError: raise AttributeError(f"'{self}' object has no attribute '{key}'") def __str__(self): return str(self.config) def log_config(config): # fmt = '%(asctime)s [%(name)s] %(levelname)s: %(message)s' # datefmt = "%Y-%m-%d %H:%M:%S" logger.remove() logger.add(sys.stdout, level=config.log_level) logger.add(sys.stderr, level="ERROR") logger.add(os.path.join(ROOT_DIR, "logs", "recommender_{time}.log"), level="DEBUG", encoding='utf8', rotation="100 MB", retention=3) nacos_url = f"http://{os.getenv('NACOS_SOCKET', '192.168.15.40:38865')}/nacos/v1/cs/configs" def get_config() -> Config: requests.adapters.DEFAULT_RETRIES = 3 configparser = ConfigParser() configparser.read(fr'{ROOT_DIR}/config_file/param.conf') parser = argparse.ArgumentParser(description='recommendation system') parser.add_argument("--seed", type=int, default=2024) args = parser.parse_args() config = Config(configparser, args) return config