You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.3 KiB

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/6/22 19:58
# @Author : old tom
# @File : db_config.py
# @Project : futool-db-lite
# @Desc :
import os
from pydantic import BaseModel
import toml
# 默认配置文件名
DEFAULT_CONF_NAME = 'db-conf.toml'
path = os.path.dirname(__file__)
path = os.path.dirname(path)
# 默认配置文件位置
DEFAULT_CONF_PATH = os.path.join(path, DEFAULT_CONF_NAME)
# 配置项名称
DB_CONF_ITEM_NAME = ['dialect', 'host', 'port', 'user', 'passwd', 'database']
class DbConfigNotFoundError(Exception):
"""
配置不存在异常
"""
def __init__(self, msg):
Exception.__init__(self, msg)
class DbConf(BaseModel):
dialect: str
host: str
port: int
user: str
passwd: str
database: str
pool_size: int
pool_recycle: int
show_sql: bool = False
class DbConfigLoader(object):
"""
数据库连接加载
"""
def __init__(self, db_name, conf_path):
if not os.path.isfile(conf_path):
raise DbConfigNotFoundError(f'数据配置文件{DEFAULT_CONF_NAME}不存在')
self.db_conf = self.load(db_name, conf_path)
@staticmethod
def load(dbname, conf_path) -> DbConf:
"""
校验并加载配置
:return:
"""
conf = toml.load(conf_path)
return DbConf(**conf[dbname])