32c7336bf6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.0 KiB
4.0 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, params, output, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | params | output | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| metabase_client_from_pass | function | py | infra | 1.0.0 | impure | def metabase_client_from_pass(pass_key: str, base_url: str, mode: str = 'auto') -> MetabaseClient | dict | Lee las credenciales de Metabase desde pass y devuelve un MetabaseClient autenticado, en una sola llamada. Elimina el patron inline repetido de cargar la credencial del password store y montar el cliente. Soporta dos instancias: API-key (metabase/aurgi-api-key -> header X-API-KEY) y usuario/password (captacion/metabase multi-linea -> login POST /api/session). mode='auto' detecta el formato. Compone pass_get_secret + parse_metabase_secret + metabase_auth/MetabaseClient sin reimplementarlos. Devuelve el cliente o {status:error, error} sin lanzar. |
|
|
|
MetabaseClient autenticado en exito. En fallo (sin lanzar): {status:'error', error:str} para secreto inexistente en pass, formato no parseable, o fallo de autenticacion contra Metabase. | true | error_go_core |
|
true |
|
python/functions/metabase/metabase_client_from_pass_test.py | python/functions/metabase/metabase_client_from_pass.py |
Ejemplo
import sys
sys.path.insert(0, "python/functions")
from metabase.metabase_client_from_pass import metabase_client_from_pass
# Aurgi (API-key en pass, header X-API-KEY):
client = metabase_client_from_pass(
"metabase/aurgi-api-key", "https://reports.autingo.es", mode="api_key")
# client.request("GET", "/api/user/current")
# Captacion (usuario/password multi-linea en pass, login /api/session):
client = metabase_client_from_pass(
"captacion/metabase", "http://localhost:3030", mode="session")
# Sin especificar mode: se autodetecta por el formato del secreto.
client = metabase_client_from_pass("metabase/aurgi-api-key", "https://reports.autingo.es")
Cuando usarla
Cuando necesites un MetabaseClient autenticado y la credencial vive en pass:
en vez de escribir a mano el pass show ... + parseo + metabase_auth /
MetabaseClient(...), llama a esta funcion con la ruta del secreto y la URL.
Cubre tanto instancias con API-key (Aurgi) como con usuario/password
(captacion). Es el punto de entrada unico para abrir un cliente desde el
password store.
Gotchas
- Impura: lanza el subproceso
pass showy abre conexion HTTP a Metabase. El secreto nunca se logea, pero elMetabaseClientretornado lleva el token en memoria. - En
mode='session'el secreto debe tener una linea de usuario con prefijoemail:/login:/username:/user:; si falta, devuelve error dict (no lanza). - La deteccion de API-key se basa en que la clave empieza por
mb_(lo gestionaMetabaseClient). Una API-key con otro prefijo se enviaria como session token -> usamode='api_key'explicito si tu key no empieza pormb_. - Cierra el cliente cuando termines:
client.close()o usalo como context manager (with metabase_client_from_pass(...) as client:). - Los fallos de auth (401, instancia caida) se devuelven como
{status:'error', error}— comprueba el tipo del retorno antes de usarlo.