Rebrand sexp → sx across web platform (173 files)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 11m37s

Rename all sexp directories, files, identifiers, and references to sx.
artdag/ excluded (separate media processing DSL).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 11:06:57 +00:00
parent 17cebe07e7
commit e8bc228c7f
174 changed files with 3126 additions and 2952 deletions

View File

@@ -99,8 +99,8 @@ def register(url_prefix="/auth"):
# If there's a pending redirect (e.g. OAuth authorize), follow it
redirect_url = pop_login_redirect_target()
return redirect(redirect_url)
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_login_page
from shared.sx.page import get_template_context
from sx.sx_components import render_login_page
ctx = await get_template_context()
return await render_login_page(ctx)
@@ -111,8 +111,8 @@ def register(url_prefix="/auth"):
is_valid, email = validate_email(email_input)
if not is_valid:
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_login_page
from shared.sx.page import get_template_context
from sx.sx_components import render_login_page
ctx = await get_template_context(error="Please enter a valid email address.", email=email_input)
return await render_login_page(ctx), 400
@@ -132,8 +132,8 @@ def register(url_prefix="/auth"):
"Please try again in a moment."
)
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_check_email_page
from shared.sx.page import get_template_context
from sx.sx_components import render_check_email_page
ctx = await get_template_context(email=email, email_error=email_error)
return await render_check_email_page(ctx)
@@ -148,15 +148,15 @@ def register(url_prefix="/auth"):
user, error = await validate_magic_link(s, token)
if error:
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_login_page
from shared.sx.page import get_template_context
from sx.sx_components import render_login_page
ctx = await get_template_context(error=error)
return await render_login_page(ctx), 400
user_id = user.id
except Exception:
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_login_page
from shared.sx.page import get_template_context
from sx.sx_components import render_login_page
ctx = await get_template_context(error="Could not sign you in right now. Please try again.")
return await render_login_page(ctx), 502

View File

