El SDK de Python requiere Python 3.10 o posterior; su única dependencia de tiempo de ejecución es httpx. Cuenta con un Client síncrono y un AsyncClient asíncrono con los mismos argumentos. Paquete: speedle 0.2.0 en PyPI. Referencia: speedle-sdk/python.
Los ejemplos comprueban la política descrita en la descripción general de los SDK.
Añadir la dependencia
Con pip, en un entorno virtual:
python3 -m venv .venv
. .venv/bin/activate
pip install speedle==0.2.0O con uv, en un proyecto uv:
uv add speedle==0.2.0Llamar a un Speedle local
Inicie Speedle y cree la política de ejemplo como se describe en la descripción general de los SDK. Guarde este programa como main.py:
import sys
from speedle import Auth, Client, SpeedleError
try:
with Client(
backend="speedle",
endpoint="http://localhost:6734",
auth=Auth.none(),
service_name="docs",
) as speedle:
allowed = speedle.is_allowed("alice", "get", "/docs/public")
print(f"alice get /docs/public: allowed={allowed}")
decision = speedle.check("alice", "delete", "/docs/public")
print(f"alice delete /docs/public: allowed={decision.allowed} reason={decision.reason!r}")
except SpeedleError as e:
print(f"Speedle error: {e}", file=sys.stderr)
sys.exit(1)Ejecútelo con python main.py en el entorno virtual, o con uv:
uv run main.pySalida:
alice get /docs/public: allowed=True
alice delete /docs/public: allowed=False reason=<Reason.NO_APPLICABLE_POLICIES: 3>Llamar a Speedle Cloud
Speedle Cloud estará disponible próximamente.
El programa lee el nombre del servicio desde SPEEDLE_SERVICE y el token del servicio desde SPEEDLE_TOKEN. SPEEDLE_ENDPOINT anula el endpoint predeterminado https://cloud.speedle.io. Sustituya main.py por:
import os
import sys
from speedle import Auth, Client, SpeedleError
try:
with Client(
backend="speedle-cloud",
endpoint=os.environ.get("SPEEDLE_ENDPOINT", "https://cloud.speedle.io"),
auth=Auth.bearer(os.environ["SPEEDLE_TOKEN"]),
service_name=os.environ["SPEEDLE_SERVICE"],
) as speedle:
allowed = speedle.is_allowed("alice", "get", "/docs/public")
print(f"alice get /docs/public: allowed={allowed}")
decision = speedle.check("alice", "delete", "/docs/public")
print(f"alice delete /docs/public: allowed={decision.allowed} reason={decision.reason!r}")
except SpeedleError as e:
print(f"Speedle error: {e}", file=sys.stderr)
sys.exit(1)Configure las variables de entorno y ejecútelo. read -rs evita que el token quede registrado en el historial de la terminal o en pantalla:
export SPEEDLE_SERVICE=docs
read -rs SPEEDLE_TOKEN && export SPEEDLE_TOKEN
python main.pySalida, cuando el servicio cuenta con la política de ejemplo:
alice get /docs/public: allowed=True
alice delete /docs/public: allowed=False reason=<Reason.NO_APPLICABLE_POLICIES: 3>El token es un secreto del lado del servidor. Nunca lo distribuya a navegadores, aplicaciones móviles o clientes de escritorio.
Gestión de errores
Una solicitud denegada no constituye un error: is_allowed devuelve False, y check devuelve una decisión con allowed en false y el motivo, tal como se muestra en la llamada a delete anterior. Con la configuración predeterminada, cuando una llamada no puede devolver una decisión, el SDK genera una excepción SpeedleError. Los ejemplos la capturan, imprimen Speedle error: <mensaje> en la salida de error estándar y finalizan con el código de salida 1.