Coverage for app/core/config.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-16 20:06 +0000

1import os 

2from typing import Literal 

3 

4from pydantic import SecretStr, computed_field 

5from pydantic_settings import BaseSettings, SettingsConfigDict 

6 

7ENV_FILES = { 

8 "dev": ".env", 

9 "test": ".env.test", 

10 "prod": ".env.prod", 

11} 

12 

13 

14class Settings(BaseSettings): 

15 DB_HOST: str 

16 DB_PORT: int 

17 DB_USER: str 

18 DB_PASSWORD: SecretStr 

19 DB_NAME: str 

20 APP_PORT: int 

21 ADMINER_PORT: int 

22 ENV: Literal["dev", "test", "prod"] 

23 

24 GRAFANA_ADMIN_USER: str = "admin" 

25 GRAFANA_ADMIN_USER_PASSWORD: SecretStr = SecretStr("admin") 

26 

27 @computed_field(repr=False) 

28 def DATABASE_URL(self) -> str: 

29 return ( 

30 f"postgresql+asyncpg://{self.DB_USER}:{self.DB_PASSWORD.get_secret_value()}" 

31 f"@{self.DB_HOST}:5432/{self.DB_NAME}" 

32 ) 

33 

34 model_config = SettingsConfigDict( 

35 env_file=ENV_FILES.get(os.getenv("ENV", "dev"), ".env"), 

36 env_file_encoding="utf-8", 

37 ) 

38 

39 

40settings = Settings() # type: ignore