Panel hosts¶
Un panel host es un producto UI independiente: ruta base, título, tema y módulo home. Se registra con entry point cortex.panels.
Cuándo crear un host¶
- Necesitas una app con URL propia (
/accounting/,/samples/). - El panel tiene identidad de marca, tema o
default_routedistintos. - No basta con contribuir un módulo a
panel.
Entry point¶
configure_panel¶
from cortex_framework.panel.builder import PanelBuilder
def configure_panel(builder: PanelBuilder) -> None:
(
builder.id("samples")
.path("/samples")
.title("Samples")
.namespace("samples")
.auth(scopes=("samples",))
)
Panel con home module:
def configure_panel(builder: PanelBuilder) -> None:
manifest, dashboards = build_home_module()
(
builder.id("panel")
.path("/panel")
.title("Operación")
.namespace("panel")
.theme(skin="shadcn", sidebar_width="272px")
.brand(title="CORTEX-IA", version="0.5.1")
.default_route("/panel/booking/agenda")
.home_module(manifest, dashboards)
)
Referencias:
plugins/reference/cortex_plugin_reference/provider.pyplugins/panel/cortex_plugin_panel/provider.pyplugins/admin/cortex_plugin_admin/provider.py— parametrización (/admin/)
PanelBuilder — API¶
| Método | Descripción |
|---|---|
.id(str) | Id del panel (panel_id) |
.path(str) | Prefijo URL del shell |
.title(str) | Título en UI |
.namespace(str) | Namespace API (GET /{namespace}/info) |
.auth(scopes=...) | Scopes OIDC (futuro) |
.theme(skin=, sidebar_width=) | Skin y layout |
.brand(title=, version=) | Marca en sidebar |
.default_route(str) | Ruta al entrar al panel |
.home_module(manifest, dashboards) | Módulo home embebido |
.nav_group(id, label, sort) | Grupos de navegación |
Host con API custom (opcional)¶
def create_panel_host(configuration: PanelConfiguration) -> PanelHostPlugin:
return MiPanelHost(configuration)
Por defecto el host expone GET /{namespace}/info.
Activación¶
Los plugins de negocio y los hosts se filtran por separado.
Dashboard del panel¶
Cada host declara un módulo home con pantalla Dashboard (path: ""). Los plugins inyectan widgets con register_widgets + WidgetDefinition; en boot, merge_panel_infrastructure los fusiona en el dashboard del host sin reemplazarlo.
from cortex_core.spi import WidgetDefinition, WidgetKind
from cortex_framework.registries.widgets import WidgetRegistryApi
def register_widgets(registry: WidgetRegistryApi) -> None:
registry.register(
"admin",
WidgetDefinition(
widget_id="sales-kpi",
kind=WidgetKind.STAT_CARD,
panel_id="admin",
title="Ventas",
config={"path": "/api/v1/sales/sales", "grid": {"xs": 12, "md": 3}},
plugin_id="sales",
),
)
default_route del panel suele apuntar al dashboard (/admin, /accounting, …).
Plugins en varios paneles¶
Un mismo plugin puede registrar recursos o widgets en uno o varios paneles:
from cortex_framework.ui import ResourceBuilder, register_resource, register_resource_for_panels
# Misma configuración en varios paneles
register_resource_for_panels(registry, ("panel", "admin"), "reports", configure)
# Configuraciones distintas por panel
register_resource(registry, "admin", "payments", configure_crud)
register_resource(registry, "panel", "payments", configure_readonly)
Los widgets (register_widgets) y settings (register_settings) también filtran por panel_id.
Siguiente paso¶
Primeros pasos para registrar módulos de dominio en tu host.