dialogflowAPI / core /conf.py
OnlyBiggg
refactor code
df37f6e
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",
]
@model_validator(mode="before")
@classmethod
def check_env(cls, values: Any) -> Any:
if values.get("ENVIRONMENT") == "pro":
values["FASTAPI_OPENAPI_URL"] = None
values["FASTAPI_STATIC_FILES"] = False
return values
@lru_cache
def get_settings() -> Settings:
return Settings()
settings = get_settings()