Restructure SX docs nav into 4 top-level sections with nested routing

New hierarchy: Geography (Reactive Islands, Hypermedia Lakes, Marshes,
Isomorphism), Language (Docs, Specs, Bootstrappers, Testing),
Applications (CSSX, Protocols), Etc (Essays, Philosophy, Plans).

All routes updated to match: /reactive/* → /geography/reactive/*,
/docs/* → /language/docs/*, /essays/* → /etc/essays/*, etc.
Updates nav-data.sx, all defpage routes, API endpoints, internal links
across 43 files. Enhanced find-nav-match for nested group resolution.

Also includes: page-helpers-demo sf-total fix (reduce instead of set!),
rebootstrapped sx-browser.js and sx_ref.py, defensive slice/rest guards.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 18:50:31 +00:00
parent 0174fbfea3
commit 4d54be6b6b
43 changed files with 813 additions and 746 deletions

View File

@@ -22,7 +22,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# Example API endpoints (for live demos)
# ------------------------------------------------------------------
@bp.get("/hypermedia/examples/api/click")
@bp.get("/geography/hypermedia/examples/api/click")
async def api_click():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -35,7 +35,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@csrf_exempt
@bp.post("/hypermedia/examples/api/form")
@bp.post("/geography/hypermedia/examples/api/form")
async def api_form():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -51,7 +51,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_poll_count = {"n": 0}
@bp.get("/hypermedia/examples/api/poll")
@bp.get("/geography/hypermedia/examples/api/poll")
async def api_poll():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -66,7 +66,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@csrf_exempt
@bp.delete("/hypermedia/examples/api/delete/<item_id>")
@bp.delete("/geography/hypermedia/examples/api/delete/<item_id>")
async def api_delete(item_id: str):
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -78,7 +78,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("delete-comp", comp_text)
return sx_response(f'(<> {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/edit")
@bp.get("/geography/hypermedia/examples/api/edit")
async def api_edit_form():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -92,7 +92,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@csrf_exempt
@bp.post("/hypermedia/examples/api/edit")
@bp.post("/geography/hypermedia/examples/api/edit")
async def api_edit_save():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -106,7 +106,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("edit-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/edit/cancel")
@bp.get("/geography/hypermedia/examples/api/edit/cancel")
async def api_edit_cancel():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -119,7 +119,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("edit-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/oob")
@bp.get("/geography/hypermedia/examples/api/oob")
async def api_oob():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -138,7 +138,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Lazy Loading ---
@bp.get("/hypermedia/examples/api/lazy")
@bp.get("/geography/hypermedia/examples/api/lazy")
async def api_lazy():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -152,7 +152,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Infinite Scroll ---
@bp.get("/hypermedia/examples/api/scroll")
@bp.get("/geography/hypermedia/examples/api/scroll")
async def api_scroll():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -166,7 +166,7 @@ def register(url_prefix: str = "/") -> Blueprint:
if next_page <= 6:
sentinel = (
f'(div :id "scroll-sentinel"'
f' :sx-get "/hypermedia/examples/api/scroll?page={next_page}"'
f' :sx-get "/geography/hypermedia/examples/api/scroll?page={next_page}"'
f' :sx-trigger "intersect once"'
f' :sx-target "#scroll-items"'
f' :sx-swap "beforeend"'
@@ -188,7 +188,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_jobs: dict[str, int] = {}
@csrf_exempt
@bp.post("/hypermedia/examples/api/progress/start")
@bp.post("/geography/hypermedia/examples/api/progress/start")
async def api_progress_start():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -201,7 +201,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("progress-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/progress/status")
@bp.get("/geography/hypermedia/examples/api/progress/status")
async def api_progress_status():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -218,7 +218,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Active Search ---
@bp.get("/hypermedia/examples/api/search")
@bp.get("/geography/hypermedia/examples/api/search")
async def api_search():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -241,7 +241,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_TAKEN_EMAILS = {"admin@example.com", "test@example.com", "user@example.com"}
@bp.get("/hypermedia/examples/api/validate")
@bp.get("/geography/hypermedia/examples/api/validate")
async def api_validate():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -267,7 +267,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@csrf_exempt
@bp.post("/hypermedia/examples/api/validate/submit")
@bp.post("/geography/hypermedia/examples/api/validate/submit")
async def api_validate_submit():
from shared.sx.helpers import sx_response
form = await request.form
@@ -279,7 +279,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Value Select ---
@bp.get("/hypermedia/examples/api/values")
@bp.get("/geography/hypermedia/examples/api/values")
async def api_values():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -297,7 +297,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Reset on Submit ---
@csrf_exempt
@bp.post("/hypermedia/examples/api/reset-submit")
@bp.post("/geography/hypermedia/examples/api/reset-submit")
async def api_reset_submit():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -323,7 +323,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_edit_rows[r["id"]] = dict(r)
return _edit_rows
@bp.get("/hypermedia/examples/api/editrow/<row_id>")
@bp.get("/geography/hypermedia/examples/api/editrow/<row_id>")
async def api_editrow_form(row_id: str):
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -338,7 +338,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@csrf_exempt
@bp.post("/hypermedia/examples/api/editrow/<row_id>")
@bp.post("/geography/hypermedia/examples/api/editrow/<row_id>")
async def api_editrow_save(row_id: str):
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -359,7 +359,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("editrow-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/editrow/<row_id>/cancel")
@bp.get("/geography/hypermedia/examples/api/editrow/<row_id>/cancel")
async def api_editrow_cancel(row_id: str):
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -385,7 +385,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return _bulk_users
@csrf_exempt
@bp.post("/hypermedia/examples/api/bulk")
@bp.post("/geography/hypermedia/examples/api/bulk")
async def api_bulk():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -415,7 +415,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_swap_count = {"n": 0}
@csrf_exempt
@bp.post("/hypermedia/examples/api/swap-log")
@bp.post("/geography/hypermedia/examples/api/swap-log")
async def api_swap_log():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -435,7 +435,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Select Filter (dashboard) ---
@bp.get("/hypermedia/examples/api/dashboard")
@bp.get("/geography/hypermedia/examples/api/dashboard")
async def api_dashboard():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -480,7 +480,7 @@ def register(url_prefix: str = "/") -> Blueprint:
' (li "Wire format v2")))'),
}
@bp.get("/hypermedia/examples/api/tabs/<tab>")
@bp.get("/geography/hypermedia/examples/api/tabs/<tab>")
async def api_tabs(tab: str):
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -500,7 +500,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Animations ---
@bp.get("/hypermedia/examples/api/animate")
@bp.get("/geography/hypermedia/examples/api/animate")
async def api_animate():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -516,7 +516,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Dialogs ---
@bp.get("/hypermedia/examples/api/dialog")
@bp.get("/geography/hypermedia/examples/api/dialog")
async def api_dialog():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -527,7 +527,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("dialog-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/dialog/close")
@bp.get("/geography/hypermedia/examples/api/dialog/close")
async def api_dialog_close():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _full_wire_text
@@ -543,7 +543,7 @@ def register(url_prefix: str = "/") -> Blueprint:
"h": "Help panel opened",
}
@bp.get("/hypermedia/examples/api/keyboard")
@bp.get("/geography/hypermedia/examples/api/keyboard")
async def api_keyboard():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -568,7 +568,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_profile.update(PROFILE_DEFAULT)
return _profile
@bp.get("/hypermedia/examples/api/putpatch/edit-all")
@bp.get("/geography/hypermedia/examples/api/putpatch/edit-all")
async def api_pp_edit_all():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -581,7 +581,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@csrf_exempt
@bp.put("/hypermedia/examples/api/putpatch")
@bp.put("/geography/hypermedia/examples/api/putpatch")
async def api_pp_put():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -597,7 +597,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("pp-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/putpatch/cancel")
@bp.get("/geography/hypermedia/examples/api/putpatch/cancel")
async def api_pp_cancel():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -612,7 +612,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- JSON Encoding ---
@csrf_exempt
@bp.post("/hypermedia/examples/api/json-echo")
@bp.post("/geography/hypermedia/examples/api/json-echo")
async def api_json_echo():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -630,7 +630,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Vals & Headers ---
@bp.get("/hypermedia/examples/api/echo-vals")
@bp.get("/geography/hypermedia/examples/api/echo-vals")
async def api_echo_vals():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -644,7 +644,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob_comp = _oob_code("vals-comp", comp_text)
return sx_response(f'(<> {sx_src} {oob_wire} {oob_comp})')
@bp.get("/hypermedia/examples/api/echo-headers")
@bp.get("/geography/hypermedia/examples/api/echo-headers")
async def api_echo_headers():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -659,7 +659,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Loading States ---
@bp.get("/hypermedia/examples/api/slow")
@bp.get("/geography/hypermedia/examples/api/slow")
async def api_slow():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -674,7 +674,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Request Abort (sync replace) ---
@bp.get("/hypermedia/examples/api/slow-search")
@bp.get("/geography/hypermedia/examples/api/slow-search")
async def api_slow_search():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -694,7 +694,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_flaky = {"n": 0}
@bp.get("/hypermedia/examples/api/flaky")
@bp.get("/geography/hypermedia/examples/api/flaky")
async def api_flaky():
from shared.sx.helpers import sx_response
from sxc.pages.renders import _oob_code, _component_source_text, _full_wire_text
@@ -718,7 +718,7 @@ def register(url_prefix: str = "/") -> Blueprint:
from sxc.pages.renders import _oob_code
return _oob_code(f"ref-wire-{wire_id}", sx_src)
@bp.get("/hypermedia/reference/api/time")
@bp.get("/geography/hypermedia/reference/api/time")
async def ref_time():
from shared.sx.helpers import sx_response
now = datetime.now().strftime("%H:%M:%S")
@@ -727,7 +727,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob})')
@csrf_exempt
@bp.post("/hypermedia/reference/api/greet")
@bp.post("/geography/hypermedia/reference/api/greet")
async def ref_greet():
from shared.sx.helpers import sx_response
form = await request.form
@@ -737,7 +737,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob})')
@csrf_exempt
@bp.put("/hypermedia/reference/api/status")
@bp.put("/geography/hypermedia/reference/api/status")
async def ref_status():
from shared.sx.helpers import sx_response
form = await request.form
@@ -747,7 +747,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob})')
@csrf_exempt
@bp.patch("/hypermedia/reference/api/theme")
@bp.patch("/geography/hypermedia/reference/api/theme")
async def ref_theme():
from shared.sx.helpers import sx_response
form = await request.form
@@ -757,13 +757,13 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob})')
@csrf_exempt
@bp.delete("/hypermedia/reference/api/item/<item_id>")
@bp.delete("/geography/hypermedia/reference/api/item/<item_id>")
async def ref_delete(item_id: str):
from shared.sx.helpers import sx_response
oob = _ref_wire("sx-delete", '""')
return sx_response(f'(<> {oob})')
@bp.get("/hypermedia/reference/api/trigger-search")
@bp.get("/geography/hypermedia/reference/api/trigger-search")
async def ref_trigger_search():
from shared.sx.helpers import sx_response
q = request.args.get("q", "")
@@ -774,7 +774,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-trigger", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/swap-item")
@bp.get("/geography/hypermedia/reference/api/swap-item")
async def ref_swap_item():
from shared.sx.helpers import sx_response
now = datetime.now().strftime("%H:%M:%S")
@@ -782,7 +782,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-swap", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/oob")
@bp.get("/geography/hypermedia/reference/api/oob")
async def ref_oob():
from shared.sx.helpers import sx_response
now = datetime.now().strftime("%H:%M:%S")
@@ -794,7 +794,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-swap-oob", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/select-page")
@bp.get("/geography/hypermedia/reference/api/select-page")
async def ref_select_page():
from shared.sx.helpers import sx_response
now = datetime.now().strftime("%H:%M:%S")
@@ -808,7 +808,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-select", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/slow-echo")
@bp.get("/geography/hypermedia/reference/api/slow-echo")
async def ref_slow_echo():
from shared.sx.helpers import sx_response
await asyncio.sleep(0.8)
@@ -818,7 +818,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob})')
@csrf_exempt
@bp.post("/hypermedia/reference/api/upload-name")
@bp.post("/geography/hypermedia/reference/api/upload-name")
async def ref_upload_name():
from shared.sx.helpers import sx_response
files = await request.files
@@ -828,7 +828,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-encoding", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/echo-headers")
@bp.get("/geography/hypermedia/reference/api/echo-headers")
async def ref_echo_headers():
from shared.sx.helpers import sx_response
custom = [(k, v) for k, v in request.headers if k.lower().startswith("x-")]
@@ -841,7 +841,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-headers", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/echo-vals")
@bp.get("/geography/hypermedia/reference/api/echo-vals")
async def ref_echo_vals_get():
from shared.sx.helpers import sx_response
vals = list(request.args.items())
@@ -855,7 +855,7 @@ def register(url_prefix: str = "/") -> Blueprint:
return sx_response(f'(<> {sx_src} {oob_include})')
@csrf_exempt
@bp.post("/hypermedia/reference/api/echo-vals")
@bp.post("/geography/hypermedia/reference/api/echo-vals")
async def ref_echo_vals_post():
from shared.sx.helpers import sx_response
form = await request.form
@@ -871,7 +871,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_ref_flaky = {"n": 0}
@bp.get("/hypermedia/reference/api/flaky")
@bp.get("/geography/hypermedia/reference/api/flaky")
async def ref_flaky():
from shared.sx.helpers import sx_response
_ref_flaky["n"] += 1
@@ -882,7 +882,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-retry", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/prompt-echo")
@bp.get("/geography/hypermedia/reference/api/prompt-echo")
async def ref_prompt_echo():
from shared.sx.helpers import sx_response
name = request.headers.get("SX-Prompt", "anonymous")
@@ -890,7 +890,7 @@ def register(url_prefix: str = "/") -> Blueprint:
oob = _ref_wire("sx-prompt", sx_src)
return sx_response(f'(<> {sx_src} {oob})')
@bp.get("/hypermedia/reference/api/sse-time")
@bp.get("/geography/hypermedia/reference/api/sse-time")
async def ref_sse_time():
async def generate():
for _ in range(30): # stream for 60 seconds max
@@ -905,7 +905,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_marsh_sale_idx = {"n": 0}
@bp.get("/reactive/api/flash-sale")
@bp.get("/geography/reactive/api/flash-sale")
async def api_marsh_flash_sale():
from shared.sx.helpers import sx_response
prices = [14.99, 9.99, 24.99, 12.49, 7.99, 29.99, 4.99, 16.50]
@@ -927,7 +927,7 @@ def register(url_prefix: str = "/") -> Blueprint:
_settle_counter = {"n": 0}
@bp.get("/reactive/api/settle-data")
@bp.get("/geography/reactive/api/settle-data")
async def api_settle_data():
from shared.sx.helpers import sx_response
_settle_counter["n"] += 1
@@ -943,7 +943,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Demo 4: signal-bound URL endpoints ---
@bp.get("/reactive/api/search/products")
@bp.get("/geography/reactive/api/search/products")
async def api_search_products():
from shared.sx.helpers import sx_response
q = request.args.get("q", "")
@@ -962,7 +962,7 @@ def register(url_prefix: str = "/") -> Blueprint:
)
return sx_response(sx_src)
@bp.get("/reactive/api/search/events")
@bp.get("/geography/reactive/api/search/events")
async def api_search_events():
from shared.sx.helpers import sx_response
q = request.args.get("q", "")
@@ -981,7 +981,7 @@ def register(url_prefix: str = "/") -> Blueprint:
)
return sx_response(sx_src)
@bp.get("/reactive/api/search/posts")
@bp.get("/geography/reactive/api/search/posts")
async def api_search_posts():
from shared.sx.helpers import sx_response
q = request.args.get("q", "")
@@ -1002,7 +1002,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Demo 5: marsh transform endpoint ---
@bp.get("/reactive/api/catalog")
@bp.get("/geography/reactive/api/catalog")
async def api_catalog():
from shared.sx.helpers import sx_response
items = [
@@ -1031,7 +1031,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Header demos ---
@bp.get("/hypermedia/reference/api/trigger-event")
@bp.get("/geography/hypermedia/reference/api/trigger-event")
async def ref_trigger_event():
from shared.sx.helpers import sx_response
now = datetime.now().strftime("%H:%M:%S")
@@ -1040,7 +1040,7 @@ def register(url_prefix: str = "/") -> Blueprint:
resp.headers["SX-Trigger"] = "showNotice"
return resp
@bp.get("/hypermedia/reference/api/retarget")
@bp.get("/geography/hypermedia/reference/api/retarget")
async def ref_retarget():
from shared.sx.helpers import sx_response
now = datetime.now().strftime("%H:%M:%S")
@@ -1051,7 +1051,7 @@ def register(url_prefix: str = "/") -> Blueprint:
# --- Event demos ---
@bp.get("/hypermedia/reference/api/error-500")
@bp.get("/geography/hypermedia/reference/api/error-500")
async def ref_error_500():
return Response("Server error", status=500, content_type="text/plain")