Replace sx_call() with render_to_sx() across all services
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m6s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m6s
Python no longer generates s-expression strings. All SX rendering now goes through render_to_sx() which builds AST from native Python values and evaluates via async_eval_to_sx() — no SX string literals in Python. - Add render_to_sx()/render_to_html() infrastructure in shared/sx/helpers.py - Add (abort status msg) IO primitive in shared/sx/primitives_io.py - Convert all 9 services: ~650 sx_call() invocations replaced - Convert shared helpers (root_header_sx, full_page_sx, etc.) to async - Fix likes service import bug (likes.models → models) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -42,6 +42,7 @@ IO_PRIMITIVES: frozenset[str] = frozenset({
|
||||
"get-children",
|
||||
"g",
|
||||
"csrf-token",
|
||||
"abort",
|
||||
})
|
||||
|
||||
|
||||
@@ -328,6 +329,22 @@ async def _io_csrf_token(
|
||||
return ""
|
||||
|
||||
|
||||
async def _io_abort(
|
||||
args: list[Any], kwargs: dict[str, Any], ctx: RequestContext
|
||||
) -> Any:
|
||||
"""``(abort 403 "message")`` — raise HTTP error from SX.
|
||||
|
||||
Allows defpages to abort with HTTP error codes for auth/ownership
|
||||
checks without needing a Python page helper.
|
||||
"""
|
||||
if not args:
|
||||
raise ValueError("abort requires a status code")
|
||||
from quart import abort
|
||||
status = int(args[0])
|
||||
message = str(args[1]) if len(args) > 1 else ""
|
||||
abort(status, message)
|
||||
|
||||
|
||||
_IO_HANDLERS: dict[str, Any] = {
|
||||
"frag": _io_frag,
|
||||
"query": _io_query,
|
||||
@@ -341,4 +358,5 @@ _IO_HANDLERS: dict[str, Any] = {
|
||||
"get-children": _io_get_children,
|
||||
"g": _io_g,
|
||||
"csrf-token": _io_csrf_token,
|
||||
"abort": _io_abort,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user