Fix startup: load Fava settings from DB instead of hardcoded defaults
castle_start() was using CastleSettings() defaults (slug=castle-ledger) instead of reading the saved settings from the database. This caused all Fava queries to 404 on instances where the ledger slug differs from the default (e.g. demo-ledger). Now loads settings from extension_settings table at startup, falling back to defaults only if no saved settings exist. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f2f9183106
commit
9a1893c546
1 changed files with 27 additions and 8 deletions
35
__init__.py
35
__init__.py
|
|
@ -38,16 +38,35 @@ def castle_start():
|
|||
from .models import CastleSettings
|
||||
from .tasks import wait_for_account_sync
|
||||
|
||||
# Initialize Fava client with default settings
|
||||
# (Will be re-initialized if admin updates settings)
|
||||
defaults = CastleSettings()
|
||||
try:
|
||||
async def _init_fava():
|
||||
"""Load saved settings from DB, fall back to defaults."""
|
||||
from .crud import db as castle_db
|
||||
|
||||
settings = None
|
||||
try:
|
||||
row = await castle_db.fetchone(
|
||||
"SELECT * FROM extension_settings LIMIT 1",
|
||||
model=CastleSettings,
|
||||
)
|
||||
if row:
|
||||
settings = row
|
||||
logger.info(f"Loaded Castle settings from DB: {settings.fava_url}/{settings.fava_ledger_slug}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Could not load settings from DB: {e}")
|
||||
|
||||
if not settings:
|
||||
settings = CastleSettings()
|
||||
logger.info(f"Using default Castle settings: {settings.fava_url}/{settings.fava_ledger_slug}")
|
||||
|
||||
init_fava_client(
|
||||
fava_url=defaults.fava_url,
|
||||
ledger_slug=defaults.fava_ledger_slug,
|
||||
timeout=defaults.fava_timeout
|
||||
fava_url=settings.fava_url,
|
||||
ledger_slug=settings.fava_ledger_slug,
|
||||
timeout=settings.fava_timeout
|
||||
)
|
||||
logger.info(f"Fava client initialized: {defaults.fava_url}/{defaults.fava_ledger_slug}")
|
||||
logger.info(f"Fava client initialized: {settings.fava_url}/{settings.fava_ledger_slug}")
|
||||
|
||||
try:
|
||||
asyncio.get_event_loop().create_task(_init_fava())
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize Fava client: {e}")
|
||||
logger.warning("Castle will not function without Fava. Please configure Fava settings.")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue