import os import boto3 import logging import logging.config from typing import Optional from pydantic import Field from pydantic_settings import BaseSettings logger = logging.getLogger(__name__) class Settings(BaseSettings): # Material Project mp_api_key: Optional[str] = Field(None, env="MP_API_KEY") mp_endpoint: Optional[str] = Field(None, env="MP_ENDPOINT") mp_topk: Optional[int] = Field(3, env="MP_TOPK") # Proxy http_proxy: Optional[str] = Field(None, env="HTTP_PROXY") https_proxy: Optional[str] = Field(None, env="HTTPS_PROXY") # FairChem fairchem_model_path: Optional[str] = Field(None, env="FAIRCHEM_MODEL_PATH") fmax: Optional[float] = Field(0.05, env="FMAX") # MinIO minio_endpoint: Optional[str] = Field(None, env="MINIO_ENDPOINT") internal_minio_endpoint: Optional[str] = Field(None, env="INTERNAL_MINIO_ENDPOINT") minio_access_key: Optional[str] = Field(None, env="MINIO_ACCESS_KEY") minio_secret_key: Optional[str] = Field(None, env="MINIO_SECRET_KEY") minio_bucket: Optional[str] = Field("mars-toolkit", env="MINIO_BUCKET") class Config: env_file = ".env" env_file_encoding = "utf-8" def setup_logging(): """配置日志记录""" parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')) log_file_path = os.path.join(parent_dir, 'mars_toolkit.log') logging.config.dictConfig({ 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S' }, }, 'handlers': { 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'standard' }, 'file': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', 'filename': log_file_path, 'maxBytes': 10485760, # 10MB 'backupCount': 5, 'formatter': 'standard' } }, 'loggers': { '': { 'handlers': ['console', 'file'], 'level': 'INFO', 'propagate': True } } }) # 初始化配置 settings = Settings()