Files
Solo_bot/core/settings/web_config.py
T
2026-05-06 20:47:53 +00:00

83 lines
2.4 KiB
Python

from typing import Any
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from database.models import Setting
from database.settings_cache import settings_cache
from ..defaults import DEFAULT_WEB_CONFIG
from .runtime_sync import publish_runtime_config, register_runtime_config
WEB_CONFIG: dict[str, Any] = DEFAULT_WEB_CONFIG.copy()
WEB_SETTING_KEY = "WEB_CONFIG"
register_runtime_config(WEB_SETTING_KEY, WEB_CONFIG)
async def load_web_config(session: AsyncSession) -> None:
stmt = select(Setting).where(Setting.key == WEB_SETTING_KEY)
result = await session.execute(stmt)
setting = result.scalar_one_or_none()
if setting is None:
web_config = DEFAULT_WEB_CONFIG.copy()
setting = Setting(
key=WEB_SETTING_KEY,
value=web_config,
description="Конфигурация веб-сайта",
)
session.add(setting)
else:
stored = setting.value or {}
web_config = DEFAULT_WEB_CONFIG.copy()
web_config.update(stored)
setting.value = web_config
WEB_CONFIG.clear()
WEB_CONFIG.update(web_config)
await session.flush()
async def update_web_config(session: AsyncSession, new_values: dict[str, Any]) -> None:
stmt = select(Setting).where(Setting.key == WEB_SETTING_KEY)
result = await session.execute(stmt)
setting = result.scalar_one_or_none()
if setting is None:
setting = Setting(
key=WEB_SETTING_KEY,
value=new_values,
description="Конфигурация веб-сайта",
)
session.add(setting)
else:
setting.value = new_values
await session.commit()
web_config = DEFAULT_WEB_CONFIG.copy()
web_config.update(new_values)
WEB_CONFIG.clear()
WEB_CONFIG.update(web_config)
settings_cache.update(WEB_SETTING_KEY, web_config)
await publish_runtime_config(WEB_SETTING_KEY, web_config)
def get_site_url() -> str:
"""Возвращает SITE_URL из WEB_CONFIG, или из config.py как fallback."""
url = str(WEB_CONFIG.get("SITE_URL") or "").strip()
if url:
return url.rstrip("/")
from config import SITE_URL
return SITE_URL.rstrip("/") if SITE_URL else ""
def is_web_enabled() -> bool:
return bool(WEB_CONFIG.get("WEB_ENABLED", False))
def is_email_binding_enabled() -> bool:
return bool(WEB_CONFIG.get("EMAIL_BINDING_ENABLED", False))