Files
fn_registry/python/functions/metabase/metabase_create_dashboard_raw.md
egutierrez 4300f1242d feat(metabase): expansion de funciones Python — documents, collections, permissions, validation
Añade un conjunto amplio de funciones al paquete python/functions/metabase:
- Nuevos modulos: collections.py, documents.py, maintenance.py, permissions.py, validation.py (+ test).
- Ampliacion de cards.py, dashboards.py, client.py e __init__.py para exponer las nuevas operaciones.
- Funciones de documentos (create/get/update/delete/archive/copy/move + comentarios), grupos y memberships, permission/collection graphs, copy/move de cards y dashboards, validacion de MBQL/SQL y payloads, actualizacion segura de dashboards y fix_null_ratio.
- .md por funcion con frontmatter para que fn index los registre.
- Actualiza pyproject.toml y uv.lock con las dependencias resultantes.

Impacto: ampliamente mas cobertura de la API de Metabase desde el registry, reutilizable por apps y analisis. No toca Go ni frontend.
2026-04-13 23:31:42 +02:00

3.0 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
metabase_create_dashboard_raw function py infra 1.0.0 impure def metabase_create_dashboard_raw(client: MetabaseClient, payload: dict) -> dict Crea un dashboard en Metabase enviando el payload completo sin modificaciones. Maneja automaticamente la limitacion de la API que no acepta dashcards en el POST inicial: si el payload contiene dashcards, hace POST para crear el dashboard y luego PUT para añadir las cards. Endpoint: POST /api/dashboard (+ PUT condicional).
metabase
dashboard
create
api
python
raw
as-code
dashcards
metabase_auth_py_infra
false error_go_core
httpx
name desc
client instancia autenticada de MetabaseClient con sesion activa
name desc
payload dict con el payload completo del dashboard tal como lo espera la API de Metabase; campos soportados: name (requerido), description, collection_id, parameters, tabs, enable_embedding, embedding_params; dashcards (list[dict]): si presente, se extrae del body POST y se añade en un PUT posterior con id negativo para cards nuevas
dict: objeto dashboard creado; si habia dashcards en el payload, retorna la respuesta del PUT final con el campo dashcards poblado; si no habia dashcards, retorna la respuesta del POST inicial false
python/functions/metabase/dashboards.py

Ejemplo

# Sin dashcards (solo POST)
dash = metabase_create_dashboard_raw(client, {
    "name": "Sales Overview",
    "description": "KPIs de ventas mensuales",
    "collection_id": 5,
    "parameters": [],
})
print(dash["id"])

# Con dashcards (POST + PUT automatico)
dash = metabase_create_dashboard_raw(client, {
    "name": "Sales Overview",
    "description": "KPIs de ventas mensuales",
    "collection_id": 5,
    "parameters": [],
    "dashcards": [
        {
            "id": -1,
            "card_id": 42,
            "size_x": 6,
            "size_y": 4,
            "col": 0,
            "row": 0,
            "visualization_settings": {},
            "parameter_mappings": [],
        },
    ],
})
print(dash["id"])
print(len(dash["dashcards"]))  # 1

Notas

No se escriben tests automaticos porque requiere una instancia real de Metabase. Los intentos de mockear client.request quedan fuera del alcance del registry por ahora — la validacion se hace en integracion contra un entorno Metabase real.

La API de Metabase (al menos hasta v0.49) ignora el campo dashcards en el POST inicial de creacion de dashboard. Esta funcion absorbe esa limitacion internamente: extrae las dashcards del payload antes del POST y las envia en un PUT separado usando el id que Metabase asigno al nuevo dashboard.

Si Metabase devuelve 4xx/5xx en cualquier paso, httpx lanza HTTPStatusError sin capturar. Si el POST tiene exito pero el PUT falla, el dashboard queda creado pero vacio — el caller debe manejar este caso si necesita atomicidad.