--- name: metabase_copy_dashboard kind: function lang: py domain: infra version: "1.0.0" purity: impure signature: "def metabase_copy_dashboard(client: MetabaseClient, dashboard_id: int, name: str | None = None, collection_id: int | None = None, description: str | None = None, is_deep_copy: bool = False) -> dict" description: "Crea una copia de un dashboard en Metabase via POST /api/dashboard/:id/copy. Con is_deep_copy=True tambien clona las cards referenciadas." tags: [metabase, dashboard, copy, duplicate, collection, deep_copy, 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: dashboard_id desc: "ID del dashboard a copiar" - name: name desc: "nombre para la copia; None = Metabase asigna 'Copy of '" - name: collection_id desc: "ID de la coleccion destino; None = misma coleccion que el original" - name: description desc: "descripcion de la copia; None = hereda la del original" - name: is_deep_copy desc: "si True, clona tambien todas las cards referenciadas (deep copy); si False, la copia referencia las cards originales" output: "dict: objeto dashboard nuevo creado por Metabase, con id asignado y layout de dashcards copiado" tested: false tests: [] test_file_path: "" file_path: "python/functions/metabase/dashboards.py" --- ## Ejemplo ```python # Copia simple (referencia cards originales) copy = metabase_copy_dashboard(client, 1) print(copy["id"], copy["name"]) # "Copy of ..." # Deep copy a otra coleccion con nombre propio copy = metabase_copy_dashboard(client, 1, name="Sales Q2", collection_id=7, is_deep_copy=True) print(copy["collection_id"]) # 7 ``` ## Notas `is_deep_copy=True` hace que Metabase clone tambien las cards internas del dashboard, util para crear instancias completamente independientes. Con `is_deep_copy=False` (default), las dashcards del clon apuntan a las mismas cards que el original — cambios en esas cards afectan ambos dashboards.