2e5bdacdcf
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>
84 lines
2.5 KiB
Python
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()
|