基本结构以及计算降雨栅格
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
"""
|
||||
Configuration package
|
||||
"""
|
||||
@@ -0,0 +1,48 @@
|
||||
"""
|
||||
基础配置类
|
||||
"""
|
||||
from pydantic_settings import BaseSettings
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class EnvironmentEnum(str, Enum):
|
||||
"""环境枚举"""
|
||||
DEVELOPMENT = "development"
|
||||
PRODUCTION = "production"
|
||||
|
||||
|
||||
class BaseConfig(BaseSettings):
|
||||
"""基础配置类"""
|
||||
|
||||
# 应用基本信息
|
||||
APP_NAME: str = "西安项目算法"
|
||||
APP_VERSION: str = "1.0.0"
|
||||
ENVIRONMENT: EnvironmentEnum = EnvironmentEnum.DEVELOPMENT
|
||||
|
||||
# 调试模式
|
||||
DEBUG: bool = True
|
||||
|
||||
# API配置
|
||||
API_HOST: str = "127.0.0.1" # 默认只监听本地
|
||||
API_PORT: int = 8000
|
||||
|
||||
# CORS配置(默认只允许localhost)
|
||||
CORS_ORIGINS: list = ["http://localhost", "http://127.0.0.1"]
|
||||
|
||||
# 日志配置
|
||||
LOG_LEVEL: str = "INFO"
|
||||
LOG_DIR: str = "logs"
|
||||
|
||||
class Config:
|
||||
env_file = ".env.development" # 默认使用开发环境配置
|
||||
case_sensitive = True
|
||||
|
||||
@property
|
||||
def is_development(self) -> bool:
|
||||
"""是否为开发环境"""
|
||||
return self.ENVIRONMENT == EnvironmentEnum.DEVELOPMENT
|
||||
|
||||
@property
|
||||
def is_production(self) -> bool:
|
||||
"""是否为生产环境"""
|
||||
return self.ENVIRONMENT == EnvironmentEnum.PRODUCTION
|
||||
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
数据库配置
|
||||
"""
|
||||
from .base_config import BaseConfig
|
||||
|
||||
|
||||
class DatabaseConfig(BaseConfig):
|
||||
"""数据库配置类"""
|
||||
|
||||
# PostgreSQL配置
|
||||
DB_HOST: str = "localhost"
|
||||
DB_PORT: int = 5432
|
||||
DB_USER: str = "postgres"
|
||||
DB_PASSWORD: str = "postgres"
|
||||
DB_NAME: str = "test_db"
|
||||
|
||||
# 连接池配置
|
||||
DB_POOL_SIZE: int = 10
|
||||
DB_MAX_OVERFLOW: int = 20
|
||||
DB_POOL_TIMEOUT: int = 30
|
||||
DB_POOL_RECYCLE: int = 3600
|
||||
|
||||
@property
|
||||
def DATABASE_URL(self) -> str:
|
||||
"""构建数据库连接URL"""
|
||||
return (
|
||||
f"postgresql://{self.DB_USER}:{self.DB_PASSWORD}"
|
||||
f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
|
||||
)
|
||||
|
||||
@property
|
||||
def ASYNC_DATABASE_URL(self) -> str:
|
||||
"""构建异步数据库连接URL"""
|
||||
return (
|
||||
f"postgresql+asyncpg://{self.DB_USER}:{self.DB_PASSWORD}"
|
||||
f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
|
||||
)
|
||||
@@ -0,0 +1,22 @@
|
||||
"""
|
||||
开发环境配置
|
||||
"""
|
||||
from .database_config import DatabaseConfig
|
||||
from .base_config import EnvironmentEnum
|
||||
|
||||
|
||||
class DevelopmentConfig(DatabaseConfig):
|
||||
"""开发环境配置 - 只覆盖与生产不同的配置"""
|
||||
|
||||
ENVIRONMENT: EnvironmentEnum = EnvironmentEnum.DEVELOPMENT
|
||||
|
||||
# 调试和日志
|
||||
DEBUG: bool = True
|
||||
LOG_LEVEL: str = "DEBUG"
|
||||
|
||||
# 开发特性
|
||||
RELOAD: bool = True
|
||||
|
||||
class Config:
|
||||
env_file = ".env.development"
|
||||
case_sensitive = True
|
||||
@@ -0,0 +1,26 @@
|
||||
"""
|
||||
生产环境配置
|
||||
"""
|
||||
from .database_config import DatabaseConfig
|
||||
from .base_config import EnvironmentEnum
|
||||
|
||||
|
||||
class ProductionConfig(DatabaseConfig):
|
||||
"""生产环境配置 - 只覆盖性能和安全相关配置"""
|
||||
|
||||
ENVIRONMENT: EnvironmentEnum = EnvironmentEnum.PRODUCTION
|
||||
|
||||
# 调试和日志
|
||||
DEBUG: bool = False
|
||||
LOG_LEVEL: str = "WARNING"
|
||||
|
||||
# 生产特性
|
||||
RELOAD: bool = False
|
||||
|
||||
# 数据库连接池(生产环境需要更大)
|
||||
DB_POOL_SIZE: int = 20
|
||||
DB_MAX_OVERFLOW: int = 40
|
||||
|
||||
class Config:
|
||||
env_file = ".env.production"
|
||||
case_sensitive = True
|
||||
@@ -0,0 +1,65 @@
|
||||
"""
|
||||
配置加载器 - 根据环境自动加载对应配置
|
||||
"""
|
||||
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)
|
||||
Reference in New Issue
Block a user