81 lines
3.6 KiB
Python
81 lines
3.6 KiB
Python
from logger import logger
|
|
|
|
from database import async_session_maker
|
|
from database.db import warm_pool
|
|
from database.settings_cache import settings_cache
|
|
from database.tariffs import initialize_all_tariff_weights
|
|
|
|
from .settings.buttons_config import BUTTONS_CONFIG, load_buttons_config, update_buttons_config
|
|
from .settings.management_config import MANAGEMENT_CONFIG, load_management_config, update_management_config
|
|
from .settings.modes_config import MODES_CONFIG, load_modes_config, update_modes_config
|
|
from .settings.money_config import MONEY_CONFIG, load_money_config, update_money_config
|
|
from .settings.notifications_config import NOTIFICATIONS_CONFIG, load_notifications_config, update_notifications_config
|
|
from .settings.payments_config import PAYMENTS_CONFIG, load_payments_config, update_payments_config
|
|
from .settings.providers_order_config import PROVIDERS_ORDER, load_providers_order, update_providers_order
|
|
from .settings.runtime_sync import publish_runtime_snapshot
|
|
from .settings.tariffs_config import TARIFFS_CONFIG, load_tariffs_config, update_tariffs_config
|
|
from .settings.web_config import WEB_CONFIG, load_web_config, update_web_config
|
|
|
|
|
|
async def bootstrap() -> None:
|
|
await warm_pool()
|
|
async with async_session_maker() as session:
|
|
await initialize_all_tariff_weights(session)
|
|
await load_buttons_config(session)
|
|
await load_notifications_config(session)
|
|
await load_modes_config(session)
|
|
await load_payments_config(session)
|
|
await load_providers_order(session)
|
|
await load_money_config(session)
|
|
await load_management_config(session)
|
|
await load_tariffs_config(session)
|
|
await load_web_config(session)
|
|
await session.commit()
|
|
await settings_cache.load(session)
|
|
await publish_runtime_snapshot()
|
|
|
|
try:
|
|
from api.v2.routes._data_uri_migration import run_startup_data_uri_migration
|
|
|
|
async with async_session_maker() as session:
|
|
rows_updated, uris_replaced = await run_startup_data_uri_migration(session)
|
|
if uris_replaced:
|
|
await session.commit()
|
|
logger.info(
|
|
"[bootstrap] data: URI migration: rows_updated={} uris_replaced={}",
|
|
rows_updated,
|
|
uris_replaced,
|
|
)
|
|
except Exception as exc:
|
|
logger.warning("[bootstrap] data: URI migration failed: {}", exc)
|
|
|
|
try:
|
|
from config import API_TOKEN_TTL_DAYS
|
|
from database.identity_sessions import cleanup_expired_sessions
|
|
|
|
async with async_session_maker() as session:
|
|
if API_TOKEN_TTL_DAYS is None:
|
|
from sqlalchemy import delete
|
|
|
|
from database.models import IdentitySession
|
|
|
|
result = await session.execute(delete(IdentitySession))
|
|
removed = int(result.rowcount or 0)
|
|
if removed:
|
|
await session.commit()
|
|
logger.info(
|
|
"[bootstrap] API_TOKEN_TTL_DAYS=None → identity sessions wiped on restart: {}",
|
|
removed,
|
|
)
|
|
else:
|
|
removed = await cleanup_expired_sessions(session)
|
|
if removed:
|
|
await session.commit()
|
|
logger.info(
|
|
"[bootstrap] expired identity sessions removed (TTL={}d): {}",
|
|
API_TOKEN_TTL_DAYS,
|
|
removed,
|
|
)
|
|
except Exception as exc:
|
|
logger.warning("[bootstrap] identity-session cleanup failed: {}", exc)
|