Migrate all apps to defpage declarative page routes
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m41s

Replace Python GET page handlers with declarative defpage definitions in .sx
files across all 8 apps (sx docs, orders, account, market, cart, federation,
events, blog). Each app now has sxc/pages/ with setup functions, layout
registrations, page helpers, and .sx defpage declarations.

Core infrastructure: add g I/O primitive, PageDef support for auth/layout/
data/content/filter/aside/menu slots, post_author auth level, and custom
layout registration. Remove ~1400 lines of render_*_page/render_*_oob
boilerplate. Update all endpoint references in routes, sx_components, and
templates to defpage_* naming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-03 14:52:34 +00:00
parent 5b4cacaf19
commit c243d17eeb
108 changed files with 3598 additions and 2851 deletions

View File

@@ -213,9 +213,36 @@ class RelationDef:
nav_label: str | None # "markets"
# ---------------------------------------------------------------------------
# PageDef
# ---------------------------------------------------------------------------
@dataclass
class PageDef:
"""A declarative GET page defined in an .sx file.
Created by ``(defpage name :path "/..." :auth :public :content expr)``.
Slots are stored as unevaluated AST and resolved at request time.
"""
name: str
path: str
auth: str | list # "public", "login", "admin", or ["rights", ...]
layout: Any # layout name/config (unevaluated)
cache: dict | None
data_expr: Any # unevaluated AST
content_expr: Any # unevaluated AST
filter_expr: Any
aside_expr: Any
menu_expr: Any
closure: dict[str, Any] = field(default_factory=dict)
def __repr__(self):
return f"<page:{self.name} path={self.path!r}>"
# ---------------------------------------------------------------------------
# Type alias
# ---------------------------------------------------------------------------
# An s-expression value after evaluation
SExp = int | float | str | bool | Symbol | Keyword | Lambda | Macro | Component | HandlerDef | RelationDef | list | dict | _Nil | None
SExp = int | float | str | bool | Symbol | Keyword | Lambda | Macro | Component | HandlerDef | RelationDef | PageDef | list | dict | _Nil | None