Spaces:
Sleeping
Sleeping
import os | |
from dotenv import load_dotenv | |
from functools import lru_cache | |
from typing import Any, Literal | |
from pydantic import model_validator | |
from pydantic_settings import BaseSettings, SettingsConfigDict | |
from core.path_conf import BASE_PATH | |
load_dotenv() | |
class Settings(BaseSettings): | |
model_config = SettingsConfigDict( | |
env_file = f'{BASE_PATH}/.env', | |
env_file_encoding = 'utf-8', | |
extra="ignore", | |
case_sensitive=True | |
) | |
ENVIRONMENT: Literal['dev', 'pro'] | |
API_BASE_URL: str | |
API_BASE_URL_VATO: str | |
API_BASE_URL_ACCESS_TOKEN: str | |
# DATABASE_TYPE: Literal['mysql', 'postgresql'] | |
# DATABASE_HOST: str | |
# DATABASE_PORT: int | |
# DATABASE_USER: str | |
# DATABASE_PASSWORD: str | |
# MODEl NER | |
NER_MODEL_DIR: str = 'app/ner/models/ner' | |
TASK_NAME: str = 'token-classification' | |
ACCELERATOR: str = 'ort' | |
DEVICE: str = 'cpu' | |
TRUNCATE: bool = True | |
MAX_LENGTH: int = 512 | |
# FastAPI | |
FASTAPI_API_V1_PATH: str = '/api/v1' | |
FASTAPI_TITLE: str = 'FastAPI' | |
FASTAPI_VERSION: str = '0.0.1' | |
FASTAPI_DESCRIPTION: str = 'FastAPI' | |
FASTAPI_DOCS_URL: str = '/docs' | |
FASTAPI_REDOC_URL: str = '/redoc' | |
FASTAPI_OPENAPI_URL: str | None = '/openapi' | |
FASTAPI_STATIC_FILES: bool = True | |
DATABASE_ECHO: bool = False | |
DATABASE_POOL_ECHO: bool = False | |
DATABASE_SCHEMA: str = 'fba' | |
DATABASE_CHARSET: str = 'utf8mb4' | |
CORS_ALLOWED_ORIGINS: list[str] = [ | |
'http://127.0.0.1:8000', | |
'http://localhost:5173', | |
] | |
CORS_EXPOSE_HEADERS: list[str] = [ | |
'X-Request-ID', | |
] | |
MIDDLEWARE_CORS: bool = True | |
MIDDLEWARE_ACCESS: bool = True | |
DATETIME_TIMEZONE: str = 'Asia/Ho_Chi_Minh' | |
DATETIME_FORMAT: str = '%Y-%m-%d %H:%M:%S' | |
UPLOAD_READ_SIZE: int = 1024 | |
UPLOAD_IMAGE_EXT_INCLUDE: list[str] = ['jpg', 'jpeg', 'png', 'gif', 'webp'] | |
UPLOAD_IMAGE_SIZE_MAX: int = 5 * 1024 * 1024 # 5 MB | |
UPLOAD_VIDEO_EXT_INCLUDE: list[str] = ['mp4', 'mov', 'avi', 'flv'] | |
UPLOAD_VIDEO_SIZE_MAX: int = 20 * 1024 * 1024 # 20 MB | |
TRACE_ID_REQUEST_HEADER_KEY: str = 'X-Request-ID' | |
# 日志 | |
LOG_CID_DEFAULT_VALUE: str = '-' | |
LOG_CID_UUID_LENGTH: int = 32 # 日志 correlation_id 长度,必须小于等于 32 | |
LOG_STD_LEVEL: str = 'INFO' | |
LOG_ACCESS_FILE_LEVEL: str = 'INFO' | |
LOG_ERROR_FILE_LEVEL: str = 'ERROR' | |
LOG_STD_FORMAT: str = ( | |
'<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</> | <lvl>{level: <8}</> | ' | |
'<cyan> {correlation_id} </> | <lvl>{message}</>' | |
) | |
LOG_FILE_FORMAT: str = ( | |
'<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</> | <lvl>{level: <8}</> | ' | |
'<cyan> {correlation_id} </> | <lvl>{message}</>' | |
) | |
LOG_ACCESS_FILENAME: str = 'fba_access.log' | |
LOG_ERROR_FILENAME: str = 'fba_error.log' | |
OPERA_LOG_PATH_EXCLUDE: list[str] = [ | |
'/favicon.ico', | |
'/docs', | |
'/redoc', | |
'/openapi', | |
] | |
def check_env(cls, values: Any) -> Any: | |
if values.get('ENVIRONMENT') == 'pro': | |
values['FASTAPI_OPENAPI_URL'] = None | |
values['FASTAPI_STATIC_FILES'] = False | |
return values | |
def get_settings() -> Settings: | |
return Settings() | |
settings = get_settings() | |