Wire SX_USE_REF=1 switching through all route intermediaries

jinja_bridge, helpers, handlers, query_executor now conditionally
import from ref/sx_ref and ref/async_eval_ref when SX_USE_REF=1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 22:17:26 +00:00
parent 7982a07f94
commit 5aa13a99d1
4 changed files with 44 additions and 9 deletions

View File

@@ -69,6 +69,10 @@ def clear_handlers(service: str | None = None) -> None:
def load_handler_file(filepath: str, service_name: str) -> list[HandlerDef]: def load_handler_file(filepath: str, service_name: str) -> list[HandlerDef]:
"""Parse an .sx file, evaluate it, and register any HandlerDef values.""" """Parse an .sx file, evaluate it, and register any HandlerDef values."""
from .parser import parse_all from .parser import parse_all
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.sx_ref import eval_expr as _raw_eval, trampoline as _trampoline
else:
from .evaluator import _eval as _raw_eval, _trampoline from .evaluator import _eval as _raw_eval, _trampoline
_eval = lambda expr, env: _trampoline(_raw_eval(expr, env)) _eval = lambda expr, env: _trampoline(_raw_eval(expr, env))
from .jinja_bridge import get_component_env from .jinja_bridge import get_component_env
@@ -126,6 +130,10 @@ async def execute_handler(
4. Return ``SxExpr`` wire format 4. Return ``SxExpr`` wire format
""" """
from .jinja_bridge import get_component_env, _get_request_context from .jinja_bridge import get_component_env, _get_request_context
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.async_eval_ref import async_eval_to_sx
else:
from .async_eval import async_eval_to_sx from .async_eval import async_eval_to_sx
from .types import NIL from .types import NIL

View File

@@ -346,6 +346,10 @@ async def _render_to_sx_with_env(__name: str, extra_env: dict, **kwargs: Any) ->
**Private** — service code should use ``sx_call()`` or defmacros instead. **Private** — service code should use ``sx_call()`` or defmacros instead.
""" """
from .jinja_bridge import get_component_env, _get_request_context from .jinja_bridge import get_component_env, _get_request_context
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.async_eval_ref import async_eval_slot_to_sx
else:
from .async_eval import async_eval_slot_to_sx from .async_eval import async_eval_slot_to_sx
from .types import Symbol, Keyword, NIL as _NIL from .types import Symbol, Keyword, NIL as _NIL
@@ -377,6 +381,10 @@ async def _render_to_sx(__name: str, **kwargs: Any) -> str:
Only infrastructure code (helpers.py, layouts.py) should call this. Only infrastructure code (helpers.py, layouts.py) should call this.
""" """
from .jinja_bridge import get_component_env, _get_request_context from .jinja_bridge import get_component_env, _get_request_context
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.async_eval_ref import async_eval_to_sx
else:
from .async_eval import async_eval_to_sx from .async_eval import async_eval_to_sx
ast = _build_component_ast(__name, **kwargs) ast = _build_component_ast(__name, **kwargs)
@@ -397,6 +405,10 @@ async def render_to_html(__name: str, **kwargs: Any) -> str:
format. Used by route renders that need HTML (full pages, fragments). format. Used by route renders that need HTML (full pages, fragments).
""" """
from .jinja_bridge import get_component_env, _get_request_context from .jinja_bridge import get_component_env, _get_request_context
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.async_eval_ref import async_render
else:
from .async_eval import async_render from .async_eval import async_render
ast = _build_component_ast(__name, **kwargs) ast = _build_component_ast(__name, **kwargs)

View File

@@ -27,7 +27,11 @@ from typing import Any
from .types import NIL, Component, Keyword, Macro, Symbol from .types import NIL, Component, Keyword, Macro, Symbol
from .parser import parse from .parser import parse
from .html import render as html_render, _render_component import os as _os
if _os.environ.get("SX_USE_REF") == "1":
from .ref.sx_ref import render as html_render, render_html_component as _render_component
else:
from .html import render as html_render, _render_component
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -169,6 +173,9 @@ def register_components(sx_source: str) -> None:
(div :class "..." (div :class "..." title))))) (div :class "..." (div :class "..." title)))))
''') ''')
""" """
if _os.environ.get("SX_USE_REF") == "1":
from .ref.sx_ref import eval_expr as _raw_eval, trampoline as _trampoline
else:
from .evaluator import _eval as _raw_eval, _trampoline from .evaluator import _eval as _raw_eval, _trampoline
_eval = lambda expr, env: _trampoline(_raw_eval(expr, env)) _eval = lambda expr, env: _trampoline(_raw_eval(expr, env))
from .parser import parse_all from .parser import parse_all

View File

@@ -20,6 +20,10 @@ async def execute_query(query_def: QueryDef, params: dict[str, str]) -> Any:
Parameters are bound from request query string args. Parameters are bound from request query string args.
""" """
from .jinja_bridge import get_component_env, _get_request_context from .jinja_bridge import get_component_env, _get_request_context
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.async_eval_ref import async_eval
else:
from .async_eval import async_eval from .async_eval import async_eval
env = dict(get_component_env()) env = dict(get_component_env())
@@ -45,6 +49,10 @@ async def execute_action(action_def: ActionDef, payload: dict[str, Any]) -> Any:
Parameters are bound from the JSON request body. Parameters are bound from the JSON request body.
""" """
from .jinja_bridge import get_component_env, _get_request_context from .jinja_bridge import get_component_env, _get_request_context
import os
if os.environ.get("SX_USE_REF") == "1":
from .ref.async_eval_ref import async_eval
else:
from .async_eval import async_eval from .async_eval import async_eval
env = dict(get_component_env()) env = dict(get_component_env())