payment/config/settings.py

114 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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", "{time}.log"), level="DEBUG", encoding='utf8', rotation="100 MB", retention=3)
def get_config() -> Config:
requests.adapters.DEFAULT_RETRIES = 3
configparser = ConfigParser()
configparser.read(fr'{ROOT_DIR}/config_file/param.conf')
parser = argparse.ArgumentParser(description='payment system')
parser.add_argument("--seed", type=int, default=2024)
args = parser.parse_args()
config = Config(configparser, args)
return config