Python SDK は Python 3.10 以降が必要です。ランタイム依存関係は httpx のみです。同じ引数を持つ同期の Client と asyncio の AsyncClient を備えています。パッケージ: PyPI の speedle 0.2.0。リファレンス: speedle-sdk/python。
サンプルでは、SDK 概要 で説明されているポリシーをチェックします。
依存関係の追加
仮想環境で pip を使用する場合:
python3 -m venv .venv
. .venv/bin/activate
pip install speedle==0.2.0または uv プロジェクトで uv を使用する場合:
uv add speedle==0.2.0ローカルの Speedle の呼び出し
SDK 概要 の説明に従って Speedle を起動し、サンプルポリシーを作成します。このプログラムを 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)仮想環境で python main.py を実行するか、uv で実行します:
uv run main.py出力:
alice get /docs/public: allowed=True
alice delete /docs/public: allowed=False reason=<Reason.NO_APPLICABLE_POLICIES: 3>Speedle Cloud の呼び出し
Speedle Cloud はまもなく公開されます。
プログラムは SPEEDLE_SERVICE からサービス名を、SPEEDLE_TOKEN からサービスのトークンを読み取ります。SPEEDLE_ENDPOINT はデフォルトのエンドポイント https://cloud.speedle.io を上書きします。main.py を以下に置き換えます:
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)環境変数を設定して実行します。read -rs を使用すると、トークンがシェルの履歴や画面に表示されません:
export SPEEDLE_SERVICE=docs
read -rs SPEEDLE_TOKEN && export SPEEDLE_TOKEN
python main.pyサービスにサンプルポリシーが存在する場合の出力:
alice get /docs/public: allowed=True
alice delete /docs/public: allowed=False reason=<Reason.NO_APPLICABLE_POLICIES: 3>トークンはサーバー側のシークレットです。ブラウザ、モバイルアプリ、またはデスクトップクライアントには絶対に配布しないでください。
エラー処理
拒否されたリクエストはエラーではありません。上記の delete 呼び出しのように、is_allowed は False を返し、check は allowed が false で理由を含む決定を返します。デフォルト設定では、呼び出しが決定を返せない場合、SDK は SpeedleError を発生させます。サンプルではそれをキャッチし、標準エラー出力に Speedle error: <message> を出力して終了ステータス 1 で終了します。