Spaces:
Sleeping
Sleeping
File size: 3,317 Bytes
5564ecb c506a3f 87a0ffb 5564ecb ea3086a 5816e57 9239ad2 5564ecb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
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()
|