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.get("/") @require_admin async def home(): from shared.sx.page import get_template_context from sx.sx_components import render_settings_page, render_settings_oob tctx = await get_template_context() if not is_htmx_request(): html = await render_settings_page(tctx) return await make_response(html) else: sx_src = await render_settings_oob(tctx) return sx_response(sx_src) @bp.get("/cache/") @require_admin async def cache(): from shared.sx.page import get_template_context from sx.sx_components import render_cache_page, render_cache_oob tctx = await get_template_context() if not is_htmx_request(): html = await render_cache_page(tctx) return await make_response(html) else: sx_src = await render_cache_oob(tctx) return sx_response(sx_src) @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.cache")) return bp