feat: ROUNDTABLE_* env vars with FABLEDSCRYER_* fallback

Reads ROUNDTABLE_<NAME> first, falls back to FABLEDSCRYER_<NAME> so
existing deployments keep working through the rebrand transition.
Covers DATABASE_URL, DATABASE__URL, SECRET_KEY, PLUGIN_DIR, CONFIG.
This commit is contained in:
2026-04-13 17:40:16 -04:00
parent fcd26346a2
commit a64f2195de
2 changed files with 24 additions and 11 deletions
+16 -5
View File
@@ -11,6 +11,17 @@ logger = logging.getLogger(__name__)
_SECRET_KEY_FILE = Path("/data/secret.key")
def _env(suffix: str) -> str | None:
"""Read ROUNDTABLE_<suffix>, falling back to FABLEDSCRYER_<suffix>.
Allows existing deployments to keep their old env vars working through
the rebrand transition. Remove the fallback once users have migrated.
"""
return os.environ.get(f"ROUNDTABLE_{suffix}") or os.environ.get(
f"FABLEDSCRYER_{suffix}"
)
def load_bootstrap(config_path: Path | str | None = None) -> dict[str, str]:
"""Return the minimum bootstrap config: database_url and secret_key.
@@ -33,19 +44,19 @@ def load_bootstrap(config_path: Path | str | None = None) -> dict[str, str]:
raw = yaml.safe_load(f) or {}
database_url = (
os.environ.get("FABLEDSCRYER_DATABASE_URL")
or os.environ.get("FABLEDSCRYER_DATABASE__URL")
_env("DATABASE_URL")
or _env("DATABASE__URL")
or raw.get("database", {}).get("url")
)
if not database_url:
raise ValueError(
"Database URL is required. Set FABLEDSCRYER_DATABASE_URL env var "
"Database URL is required. Set ROUNDTABLE_DATABASE_URL env var "
"or add 'database.url' to config.yaml."
)
secret_key = _resolve_secret_key(raw)
plugin_dir = (
os.environ.get("FABLEDSCRYER_PLUGIN_DIR")
_env("PLUGIN_DIR")
or raw.get("plugin_dir", "plugins")
)
@@ -58,7 +69,7 @@ def load_bootstrap(config_path: Path | str | None = None) -> dict[str, str]:
def _resolve_secret_key(raw: dict) -> str:
"""Resolve secret_key: env var → file → auto-generate."""
from_env = os.environ.get("FABLEDSCRYER_SECRET_KEY") or raw.get("secret_key")
from_env = _env("SECRET_KEY") or raw.get("secret_key")
if from_env:
return from_env
+8 -6
View File
@@ -16,18 +16,20 @@ target_metadata = Base.metadata
def get_url() -> str:
import os, yaml
cfg_path = os.environ.get("FABLEDSCRYER_CONFIG", "config.yaml")
def _env(suffix: str) -> str | None:
return os.environ.get(f"ROUNDTABLE_{suffix}") or os.environ.get(
f"FABLEDSCRYER_{suffix}"
)
cfg_path = _env("CONFIG") or "config.yaml"
try:
with open(cfg_path) as f:
cfg = yaml.safe_load(f) or {}
url = cfg.get("database", {}).get("url", "")
except FileNotFoundError:
url = ""
return (
os.environ.get("FABLEDSCRYER_DATABASE_URL")
or os.environ.get("FABLEDSCRYER_DATABASE__URL")
or url
)
return _env("DATABASE_URL") or _env("DATABASE__URL") or url
def _resolved_url() -> str: