66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
"""
|
|
配置加载器 - 根据环境自动加载对应配置
|
|
"""
|
|
import os
|
|
from typing import Type
|
|
from .base_config import BaseConfig, EnvironmentEnum
|
|
from .development import DevelopmentConfig
|
|
from .production import ProductionConfig
|
|
|
|
|
|
def get_config_class(environment: str = None) -> Type[BaseConfig]:
|
|
"""根据环境获取配置类
|
|
|
|
Args:
|
|
environment: 环境名称 (development/production)
|
|
|
|
Returns:
|
|
对应的配置类
|
|
"""
|
|
if environment is None:
|
|
environment = os.getenv("ENVIRONMENT", "development")
|
|
|
|
config_map = {
|
|
EnvironmentEnum.DEVELOPMENT: DevelopmentConfig,
|
|
EnvironmentEnum.PRODUCTION: ProductionConfig,
|
|
}
|
|
|
|
try:
|
|
env_enum = EnvironmentEnum(environment)
|
|
return config_map[env_enum]
|
|
except ValueError:
|
|
print(f"警告: 未知环境 '{environment}',使用默认开发环境配置")
|
|
return DevelopmentConfig
|
|
|
|
|
|
def load_config(environment: str = None) -> BaseConfig:
|
|
"""加载配置
|
|
|
|
Args:
|
|
environment: 环境名称
|
|
|
|
Returns:
|
|
配置实例
|
|
"""
|
|
config_class = get_config_class(environment)
|
|
return config_class()
|
|
|
|
|
|
# 全局配置实例(延迟加载)
|
|
_config_instance = None
|
|
|
|
|
|
def get_settings() -> BaseConfig:
|
|
"""获取全局配置实例(单例模式)"""
|
|
global _config_instance
|
|
if _config_instance is None:
|
|
environment = os.getenv("ENVIRONMENT", None)
|
|
_config_instance = load_config(environment)
|
|
return _config_instance
|
|
|
|
|
|
def reload_config(environment: str = None):
|
|
"""重新加载配置"""
|
|
global _config_instance
|
|
_config_instance = load_config(environment)
|