Files
fn_registry/python/functions/metabase/metabase_validate_document_payload.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

2.5 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_validate_document_payload function py infra 1.0.0 pure def metabase_validate_document_payload(payload: dict, known_card_slugs: set[str] | None = None) -> list[str] Valida un arbol ProseMirror contra la whitelist de nodos y marks que el editor TipTap de Metabase renderiza. Detecta nodos desconocidos que la API acepta pero el frontend descarta silenciosamente.
metabase
document
prosemirror
validate
pure
python
false
name desc
payload payload del document (name, document=arbol ProseMirror, archived)
name desc
known_card_slugs set de slugs de cards del index para validar cardEmbed.attrs.card (None = skip)
list[str]: warnings describiendo nodos/marks no soportados o violaciones del schema. Lista vacia = payload renderizable true
test_document_valido_minimo
test_document_nodo_desconocido_callout
test_document_mark_desconocido_underline
test_document_heading_level_invalido
test_document_cardEmbed_sin_id_ni_slug
test_document_flexContainer_demasiados_hijos
test_document_kitchen_sink_valido
python/functions/metabase/validation_test.py python/functions/metabase/validation.py

Ejemplo

issues = metabase_validate_document_payload({
    "name": "Notas",
    "document": {
        "type": "doc",
        "content": [
            {"type": "callout", "content": [...]}  # ← no soportado por TipTap
        ],
    },
})
# → ["document.content[0]: nodo 'callout' no soportado..."]

Notas

Whitelist de nodos (derivada de inspeccionar el bundle de Metabase v0.59): doc, paragraph, text, heading, bulletList, orderedList, listItem, blockquote, codeBlock, horizontalRule, hardBreak, cardEmbed, flexContainer, smartLink, resizeNode, mention

Whitelist de marks: bold, italic, strike, code, link

Nodos comunes de ProseMirror que la API acepta pero el editor no renderiza (el resultado es un documento vacio o incompleto en la UI): callout, taskList, taskItem, details, table, image, iframe. Marks equivalentes: underline, highlight, subscript, textStyle.

Restricciones estructurales adicionales:

  • heading.attrs.level ∈ [1, 6]
  • flexContainer acepta 1-3 hijos, solo cardEmbed o supportingText
  • flexContainer.attrs.columnWidths debe tener el mismo largo que content
  • cardEmbed.attrs requiere id (int) o card (slug del index)