from __future__ import annotations #from quart import Blueprint, g from quart import ( render_template, make_response, Blueprint, redirect, url_for, request, jsonify ) from shared.browser.app.redis_cacher import clear_all_cache from shared.browser.app.authz import require_admin from shared.browser.app.utils.htmx import is_htmx_request from shared.sx.helpers import sx_response from shared.config import config from datetime import datetime def register(url_prefix): bp = Blueprint("settings", __name__, url_prefix = url_prefix) @bp.context_processor async def inject_root(): return { "base_title": f"{config()['title']} settings", } @bp.before_request async def _prepare_page_data(): ep = request.endpoint or "" if "defpage_settings_home" in ep: from shared.sx.page import get_template_context from sx.sx_components import _settings_main_panel_sx tctx = await get_template_context() g.settings_content = _settings_main_panel_sx(tctx) elif "defpage_cache_page" in ep: from shared.sx.page import get_template_context from sx.sx_components import _cache_main_panel_sx tctx = await get_template_context() g.cache_content = _cache_main_panel_sx(tctx) from shared.sx.pages import mount_pages mount_pages(bp, "blog", names=["settings-home", "cache-page"]) @bp.post("/cache_clear/") @require_admin async def cache_clear(): await clear_all_cache() if is_htmx_request(): now = datetime.now() from shared.sx.jinja_bridge import render as render_comp html = render_comp("cache-cleared", time_str=now.strftime("%H:%M:%S")) return sx_response(html) return redirect(url_for("settings.defpage_cache_page")) return bp