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

1""" 

2Application settings using pydantic-settings. 

3 

4Settings are loaded from environment variables and .env file. 

5""" 

6 

7import os 

8 

9from pydantic import Field 

10from pydantic_settings import BaseSettings, SettingsConfigDict 

11 

12 

13class Settings(BaseSettings): 

14 """Application settings loaded from environment variables.""" 

15 

16 model_config = SettingsConfigDict( 

17 env_file=".env", 

18 env_file_encoding="utf-8", 

19 case_sensitive=False, 

20 extra="ignore", 

21 ) 

22 

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") 

29 

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 ) 

39 

40 # API settings 

41 cors_origins: list[str] = Field( 

42 default=["*"], 

43 description="CORS allowed origins", 

44 ) 

45 

46 

47# FastMCP 要開啟實驗性功能(但之後會變正式版本),不然 openapi.json 解析會有問題 

48os.environ["FASTMCP_EXPERIMENTAL_ENABLE_NEW_OPENAPI_PARSER"] = "true" 

49 

50# Global settings instance 

51settings = Settings()