Initializes the Fava client with default settings when the Castle extension starts. This ensures the client is ready to interact with Fava immediately and provides feedback if Fava is not configured correctly. The client is re-initialized if the admin updates settings later.
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
import asyncio
|
|
|
|
from fastapi import APIRouter
|
|
from loguru import logger
|
|
|
|
from .crud import db
|
|
from .tasks import wait_for_paid_invoices
|
|
from .views import castle_generic_router
|
|
from .views_api import castle_api_router
|
|
|
|
castle_ext: APIRouter = APIRouter(prefix="/castle", tags=["Castle"])
|
|
castle_ext.include_router(castle_generic_router)
|
|
castle_ext.include_router(castle_api_router)
|
|
|
|
castle_static_files = [
|
|
{
|
|
"path": "/castle/static",
|
|
"name": "castle_static",
|
|
}
|
|
]
|
|
|
|
scheduled_tasks: list[asyncio.Task] = []
|
|
|
|
|
|
def castle_stop():
|
|
"""Clean up background tasks on extension shutdown"""
|
|
for task in scheduled_tasks:
|
|
try:
|
|
task.cancel()
|
|
except Exception as ex:
|
|
logger.warning(ex)
|
|
|
|
|
|
def castle_start():
|
|
"""Initialize Castle extension background tasks"""
|
|
from lnbits.tasks import create_permanent_unique_task
|
|
from .fava_client import init_fava_client
|
|
from .models import CastleSettings
|
|
|
|
# Initialize Fava client with default settings
|
|
# (Will be re-initialized if admin updates settings)
|
|
defaults = CastleSettings()
|
|
try:
|
|
init_fava_client(
|
|
fava_url=defaults.fava_url,
|
|
ledger_slug=defaults.fava_ledger_slug,
|
|
timeout=defaults.fava_timeout
|
|
)
|
|
logger.info(f"Fava client initialized: {defaults.fava_url}/{defaults.fava_ledger_slug}")
|
|
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.")
|
|
|
|
# Start background tasks
|
|
task = create_permanent_unique_task("ext_castle", wait_for_paid_invoices)
|
|
scheduled_tasks.append(task)
|
|
|
|
|
|
__all__ = ["castle_ext", "castle_static_files", "db", "castle_start", "castle_stop"]
|