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:
+16
-5
@@ -11,6 +11,17 @@ logger = logging.getLogger(__name__)
|
|||||||
_SECRET_KEY_FILE = Path("/data/secret.key")
|
_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]:
|
def load_bootstrap(config_path: Path | str | None = None) -> dict[str, str]:
|
||||||
"""Return the minimum bootstrap config: database_url and secret_key.
|
"""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 {}
|
raw = yaml.safe_load(f) or {}
|
||||||
|
|
||||||
database_url = (
|
database_url = (
|
||||||
os.environ.get("FABLEDSCRYER_DATABASE_URL")
|
_env("DATABASE_URL")
|
||||||
or os.environ.get("FABLEDSCRYER_DATABASE__URL")
|
or _env("DATABASE__URL")
|
||||||
or raw.get("database", {}).get("url")
|
or raw.get("database", {}).get("url")
|
||||||
)
|
)
|
||||||
if not database_url:
|
if not database_url:
|
||||||
raise ValueError(
|
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."
|
"or add 'database.url' to config.yaml."
|
||||||
)
|
)
|
||||||
|
|
||||||
secret_key = _resolve_secret_key(raw)
|
secret_key = _resolve_secret_key(raw)
|
||||||
plugin_dir = (
|
plugin_dir = (
|
||||||
os.environ.get("FABLEDSCRYER_PLUGIN_DIR")
|
_env("PLUGIN_DIR")
|
||||||
or raw.get("plugin_dir", "plugins")
|
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:
|
def _resolve_secret_key(raw: dict) -> str:
|
||||||
"""Resolve secret_key: env var → file → auto-generate."""
|
"""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:
|
if from_env:
|
||||||
return from_env
|
return from_env
|
||||||
|
|
||||||
|
|||||||
@@ -16,18 +16,20 @@ target_metadata = Base.metadata
|
|||||||
|
|
||||||
def get_url() -> str:
|
def get_url() -> str:
|
||||||
import os, yaml
|
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:
|
try:
|
||||||
with open(cfg_path) as f:
|
with open(cfg_path) as f:
|
||||||
cfg = yaml.safe_load(f) or {}
|
cfg = yaml.safe_load(f) or {}
|
||||||
url = cfg.get("database", {}).get("url", "")
|
url = cfg.get("database", {}).get("url", "")
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
url = ""
|
url = ""
|
||||||
return (
|
return _env("DATABASE_URL") or _env("DATABASE__URL") or url
|
||||||
os.environ.get("FABLEDSCRYER_DATABASE_URL")
|
|
||||||
or os.environ.get("FABLEDSCRYER_DATABASE__URL")
|
|
||||||
or url
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _resolved_url() -> str:
|
def _resolved_url() -> str:
|
||||||
|
|||||||
Reference in New Issue
Block a user