34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
"""Settings helpers. Imported from a service's ``settings/base.py``."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
_TRUE = {"1", "true", "yes", "on"}
|
|
|
|
|
|
def read_secret(secret_name: str, default: str | None = None) -> str | None:
|
|
"""Resolution order: docker secret, then fall back to environment, then to default.
|
|
"""
|
|
secret_path = f"/run/secrets/{secret_name}"
|
|
if os.path.exists(secret_path):
|
|
with open(secret_path, "r", encoding="utf-8") as file:
|
|
return file.read().strip()
|
|
return os.getenv(secret_name.upper(), default)
|
|
|
|
|
|
def env_bool(name: str, default: bool = False) -> bool:
|
|
"""Accepts 1/true/yes/on in any case.
|
|
|
|
Exists because ``os.getenv("X") == "True"`` silently ignored ``TRUE`` and
|
|
``1`` in two of the services' compose files.
|
|
"""
|
|
raw = os.getenv(name)
|
|
if raw is None:
|
|
return default
|
|
return raw.strip().lower() in _TRUE
|
|
|
|
|
|
def env_list(name: str, default: list[str] | None = None) -> list[str]:
|
|
raw = os.getenv(name, "")
|
|
return [item.strip() for item in raw.split(",") if item.strip()] or list(default or [])
|