Files
egutierrez fd5787c55f chore: auto-commit (43 archivos)
- .mcp.json
- bash/functions/infra/write_mcp_jupyter_config.md
- bash/functions/infra/write_mcp_jupyter_config.sh
- cpp/CMakeLists.txt
- cpp/apps/chart_demo
- cpp/apps/shaders_lab
- cpp/functions/gfx/gl_framebuffer.cpp
- cpp/functions/gfx/gl_framebuffer.h
- cpp/functions/gfx/gl_framebuffer.md
- cpp/functions/gfx/mesh_gpu.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-30 17:28:47 +02:00

63 lines
2.1 KiB
Python

"""Crea un usuario en la API de administracion de Popelis."""
import json
import urllib.error
import urllib.request
def popelis_create_user(
base_url: str,
admin_token: str,
username: str,
password: str,
timeout: float = 30.0,
) -> dict:
"""Crea un usuario en Popelis via la API de administracion.
Hace POST a {base_url}/api/admin/users con el token de admin y las
credenciales del nuevo usuario. El backend crea ademas automaticamente
un usuario Jellyfin espejo (Modelo B).
Args:
base_url: URL base del servicio, sin trailing slash.
Ej: "https://popelis.datardos.com"
admin_token: Token de administracion (cabecera X-Admin-Token).
Mantenerlo en secreto — no logear.
username: Nombre de usuario a crear. Debe ser unico.
password: Contrasena inicial del usuario.
timeout: Timeout en segundos para la peticion HTTP. Default 30.0.
Returns:
Dict con los datos del usuario creado:
{"id": N, "username": "...", "jfUserId": "..."}
Raises:
ValueError: Si el servidor devuelve 4xx o 5xx. El mensaje incluye
el status code y el campo "error" del body JSON si existe.
urllib.error.URLError: Si no se puede conectar al servidor.
"""
url = f"{base_url.rstrip('/')}/api/admin/users"
payload = json.dumps({"username": username, "password": password}).encode("utf-8")
req = urllib.request.Request(
url,
data=payload,
headers={
"Content-Type": "application/json",
"X-Admin-Token": admin_token,
},
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=timeout) as resp:
body = resp.read()
return json.loads(body)
except urllib.error.HTTPError as exc:
raw = exc.read()
try:
detail = json.loads(raw).get("error", raw.decode("utf-8", errors="replace"))
except Exception:
detail = raw.decode("utf-8", errors="replace")
raise ValueError(
f"popelis_create_user: HTTP {exc.code}{detail}"
) from exc