Remove render_to_sx from public API: enforce sx_call for all service code

Replace ~250 render_to_sx calls across all services with sync sx_call,
converting many async functions to sync where no other awaits remained.
Make render_to_sx/render_to_sx_with_env private (_render_to_sx).
Add (post-header-ctx) IO primitive and shared post/post-admin defmacros.
Convert built-in post/post-admin layouts from Python to register_sx_layout
with .sx defcomps. Remove dead post_admin_mobile_nav_sx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-04 19:30:45 +00:00
parent 57e0d0c341
commit 959e63d440
61 changed files with 1352 additions and 1208 deletions

View File

@@ -47,7 +47,7 @@ def register() -> Blueprint:
markets, has_more, page_info = await _load_markets(page)
from sxc.pages.renders import render_all_markets_cards
sx_src = await render_all_markets_cards(markets, has_more, page_info, page)
sx_src = render_all_markets_cards(markets, has_more, page_info, page)
return sx_response(sx_src)
return bp

View File

@@ -58,7 +58,7 @@ def register():
resp = await make_response(html)
elif product_info["page"] > 1:
tctx.update(product_info)
sx_src = await render_browse_cards(tctx)
sx_src = render_browse_cards(tctx)
resp = sx_response(sx_src)
else:
sx_src = await render_browse_oob(tctx)
@@ -99,7 +99,7 @@ def register():
resp = await make_response(html)
elif product_info["page"] > 1:
tctx.update(product_info)
sx_src = await render_browse_cards(tctx)
sx_src = render_browse_cards(tctx)
resp = sx_response(sx_src)
else:
sx_src = await render_browse_oob(tctx)
@@ -140,7 +140,7 @@ def register():
resp = await make_response(html)
elif product_info["page"] > 1:
tctx.update(product_info)
sx_src = await render_browse_cards(tctx)
sx_src = render_browse_cards(tctx)
resp = sx_response(sx_src)
else:
sx_src = await render_browse_oob(tctx)

View File

@@ -32,7 +32,7 @@ def register() -> Blueprint:
from sxc.pages.renders import render_page_markets_cards
post_slug = post.get("slug", "")
sx_src = await render_page_markets_cards(markets, has_more, page, post_slug)
sx_src = render_page_markets_cards(markets, has_more, page, post_slug)
return sx_response(sx_src)
return bp

View File

@@ -129,7 +129,7 @@ def register():
from sxc.pages.renders import render_like_toggle_button
if not g.user:
return sx_response(await render_like_toggle_button(product_slug, False), status=403)
return sx_response(render_like_toggle_button(product_slug, False), status=403)
user_id = g.user.id
@@ -138,7 +138,7 @@ def register():
})
liked = result["liked"]
return sx_response(await render_like_toggle_button(product_slug, liked))
return sx_response(render_like_toggle_button(product_slug, liked))
@@ -257,7 +257,7 @@ def register():
from sxc.pages.renders import render_cart_added_response
item_data = getattr(g, "item_data", {})
d = item_data.get("d", {})
return sx_response(await render_cart_added_response(g.cart, ci_ns, d))
return sx_response(render_cart_added_response(g.cart, ci_ns, d))
# normal POST: go to cart page
from shared.infrastructure.urls import cart_url