|
import os
|
|
from datetime import timedelta
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
load_dotenv(BASE_DIR / '.env')
|
|
|
|
|
|
class Config:
|
|
|
|
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'fallback-secret-key')
|
|
JWT_ACCESS_TOKEN_EXPIRES = timedelta(seconds=360000)
|
|
JWT_REFRESH_TOKEN_EXPIRES = timedelta(days=7)
|
|
JWT_TOKEN_LOCATION = ['headers']
|
|
JWT_HEADER_NAME = 'token'
|
|
JWT_HEADER_TYPE = ''
|
|
|
|
SECRET_KEY = os.getenv('SECRET_KEY', 'dev-key')
|
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
|
|
|
|
|
MAIL_SERVER = os.getenv('MAIL_SERVER', 'smtp.qq.com')
|
|
MAIL_PORT = int(os.getenv('MAIL_PORT', 465))
|
|
MAIL_USE_TLS = os.getenv('MAIL_USE_TLS', 'true').lower() == 'true'
|
|
MAIL_USERNAME = os.getenv('MAIL_USERNAME')
|
|
MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
|
|
MAIL_DEFAULT_SENDER = os.getenv('MAIL_DEFAULT_SENDER')
|
|
MAIL_DEBUG = True
|
|
|
|
CODE_EXPIRATION = 1800
|
|
|
|
|
|
UPLOAD_BASE_DIR='storage'
|
|
UPLOAD_ROOT = os.path.join(os.path.dirname(__file__), 'uploads')
|
|
DATE_FORMAT = "%Y-%m-%d"
|
|
ALLOWED_EXTENSIONS = {'docx', 'xlsx', 'pptx', 'pdf', 'txt', 'md', 'csv', 'xls', 'doc'}
|
|
|
|
MAX_FILE_SIZE = 10 * 1024 * 1024
|
|
MAX_USER_STORAGE = int(os.getenv('MAX_USER_STORAGE', 80 * 1024 * 1024))
|
|
|
|
STORAGE_FOLDER = '/app/storage'
|
|
STATIC_FOLDER = '/public/static'
|
|
|
|
|
|
SYSTEM_VERSION = 'business'
|
|
SITE_NAME = '智能翻译平台'
|
|
|
|
|
|
API_URL = 'https://api.example.com'
|
|
TRANSLATE_MODELS = ['gpt-3.5', 'gpt-4']
|
|
@property
|
|
def allowed_domains(self):
|
|
"""获取格式化的域名列表"""
|
|
domains = os.getenv('ALLOWED_DOMAINS', '')
|
|
return [d.strip() for d in domains.split(',') if d.strip()]
|
|
|
|
|
|
|
|
class DevelopmentConfig(Config):
|
|
DEBUG = True
|
|
|
|
SQLALCHEMY_DATABASE_URI = os.getenv(
|
|
'DEV_DATABASE_URL',
|
|
f'sqlite:////www/wwwroot/ez-work/backend/dev.db'
|
|
)
|
|
|
|
SQLALCHEMY_ENGINE_OPTIONS = {
|
|
'pool_pre_ping': True,
|
|
'echo': False
|
|
}
|
|
|
|
|
|
class TestingConfig(Config):
|
|
TESTING = True
|
|
|
|
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
|
|
WTF_CSRF_ENABLED = False
|
|
|
|
|
|
class ProductionConfig(Config):
|
|
|
|
SQLALCHEMY_DATABASE_URI = os.getenv(
|
|
'PROD_DATABASE_URL',
|
|
'mysql+pymysql://user:password@localhost/prod_db?charset=utf8mb4'
|
|
)
|
|
SQLALCHEMY_ENGINE_OPTIONS = {
|
|
'pool_pre_ping': True,
|
|
'pool_recycle': 300,
|
|
'pool_size': 20,
|
|
'max_overflow': 30,
|
|
'pool_timeout': 10
|
|
}
|
|
|
|
|
|
|
|
config = {
|
|
'development': DevelopmentConfig,
|
|
'testing': TestingConfig,
|
|
'production': ProductionConfig,
|
|
'default': DevelopmentConfig
|
|
}
|
|
|
|
|
|
def get_config(config_name=None):
|
|
"""安全获取配置对象的工厂方法"""
|
|
if config_name is None:
|
|
config_name = os.getenv('FLASK_ENV', 'development')
|
|
return config.get(config_name, config['default']) |