Tables

Declarative Rich tables with presets and runtime column configuration.

Quick Start

from kstlib.ui.tables import TableBuilder

builder = TableBuilder()
builder.print_table(data=[
    {"key": "status", "value": "running"},
    {"key": "jobs", "value": 3},
])

Presets

Inventory preset

inventory = [
    {"component": "cache", "version": "1.2.3", "status": "ok"},
    {"component": "watchdog", "version": "0.1.0", "status": "pending"},
]
TableBuilder().print_table(kind="inventory", data=inventory)

Metrics preset

metrics = [
    {"key": "latency", "value": "43ms"},
    {"key": "throughput", "value": "1.2k/s"},
]
TableBuilder().print_table(kind="metrics", data=metrics)

Configuration

ui:
  tables:
    defaults:
      table:
        box: "SIMPLE"
        show_header: true
        header_style: "bold cyan"
      columns:
        - header: "Key"
          key: "key"
          style: "bold white"
        - header: "Value"
          key: "value"
    presets:
      inventory:
        table:
          title: "Inventory"
          box: "SIMPLE_HEAVY"
          show_lines: true
        columns:
          - header: "Component"
            key: "component"
            style: "bold"
          - header: "Version"
            key: "version"
            style: "cyan"
          - header: "Status"
            key: "status"
            justify: "center"

Runtime Column Overrides

columns = (
    {"header": "Service", "key": "name", "style": "bold white"},
    {"header": "Region", "key": "metadata.region", "style": "cyan"},
)
services = (
    {"name": "matcher", "metadata": {"region": "eu-west-1"}},
    {"name": "notifier", "metadata": {"region": "us-east-2"}},
)
TableBuilder().print_table(columns=columns, data=services, table={"title": "Service Map"})

Nested Keys

Access nested data with dot notation:

columns = [
    {"header": "Name", "key": "name"},
    {"header": "Region", "key": "metadata.region"},
    {"header": "Status", "key": "health.status"},
]

Embedding in Panels

from kstlib.ui import PanelManager, TableBuilder

builder = TableBuilder()
panel_manager = PanelManager()

table = builder.render_table(kind="metrics", data=[{"key": "latency", "value": "43ms"}])
panel_manager.print_panel(kind="summary", payload=table)

Async Support

import asyncio

async def main():
    builder = TableBuilder()
    await builder.print_table_async(data=[{"key": "status", "value": "ok"}])

asyncio.run(main())

API Reference

-> Full autodoc: UI Tables