Coverage for app \ settings.py: 100%
28 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-28 20:58 -0400
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-28 20:58 -0400
1from pathlib import Path
2import os
4from dotenv import load_dotenv
6# Load env vars from .env (if present) and .env.txt (explicit file requested by user)
7load_dotenv()
8load_dotenv(".env.txt")
10BASE_DIR = Path(__file__).resolve().parent.parent
11TEMPLATES_DIR = BASE_DIR / "templates"
12PUBLIC_ASSETS_DIR = BASE_DIR / "public" / "assets"
13PACKAGED_DOWNLOADS_DIR = BASE_DIR / "downloads"
14STORAGE_ROOT = Path(
15 os.getenv("APP_STORAGE_ROOT")
16 or os.getenv("RAILWAY_VOLUME_MOUNT_PATH")
17 or str(BASE_DIR)
18)
19DOWNLOADS_DIR = Path(os.getenv("DOWNLOADS_DIR", str(STORAGE_ROOT / "downloads")))
20PRELOAD_DOWNLOAD_IDS = tuple(
21 item.strip()
22 for item in (os.getenv("PRELOAD_DOWNLOAD_IDS") or "IxX_QHay02M,jzWPkKvO7v4,17o2rPGryuk").split(",")
23 if item.strip()
24)
26#Where SQLite file goes
27DATA_DIR = Path(os.getenv("DATA_DIR", str(STORAGE_ROOT / "data")))
28DOWNLOADS_DIR.mkdir(parents=True, exist_ok=True)
29DATA_DIR.mkdir(parents=True, exist_ok=True)
31SESSION_SECRET = os.getenv("SESSION_SECRET", "change-this-session-secret")
32#For expert logins
33SQLITE_PATH = Path(os.getenv("SQLITE_PATH", str(DATA_DIR / "piggyback.db")))
35ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD", "admin123")
36EXPERT_PASSWORD = os.getenv("EXPERT_PASSWORD", "expert123")
37GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "").strip()
38ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "").strip()
39QUESTION_PROVIDER_DEFAULT = os.getenv("QUESTION_PROVIDER_DEFAULT", "openai").strip().lower()
41HUME_API_KEY = os.getenv("HUME_API_KEY", "").strip()
42HUME_VOICE_IDS = {
43 "blossom": os.getenv("HUME_VOICE_BLOSSOM", "").strip(),
44 "pippa": os.getenv("HUME_VOICE_PIPPA", "").strip(),
45 "ash": os.getenv("HUME_VOICE_ASH", "").strip(),
46}
48VIDEO_EXTENSIONS = (".mp4",".webm",".mkv",".mov")
50EXPERT_QUESTION_TYPES = [
51 ("character","Character"),
52 ("settings","Setting"),
53 ("feeling","Feeling"),
54 ("action","Action"),
55 ("causal","Causal"),
56 ("outcome","Outcome"),
57 ("prediction","Prediction"),
58]
60EXPERT_QUESTION_TYPE_VALUES = {value for value, _ in EXPERT_QUESTION_TYPES}
61EXPERT_QUESTION_TYPE_LABELS = {value: label for value, label in EXPERT_QUESTION_TYPES}