krishnadhulipalla commited on
Commit
d51358c
·
unverified ·
1 Parent(s): d47881c

Update backend/app/config/settings.py

Browse files
Files changed (1) hide show
  1. backend/app/config/settings.py +37 -19
backend/app/config/settings.py CHANGED
@@ -1,38 +1,56 @@
1
- from pydantic_settings import BaseSettings, SettingsConfigDict
2
  from pathlib import Path
3
  from pydantic import Field
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  class Settings(BaseSettings):
6
-
7
  model_config = SettingsConfigDict(
8
  env_file=".env",
9
- extra="ignore",
10
- case_sensitive=False,
11
  populate_by_name=True,
12
  )
13
-
14
- FRONTEND_DIST: Path = Path("web") / "dist"
15
-
16
- # Models
17
  OPENAI_API_KEY: str | None = None
18
  OPENAI_MODEL_AGENT: str = "gpt-4o"
19
  OPENAI_MODEL_CLASSIFIER: str = "gpt-4o-mini"
20
 
21
- # Data paths
22
- DATA_DIR: Path = Path("data")
23
- REPORTS_DB: Path = DATA_DIR / "pulsemaps_reports.db"
24
- SESSIONS_DB: Path = DATA_DIR / "pulsemap_sessions.db"
25
- UPLOADS_DIR: Path = DATA_DIR / "uploads"
 
26
 
27
  # Defaults
28
- DEFAULT_RADIUS_KM: float = 40.0 # ~25 miles
29
  DEFAULT_LIMIT: int = 10
30
  MAX_AGE_HOURS: int = 48
31
 
32
- firms_map_key: str | None = Field(default=None, alias="FIRMS_MAP_KEY")
33
- gdacs_rss_url: str | None = Field(default="https://www.gdacs.org/xml/rss.xml", alias="GDACS_RSS_URL")
34
- nvidia_api_key: str | None = Field(default=None, alias="NVIDIA_API_KEY")
 
 
 
 
 
 
 
 
 
35
 
36
  settings = Settings()
37
- settings.DATA_DIR.mkdir(exist_ok=True)
38
- settings.UPLOADS_DIR.mkdir(parents=True, exist_ok=True)
 
 
1
  from pathlib import Path
2
  from pydantic import Field
3
+ from pydantic_settings import BaseSettings, SettingsConfigDict
4
+
5
+ # Resolve repo root no matter where uvicorn is launched from
6
+ REPO_ROOT = Path(__file__).resolve().parents[3]
7
+
8
+ def _default_data_dir() -> Path:
9
+ return (REPO_ROOT / "data").resolve()
10
+
11
+ def _default_uploads_dir() -> Path:
12
+ return (_default_data_dir() / "uploads").resolve()
13
+
14
+ def _default_frontend_dist() -> Path:
15
+ return (REPO_ROOT / "web" / "dist").resolve()
16
 
17
  class Settings(BaseSettings):
 
18
  model_config = SettingsConfigDict(
19
  env_file=".env",
20
+ extra="ignore",
21
+ case_sensitive=False,
22
  populate_by_name=True,
23
  )
24
+
25
+ # Models / API keys
 
 
26
  OPENAI_API_KEY: str | None = None
27
  OPENAI_MODEL_AGENT: str = "gpt-4o"
28
  OPENAI_MODEL_CLASSIFIER: str = "gpt-4o-mini"
29
 
30
+ # Paths (env may override with absolute or relative; we resolve below)
31
+ DATA_DIR: Path = Field(default_factory=_default_data_dir)
32
+ REPORTS_DB: Path = Field(default_factory=lambda: _default_data_dir() / "pulsemaps_reports.db")
33
+ SESSIONS_DB: Path = Field(default_factory=lambda: _default_data_dir() / "pulsemap_sessions.db")
34
+ UPLOADS_DIR: Path = Field(default_factory=_default_uploads_dir)
35
+ FRONTEND_DIST: Path = Field(default_factory=_default_frontend_dist)
36
 
37
  # Defaults
38
+ DEFAULT_RADIUS_KM: float = 40.0
39
  DEFAULT_LIMIT: int = 10
40
  MAX_AGE_HOURS: int = 48
41
 
42
+ # Optional extras you had in .env
43
+ firms_map_key: str | None = None
44
+ gdacs_rss_url: str | None = "https://www.gdacs.org/xml/rss.xml"
45
+ nvidia_api_key: str | None = None
46
+
47
+ def ensure_dirs(self) -> None:
48
+ # Resolve in case env provided relative strings
49
+ self.DATA_DIR = self.DATA_DIR.resolve()
50
+ self.UPLOADS_DIR = self.UPLOADS_DIR.resolve()
51
+ # Create everything robustly
52
+ self.DATA_DIR.mkdir(parents=True, exist_ok=True)
53
+ self.UPLOADS_DIR.mkdir(parents=True, exist_ok=True)
54
 
55
  settings = Settings()
56
+ settings.ensure_dirs()