from __future__ import annotations from quart import ( request, render_template, make_response, Blueprint, g ) from sqlalchemy import select from models.market_place import MarketPlace from .services.markets import ( create_market as svc_create_market, soft_delete as svc_soft_delete, ) from suma_browser.app.redis_cacher import cache_page, clear_cache from suma_browser.app.authz import require_admin from suma_browser.app.utils.htmx import is_htmx_request def register(): bp = Blueprint("markets", __name__, url_prefix='/markets') @bp.context_processor async def inject_root(): return {} @bp.get("/") async def home(**kwargs): if not is_htmx_request(): html = await render_template("_types/markets/index.html") else: html = await render_template("_types/markets/_oob_elements.html") return await make_response(html) @bp.post("/new/") @require_admin async def create_market(**kwargs): form = await request.form name = (form.get("name") or "").strip() post_data = getattr(g, "post_data", None) post_id = (post_data.get("post") or {}).get("id") if post_data else None if not post_id: post_id = form.get("post_id") if post_id: post_id = int(post_id) try: await svc_create_market(g.s, post_id, name) except Exception as e: return await make_response(f'