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로 종료합니다.