Make SxExpr a str subclass, sx_call/render functions return SxExpr
SxExpr is now a str subclass so it works everywhere a plain string does (join, isinstance, f-strings) while serialize() still emits it unquoted. sx_call() and all internal render functions (_render_to_sx, async_eval_to_sx, etc.) return SxExpr, eliminating the "forgot to wrap" bug class that caused the sx_content leak and list serialization bugs. - Phase 0: SxExpr(str) with .source property, __add__/__radd__ - Phase 1: sx_call returns SxExpr (drop-in, all 200+ sites unchanged) - Phase 2: async_eval_to_sx, async_eval_slot_to_sx, _render_to_sx, mobile_menu_sx return SxExpr; remove isinstance(str) workaround - Phase 3: Remove ~150 redundant SxExpr() wrappings across 45 files - Phase 4: serialize() docstring, handler return docs, ;; returns: sx Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -110,7 +110,7 @@ def _product_detail_sx(d: dict, ctx: dict) -> str:
|
||||
|
||||
gallery_inner = sx_call(
|
||||
"market-detail-gallery-inner",
|
||||
like=SxExpr(like_sx) if like_sx else None,
|
||||
like=like_sx or None,
|
||||
image=images[0], alt=d.get("title", ""),
|
||||
labels=SxExpr(labels_sx) if labels_sx else None,
|
||||
brand=brand,
|
||||
@@ -123,8 +123,8 @@ def _product_detail_sx(d: dict, ctx: dict) -> str:
|
||||
|
||||
gallery_sx = sx_call(
|
||||
"market-detail-gallery",
|
||||
inner=SxExpr(gallery_inner),
|
||||
nav=SxExpr(nav_buttons) if nav_buttons else None,
|
||||
inner=gallery_inner,
|
||||
nav=nav_buttons or None,
|
||||
)
|
||||
|
||||
# Thumbnails
|
||||
@@ -144,7 +144,7 @@ def _product_detail_sx(d: dict, ctx: dict) -> str:
|
||||
if user:
|
||||
like_sx = _like_button_sx(slug, liked_by_current_user, csrf, ctx)
|
||||
gallery_final = sx_call("market-detail-no-image",
|
||||
like=SxExpr(like_sx) if like_sx else None)
|
||||
like=like_sx or None)
|
||||
|
||||
# Stickers below gallery
|
||||
stickers_sx = ""
|
||||
@@ -206,8 +206,8 @@ def _product_detail_sx(d: dict, ctx: dict) -> str:
|
||||
return sx_call(
|
||||
"market-detail-layout",
|
||||
gallery=SxExpr(gallery_final),
|
||||
stickers=SxExpr(stickers_sx) if stickers_sx else None,
|
||||
details=SxExpr(details_sx),
|
||||
stickers=stickers_sx or None,
|
||||
details=details_sx,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user