From b51b050ddafd1155d2fab1d1b811533db2e8662a Mon Sep 17 00:00:00 2001 From: giles Date: Wed, 4 Mar 2026 11:26:51 +0000 Subject: [PATCH] Delete last sx_components.py files: relations + test (phase 9) Move relations component loading into app.py. Move test rendering functions to test/sxc/pages/__init__.py, update route imports, and delete both sx_components.py files. Zero sx_components imports remain. Co-Authored-By: Claude Opus 4.6 --- relations/app.py | 6 ++++-- relations/sx/sx_components.py | 14 -------------- shared/sx/helpers.py | 2 +- test/app.py | 7 ++++--- test/bp/dashboard/routes.py | 8 ++++---- test/sxc/__init__.py | 0 .../{sx/sx_components.py => sxc/pages/__init__.py} | 2 +- 7 files changed, 14 insertions(+), 25 deletions(-) delete mode 100644 relations/sx/sx_components.py create mode 100644 test/sxc/__init__.py rename test/{sx/sx_components.py => sxc/pages/__init__.py} (99%) diff --git a/relations/app.py b/relations/app.py index a93419c..8af2f8c 100644 --- a/relations/app.py +++ b/relations/app.py @@ -1,7 +1,5 @@ from __future__ import annotations import path_setup # noqa: F401 -import sx.sx_components as sx_components # noqa: F401 # ensure Hypercorn --reload watches this file - from shared.infrastructure.factory import create_base_app from bp import register_actions, register_data @@ -14,6 +12,10 @@ def create_app() -> "Quart": domain_services_fn=register_domain_services, ) + import os + from shared.sx.jinja_bridge import load_service_components + load_service_components(os.path.dirname(__file__), service_name="relations") + app.register_blueprint(register_actions()) app.register_blueprint(register_data()) diff --git a/relations/sx/sx_components.py b/relations/sx/sx_components.py deleted file mode 100644 index 491851e..0000000 --- a/relations/sx/sx_components.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -Relations service s-expression components. - -Loads relation-specific .sx components and handlers. -""" -from __future__ import annotations - -import os - -from shared.sx.jinja_bridge import load_service_components - -# Load relations-specific .sx components + handlers at import time -load_service_components(os.path.dirname(os.path.dirname(__file__)), - service_name="relations") diff --git a/shared/sx/helpers.py b/shared/sx/helpers.py index 4acd87f..0fdeeb2 100644 --- a/shared/sx/helpers.py +++ b/shared/sx/helpers.py @@ -1,7 +1,7 @@ """ Shared helper functions for s-expression page rendering. -These are used by per-service sx_components.py files to build common +These are used by per-service sxc/pages modules to build common page elements (headers, search, etc.) from template context. """ from __future__ import annotations diff --git a/test/app.py b/test/app.py index b510bc9..57a6bbd 100644 --- a/test/app.py +++ b/test/app.py @@ -1,7 +1,5 @@ from __future__ import annotations import path_setup # noqa: F401 -import sx.sx_components as sx_components # noqa: F401 - from shared.infrastructure.factory import create_base_app from shared.sx.jinja_bridge import render @@ -36,7 +34,10 @@ def create_app() -> "Quart": domain_services_fn=register_domain_services, ) - import sx.sx_components # noqa: F401 + # Load .sx components + import os + from shared.sx.jinja_bridge import load_service_components + load_service_components(os.path.dirname(__file__)) app.register_blueprint(register_dashboard(url_prefix="/")) diff --git a/test/bp/dashboard/routes.py b/test/bp/dashboard/routes.py index 82bf2a2..25fb744 100644 --- a/test/bp/dashboard/routes.py +++ b/test/bp/dashboard/routes.py @@ -14,7 +14,7 @@ def register(url_prefix: str = "/") -> Blueprint: """Full page dashboard with last results.""" from shared.sx.page import get_template_context from shared.browser.app.csrf import generate_csrf_token - from sx.sx_components import render_dashboard_page_sx + from sxc.pages import render_dashboard_page_sx import runner ctx = await get_template_context() @@ -63,12 +63,12 @@ def register(url_prefix: str = "/") -> Blueprint: if is_htmx: # S-expression wire format — sx.js renders client-side from shared.sx.helpers import sx_response - from sx.sx_components import test_detail_sx + from sxc.pages import test_detail_sx return sx_response(await test_detail_sx(test)) # Full page render (direct navigation / refresh) from shared.sx.page import get_template_context - from sx.sx_components import render_test_detail_page_sx + from sxc.pages import render_test_detail_page_sx ctx = await get_template_context() html = await render_test_detail_page_sx(ctx, test) @@ -78,7 +78,7 @@ def register(url_prefix: str = "/") -> Blueprint: async def results(): """HTMX partial — poll target for results table.""" from shared.browser.app.csrf import generate_csrf_token - from sx.sx_components import render_results_partial_sx + from sxc.pages import render_results_partial_sx import runner result = runner.get_results() diff --git a/test/sxc/__init__.py b/test/sxc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/sx/sx_components.py b/test/sxc/pages/__init__.py similarity index 99% rename from test/sx/sx_components.py rename to test/sxc/pages/__init__.py index 8798137..2a98e5d 100644 --- a/test/sx/sx_components.py +++ b/test/sxc/pages/__init__.py @@ -11,7 +11,7 @@ from shared.sx.helpers import ( ) # Load test-specific .sx components at import time -load_service_components(os.path.dirname(os.path.dirname(__file__))) +load_service_components(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) def _format_time(ts: float | None) -> str: