feat(metabase): expansion cards y documents — export, model, ProseMirror validation, copy nativo
Cards: export_card (CSV/XLSX/JSON), create_model (type=model para fuentes MBQL). Documents: prosemirror_card_embed helper (resizeNode envolviendo cardEmbed), validacion automatica contra whitelist TipTap antes de enviar, copy_document refactorizado al endpoint nativo POST /api/document/:id/copy. Docs: dataset_query legacy vs MBQL5, template-tags, whitelist de nodos. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
---
|
||||
name: metabase_export_card
|
||||
kind: function
|
||||
lang: py
|
||||
domain: infra
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def metabase_export_card(client: MetabaseClient, card_id: int, format: str = 'csv') -> bytes"
|
||||
description: "Exporta los resultados de una card de Metabase en CSV, XLSX o JSON. Endpoint: POST /api/card/:id/query/:format."
|
||||
tags: [metabase, card, export, csv, xlsx, api, python]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: [httpx]
|
||||
params:
|
||||
- name: client
|
||||
desc: "instancia autenticada de MetabaseClient"
|
||||
- name: card_id
|
||||
desc: "ID de la card cuyos resultados se exportan"
|
||||
- name: format
|
||||
desc: "formato de exportacion: 'csv', 'xlsx' o 'json'. Default: 'csv'"
|
||||
output: "bytes con el contenido del archivo exportado listo para escribir a disco"
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "python/functions/metabase/cards.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
# Exportar a CSV
|
||||
data = metabase_export_card(client, 42, format="csv")
|
||||
with open("export.csv", "wb") as f:
|
||||
f.write(data)
|
||||
|
||||
# Exportar a Excel
|
||||
data = metabase_export_card(client, 42, format="xlsx")
|
||||
with open("export.xlsx", "wb") as f:
|
||||
f.write(data)
|
||||
|
||||
# Exportar a JSON
|
||||
import json
|
||||
data = metabase_export_card(client, 42, format="json")
|
||||
rows = json.loads(data)
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
Usa `client._http` directamente para acceder al objeto httpx.Client y obtener `.content` en bytes sin que el wrapper de `client.request` intente parsear la respuesta como JSON.
|
||||
|
||||
Para cards con queries parametrizadas, este endpoint no acepta parametros — ejecuta la query con los valores por defecto. Para pasar parametros, usar `metabase_execute_card` que devuelve JSON estructurado.
|
||||
Reference in New Issue
Block a user