@@ -1,6 +1,6 @@
"""Federation app fragment endpoints.
Exposes sexp fragments at ``/internal/fragments/<type>`` for consumption
Exposes sx fragments at ``/internal/fragments/<type>`` for consumption
by other coop apps via the fragment client.
"""
@@ -25,15 +25,15 @@ def register():
async def get_fragment(fragment_type: str):
handler = _handlers.get(fragment_type)
if handler is None:
return Response("", status=200, content_type="text/sexp")
return Response("", status=200, content_type="text/sx")
src = await handler()
return Response(src, status=200, content_type="text/sexp")
return Response(src, status=200, content_type="text/sx")
# --- link-card fragment: actor profile preview card --------------------------
def _federation_link_card_sexp(actor, link: str) -> str:
from shared.sexp.helpers import sexp_call
return sexp_call("link-card",
def _federation_link_card_sx(actor, link: str) -> str:
from shared.sx.helpers import sx_call
return sx_call("link-card",
link=link,
title=actor.display_name or actor.preferred_username,
image=None,
@@ -59,7 +59,7 @@ def register():
parts.append(f"<!-- fragment:{u} -->")
actor = await services.federation.get_actor_by_username(g.s, u)
if actor:
parts.append(_federation_link_card_sexp(
parts.append(_federation_link_card_sx(
actor, federation_url(f"/users/{actor.preferred_username}"),
))
return "\n".join(parts)
@@ -71,7 +71,7 @@ def register():
actor = await services.federation.get_actor_by_username(g.s, lookup)
if not actor:
return ""
return _federation_link_card_sexp(
return _federation_link_card_sx(
actor, federation_url(f"/users/{actor.preferred_username}"),
)

View File

@@ -39,8 +39,8 @@ def register(url_prefix="/identity"):
if actor:
return redirect(url_for("activitypub.actor_profile", username=actor.preferred_username))
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_choose_username_page
from shared.sx.page import get_template_context
from sx.sx_components import render_choose_username_page
ctx = await get_template_context()
ctx["actor"] = actor
return await render_choose_username_page(ctx)
@@ -71,8 +71,8 @@ def register(url_prefix="/identity"):
error = "This username is already taken."
if error:
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_choose_username_page
from shared.sx.page import get_template_context
from sx.sx_components import render_choose_username_page
ctx = await get_template_context(error=error, username=username)
ctx["actor"] = None
return await render_choose_username_page(ctx), 400

View File

@@ -7,7 +7,7 @@ from datetime import datetime
from quart import Blueprint, request, g, redirect, url_for, abort, Response
from shared.services.registry import services
from shared.sexp.helpers import sexp_response
from shared.sx.helpers import sx_response
log = logging.getLogger(__name__)
@@ -40,8 +40,8 @@ def register(url_prefix="/social"):
return redirect(url_for("auth.login_form"))
actor = _require_actor()
items = await services.federation.get_home_timeline(g.s, actor.id)
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_timeline_page
from shared.sx.page import get_template_context
from sx.sx_components import render_timeline_page
ctx = await get_template_context()
return await render_timeline_page(ctx, items, "home", actor)
@@ -58,16 +58,16 @@ def register(url_prefix="/social"):
items = await services.federation.get_home_timeline(
g.s, actor.id, before=before,
)
from sexp.sexp_components import render_timeline_items
sexp_src = await render_timeline_items(items, "home", actor)
return sexp_response(sexp_src)
from sx.sx_components import render_timeline_items
sx_src = await render_timeline_items(items, "home", actor)
return sx_response(sx_src)
@bp.get("/public")
async def public_timeline():
items = await services.federation.get_public_timeline(g.s)
actor = getattr(g, "_social_actor", None)
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_timeline_page
from shared.sx.page import get_template_context
from sx.sx_components import render_timeline_page
ctx = await get_template_context()
return await render_timeline_page(ctx, items, "public", actor)
@@ -82,9 +82,9 @@ def register(url_prefix="/social"):
pass
items = await services.federation.get_public_timeline(g.s, before=before)
actor = getattr(g, "_social_actor", None)
from sexp.sexp_components import render_timeline_items
sexp_src = await render_timeline_items(items, "public", actor)
return sexp_response(sexp_src)
from sx.sx_components import render_timeline_items
sx_src = await render_timeline_items(items, "public", actor)
return sx_response(sx_src)
# -- Compose --------------------------------------------------------------
@@ -92,8 +92,8 @@ def register(url_prefix="/social"):
async def compose_form():
actor = _require_actor()
reply_to = request.args.get("reply_to")
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_compose_page
from shared.sx.page import get_template_context
from sx.sx_components import render_compose_page
ctx = await get_template_context()
return await render_compose_page(ctx, actor, reply_to)
@@ -138,8 +138,8 @@ def register(url_prefix="/social"):
g.s, actor.preferred_username, page=1, per_page=1000,
)
followed_urls = {a.actor_url for a in following}
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_search_page
from shared.sx.page import get_template_context
from sx.sx_components import render_search_page
ctx = await get_template_context()
return await render_search_page(ctx, query, actors, total, 1, followed_urls, actor)
@@ -160,9 +160,9 @@ def register(url_prefix="/social"):
g.s, actor.preferred_username, page=1, per_page=1000,
)
followed_urls = {a.actor_url for a in following}
from sexp.sexp_components import render_search_results
sexp_src = await render_search_results(actors, query, page, followed_urls, actor)
return sexp_response(sexp_src)
from sx.sx_components import render_search_results
sx_src = await render_search_results(actors, query, page, followed_urls, actor)
return sx_response(sx_src)
@bp.post("/follow")
async def follow():
@@ -204,8 +204,8 @@ def register(url_prefix="/social"):
list_type = "followers"
else:
list_type = "following"
from sexp.sexp_components import render_actor_card
return sexp_response(render_actor_card(remote_dto, actor, followed_urls, list_type=list_type))
from sx.sx_components import render_actor_card
return sx_response(render_actor_card(remote_dto, actor, followed_urls, list_type=list_type))
# -- Interactions ---------------------------------------------------------
@@ -293,8 +293,8 @@ def register(url_prefix="/social"):
).limit(1)
)).scalar())
from sexp.sexp_components import render_interaction_buttons
return sexp_response(render_interaction_buttons(
from sx.sx_components import render_interaction_buttons
return sx_response(render_interaction_buttons(
object_id=object_id,
author_inbox=author_inbox,
like_count=like_count,
@@ -312,8 +312,8 @@ def register(url_prefix="/social"):
actors, total = await services.federation.get_following(
g.s, actor.preferred_username,
)
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_following_page
from shared.sx.page import get_template_context
from sx.sx_components import render_following_page
ctx = await get_template_context()
return await render_following_page(ctx, actors, total, actor)
@@ -324,9 +324,9 @@ def register(url_prefix="/social"):
actors, total = await services.federation.get_following(
g.s, actor.preferred_username, page=page,
)
from sexp.sexp_components import render_following_items
sexp_src = await render_following_items(actors, page, actor)
return sexp_response(sexp_src)
from sx.sx_components import render_following_items
sx_src = await render_following_items(actors, page, actor)
return sx_response(sx_src)
@bp.get("/followers")
async def followers_list():
@@ -339,8 +339,8 @@ def register(url_prefix="/social"):
g.s, actor.preferred_username, page=1, per_page=1000,
)
followed_urls = {a.actor_url for a in following}
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_followers_page
from shared.sx.page import get_template_context
from sx.sx_components import render_followers_page
ctx = await get_template_context()
return await render_followers_page(ctx, actors, total, followed_urls, actor)
@@ -355,9 +355,9 @@ def register(url_prefix="/social"):
g.s, actor.preferred_username, page=1, per_page=1000,
)
followed_urls = {a.actor_url for a in following}
from sexp.sexp_components import render_followers_items
sexp_src = await render_followers_items(actors, page, followed_urls, actor)
return sexp_response(sexp_src)
from sx.sx_components import render_followers_items
sx_src = await render_followers_items(actors, page, followed_urls, actor)
return sx_response(sx_src)
@bp.get("/actor/<int:id>")
async def actor_timeline(id: int):
@@ -388,8 +388,8 @@ def register(url_prefix="/social"):
)
).scalar_one_or_none()
is_following = existing is not None
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_actor_timeline_page
from shared.sx.page import get_template_context
from sx.sx_components import render_actor_timeline_page
ctx = await get_template_context()
return await render_actor_timeline_page(ctx, remote_dto, items, is_following, actor)
@@ -406,9 +406,9 @@ def register(url_prefix="/social"):
items = await services.federation.get_actor_timeline(
g.s, id, before=before,
)
from sexp.sexp_components import render_actor_timeline_items
sexp_src = await render_actor_timeline_items(items, id, actor)
return sexp_response(sexp_src)
from sx.sx_components import render_actor_timeline_items
sx_src = await render_actor_timeline_items(items, id, actor)
return sx_response(sx_src)
# -- Notifications --------------------------------------------------------
@@ -417,8 +417,8 @@ def register(url_prefix="/social"):
actor = _require_actor()
items = await services.federation.get_notifications(g.s, actor.id)
await services.federation.mark_notifications_read(g.s, actor.id)
from shared.sexp.page import get_template_context
from sexp.sexp_components import render_notifications_page
from shared.sx.page import get_template_context
from sx.sx_components import render_notifications_page
ctx = await get_template_context()
return await render_notifications_page(ctx, items, actor)
@@ -429,7 +429,7 @@ def register(url_prefix="/social"):
return Response("0", content_type="text/plain")
count = await services.federation.unread_notification_count(g.s, actor.id)
if count > 0:
from shared.sexp.jinja_bridge import render as render_comp
from shared.sx.jinja_bridge import render as render_comp
return Response(
render_comp("notification-badge", count=str(count)),
content_type="text/html",