Coverage for src/data_api/core/settings.py: 100%
15 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""
2Application settings using pydantic-settings.
4Settings are loaded from environment variables and .env file.
5"""
7import os
9from pydantic import Field
10from pydantic_settings import BaseSettings, SettingsConfigDict
13class Settings(BaseSettings):
14 """Application settings loaded from environment variables."""
16 model_config = SettingsConfigDict(
17 env_file=".env",
18 env_file_encoding="utf-8",
19 case_sensitive=False,
20 extra="ignore",
21 )
23 # Server settings
24 port: int = Field(default=5000, description="Server port")
25 dev_mode: bool = Field(default=False, description="Development mode")
26 host: str = Field(default="0.0.0.0", description="Server host")
27 workers: int = Field(default=2, description="Number of workers (production)")
28 log_level: str = Field(default="error", description="Log level")
30 # Data settings
31 file_details_cache_expiry: int = Field(
32 default=300,
33 gt=0,
34 description="Request-driven dataset freshness check TTL in seconds",
35 )
36 data_http_timeout: float = Field(
37 default=15, gt=0, description="Upstream HTTP timeout in seconds"
38 )
40 # API settings
41 cors_origins: list[str] = Field(
42 default=["*"],
43 description="CORS allowed origins",
44 )
47# FastMCP 要開啟實驗性功能(但之後會變正式版本),不然 openapi.json 解析會有問題
48os.environ["FASTMCP_EXPERIMENTAL_ENABLE_NEW_OPENAPI_PARSER"] = "true"
50# Global settings instance
51settings = Settings()