| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import argparse
- import os
- import sys
- from functools import lru_cache
- from dotenv import load_dotenv
- from core.settings.app_settings import AppSettings
- from core.settings.cache_path_settings import CachePathSettings
- from core.settings.db_settings import DBSettings
- from core.settings.jwt_settings import JwtSettings
- from core.settings.log_settings import LogSettings
- from core.settings.redis_settings import RedisSettings
- from core.settings.upload_settings import UploadSettings
- class Settings:
- """
- 获取配置
- """
-
- def __init__(self):
- self.parse_cli_args()
- # 清除lru_cache缓存,确保配置重新加载
- self.get_app_settings.cache_clear()
-
- @lru_cache()
- def get_app_settings(self):
- """
- 获取应用配置
- """
- # 实例化应用配置模型
- app_settings = AppSettings()
- return app_settings
-
- @lru_cache()
- def get_jwt_settings(self):
- """
- 获取Jwt配置
- """
- # 实例化Jwt配置模型
- return JwtSettings()
-
- @lru_cache()
- def get_database_settings(self):
- """
- 获取数据库配置
- """
- # 实例化数据库配置模型
- return DBSettings()
-
- @lru_cache()
- def get_redis_settings(self):
- """
- 获取Redis配置
- """
- # 实例化Redis配置模型
- return RedisSettings()
-
- @lru_cache()
- def get_log_settings(self):
- """
- 获取日志配置
- """
- return LogSettings()
-
- @lru_cache()
- def get_upload_settings(self):
- """
- 获取数据库配置
- """
- # 实例上传配置
- return UploadSettings()
-
- @lru_cache()
- def get_cache_settings(self):
- """
- 获取缓存配置
- """
- # 实例化缓存配置模型
- return CachePathSettings()
-
- @staticmethod
- def parse_cli_args():
- """
- 解析命令行参数
- """
- if 'uvicorn' in sys.argv[0]:
- # 使用uvicorn启动时,命令行参数需要按照uvicorn的文档进行配置,无法自定义参数
- pass
- else:
- # 使用argparse定义命令行参数
- parser = argparse.ArgumentParser(description='命令行参数')
- parser.add_argument('--env', type=str, default='', help='运行环境')
- # 解析命令行参数
- args = parser.parse_args()
- # 设置环境变量,如果未设置命令行参数,默认APP_ENV为dev
- os.environ['APP_ENV'] = args.env if args.env else 'dev'
-
- # 读取运行环境
- run_env = os.environ.get('APP_ENV', '')
- # 运行环境未指定时默认加载.env.dev
- env_file = '.env.dev'
- # 运行环境不为空时按命令行参数加载对应.env文件
- if run_env != '':
- env_file = f'.env.{run_env}'
- # 加载配置
- load_dotenv(env_file, override=True)
|