Files
rose-ash/shared/contracts/widgets.py
giles f42042ccb7
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m5s
Monorepo: consolidate 7 repos into one
Combines shared, blog, market, cart, events, federation, and account
into a single repository. Eliminates submodule sync, sibling model
copying at build time, and per-app CI orchestration.

Changes:
- Remove per-app .git, .gitmodules, .gitea, submodule shared/ dirs
- Remove stale sibling model copies from each app
- Update all 6 Dockerfiles for monorepo build context (root = .)
- Add build directives to docker-compose.yml
- Add single .gitea/workflows/ci.yml with change detection
- Add .dockerignore for monorepo build context
- Create __init__.py for federation and account (cross-app imports)
2026-02-24 19:44:17 +00:00

50 lines
1.4 KiB
Python

"""Widget descriptors for cross-domain UI composition.
Each widget type describes a UI fragment that one domain contributes to
another domain's page. Host apps iterate widgets generically — they never
name the contributing domain.
"""
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable
@dataclass(frozen=True, slots=True)
class NavWidget:
"""Renders nav items on a container page (entries, calendars, markets)."""
domain: str
order: int
context_fn: Callable # async (session, *, container_type, container_id, **kw) -> dict
template: str
@dataclass(frozen=True, slots=True)
class CardWidget:
"""Decorates content cards in listings with domain data."""
domain: str
order: int
batch_fn: Callable # async (session, post_ids) -> dict[int, list]
context_key: str # key injected into each post dict
template: str
@dataclass(frozen=True, slots=True)
class AccountPageWidget:
"""Sub-page under /auth/<slug>/."""
domain: str
slug: str
label: str
order: int
context_fn: Callable # async (session, *, user_id, **kw) -> dict
template: str
@dataclass(frozen=True, slots=True)
class AccountNavLink:
"""Nav link on account page (internal or external)."""
label: str
order: int
href_fn: Callable # () -> str
external: bool = False