Files
egutierrez 2e5bdacdcf feat: metabase_setup Python, fix list_databases, volumen Docker en init_metabase
Nueva función metabase_setup para setup inicial via API. Fix list_databases
que no extraía data del response wrapper. Pipeline init_metabase soporta
--mb-volumes para montar SQLite como volumen con fix de permisos automático.
Añadido .env a gitignore.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 23:23:20 +01:00

84 lines
2.5 KiB
Python

"""Setup inicial de Metabase via API."""
import httpx
def metabase_setup(
base_url: str,
admin_email: str,
admin_password: str,
admin_first_name: str = "Admin",
admin_last_name: str = "User",
site_name: str = "Metabase",
site_locale: str = "en",
) -> dict:
"""Ejecuta el setup inicial de una instancia Metabase nueva.
Usa el setup-token de una instancia sin configurar para crear el
usuario admin y configurar preferencias del sitio. Solo funciona
una vez — si Metabase ya tiene un usuario, retorna error.
Endpoint: POST /api/setup (requiere setup-token valido).
Args:
base_url: URL base de la instancia (ej: "http://localhost:3000").
admin_email: Email del usuario admin a crear.
admin_password: Password del admin (min 8 chars con complejidad).
admin_first_name: Nombre del admin.
admin_last_name: Apellido del admin.
site_name: Nombre del sitio Metabase.
site_locale: Locale del sitio (ej: "es", "en").
Returns:
Dict con el session id del admin recien creado.
Raises:
httpx.HTTPStatusError: 400 si el setup-token es invalido o
Metabase ya fue configurado.
RuntimeError: Si no se puede obtener el setup-token.
Example:
>>> result = metabase_setup(
... "http://localhost:3000",
... "admin@example.com",
... "SecurePass123!",
... site_name="fn-registry",
... site_locale="es",
... )
>>> print(result["id"]) # session token
"""
url = base_url.rstrip("/")
# Obtener setup-token
resp = httpx.get(f"{url}/api/session/properties")
resp.raise_for_status()
props = resp.json()
setup_token = props.get("setup-token")
if not setup_token:
raise RuntimeError(
"No setup-token disponible. Metabase ya fue configurado "
"o has-user-setup es True."
)
# Ejecutar setup
resp = httpx.post(
f"{url}/api/setup",
json={
"token": setup_token,
"user": {
"first_name": admin_first_name,
"last_name": admin_last_name,
"email": admin_email,
"password": admin_password,
},
"prefs": {
"site_name": site_name,
"site_locale": site_locale,
"allow_tracking": False,
},
},
timeout=30.0,
)
resp.raise_for_status()
return resp.json()