Files
recipe-importer/app/config.py
T
admin 458b1e362a feat: Tandoor integration — settings, test connection, import, duplicate detection
Add TandoorClient (app/tandoor.py) with full recipe creation, image upload,
and duplicate detection via the Tandoor REST API. Settings page now has
separate Mealie and Tandoor sections. Import page shows both send buttons
based on which services are configured.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 09:29:58 +01:00

46 lines
1.3 KiB
Python

"""Configuration management — persists Mealie and Tandoor connection settings to a JSON file."""
import json
import os
from pathlib import Path
DATA_DIR = Path(os.environ.get("DATA_DIR", "/data"))
CONFIG_FILE = DATA_DIR / "config.json"
# Optional internal URLs for Docker-to-Docker API calls (avoids Cloudflare hairpin).
# The user-facing URLs are still used for browser links.
MEALIE_INTERNAL_URL = os.environ.get("MEALIE_INTERNAL_URL", "").strip().rstrip("/")
TANDOOR_INTERNAL_URL = os.environ.get("TANDOOR_INTERNAL_URL", "").strip().rstrip("/")
_DEFAULTS = {
"mealie_url": "",
"mealie_api_key": "",
"tandoor_url": "",
"tandoor_api_key": "",
}
def _ensure_dir():
DATA_DIR.mkdir(parents=True, exist_ok=True)
def load() -> dict:
"""Return the current config dict, merged with defaults."""
cfg = dict(_DEFAULTS)
if CONFIG_FILE.exists():
try:
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
cfg.update(json.load(f))
except (json.JSONDecodeError, OSError):
pass
return cfg
def save(cfg: dict):
"""Atomically persist *cfg* to disk."""
_ensure_dir()
tmp = CONFIG_FILE.with_suffix(".tmp")
with open(tmp, "w", encoding="utf-8") as f:
json.dump(cfg, f, indent=2, ensure_ascii=False)
tmp.replace(CONFIG_FILE)