Python SDK for EScheduler API
Project description
EScheduler Python SDK
一個用於與 EScheduler API 互動的 Python SDK,提供簡潔易用的介面來管理排程任務和團隊認證。
特性
- 🚀 簡潔的 API: 提供直觀易用的方法來操作排程任務
- 🔐 完整的認證支持: 支援團隊 token 和 JWT 認證
- 📝 類型提示: 完整的 TypeScript 風格類型提示
- 🛡️ 錯誤處理: 詳細的異常類型和錯誤信息
- ⚡ 異步支持: 基於 asyncio 的異步 API
- 🔄 自動重試: 內建請求重試機制
- 📊 統計信息: 支援獲取排程器統計數據
安裝
從源碼安裝
git clone https://github.com/escheduler/escheduler-python-sdk.git
cd escheduler-python-sdk
pip install -e .
開發環境安裝
uv sync # 安裝依賴
pip install -e ".[dev]"
uv run python -m build # 建立發行包
twine upload --repository escheduler_sdk dist/*
快速開始
基本使用
import asyncio
from escheduler_sdk import ESchedulerSDK, ScheduledTaskCreate, TargetType
async def main():
async with ESchedulerSDK(base_url="http://localhost:8000") as sdk:
# 團隊認證
await sdk.authenticate("ABCD") # 你的團隊 token
# 創建排程任務
task_data = ScheduledTaskCreate(
name="我的任務",
description="每5分鐘執行一次的測試任務",
schedule_expression="rate(5 minutes)",
target_type=TargetType.HTTP,
target_arn="https://httpbin.org/post",
target_input={"message": "Hello World!"}
)
task = await sdk.scheduler.create_task(task_data)
print(f"任務創建成功,ID: {task.id}")
# 獲取所有任務
tasks = await sdk.scheduler.get_all_tasks()
print(f"共有 {len(tasks)} 個任務")
asyncio.run(main())
團隊認證
import asyncio
from escheduler_sdk import ESchedulerSDK
async def auth_example():
async with ESchedulerSDK(base_url="http://localhost:8000") as sdk:
# 方法 1: 使用便利方法
success = await sdk.authenticate("ABCD")
if success:
print("認證成功")
# 方法 2: 獲取詳細認證信息
auth_response = await sdk.team.auth_and_set_token("ABCD")
if auth_response.status:
print(f"團隊: {auth_response.team.name}")
print(f"JWT Token: {auth_response.access_token}")
asyncio.run(auth_example())
API 參考
ESchedulerSDK
主要的 SDK 類,提供統一的 API 介面。
sdk = ESchedulerSDK(
base_url="http://localhost:8000",
timeout=30.0,
max_retries=3
)
參數
base_url(str): EScheduler API 的基礎 URLtoken(str, optional): 團隊認證 tokenjwt_token(str, optional): JWT 認證 tokentimeout(float): 請求超時時間,預設 30 秒max_retries(int): 最大重試次數,預設 3 次
方法
authenticate(token: str) -> bool: 使用團隊 token 進行認證is_authenticated() -> bool: 檢查是否已認證logout(): 登出並清除認證信息
排程任務 API (sdk.scheduler)
任務管理
# 創建任務
task = await sdk.scheduler.create_task(task_data)
# 獲取所有任務
tasks = await sdk.scheduler.get_all_tasks(state=TaskState.ENABLED)
# 獲取單個任務
task = await sdk.scheduler.get_task(task_id)
# 更新任務
task = await sdk.scheduler.update_task(task_id, update_data)
# 刪除任務
result = await sdk.scheduler.delete_task(task_id)
任務狀態管理
# 啟用任務
task = await sdk.scheduler.enable_task(task_id)
# 禁用任務
task = await sdk.scheduler.disable_task(task_id)
# 暫停任務
task = await sdk.scheduler.pause_task(task_id)
# 手動觸發任務
result = await sdk.scheduler.trigger_task(task_id)
其他功能
# 搜索任務
tasks = await sdk.scheduler.search_tasks("關鍵字")
# 獲取統計信息
stats = await sdk.scheduler.get_scheduler_stats()
團隊 API (sdk.team)
# 獲取所有團隊
teams = await sdk.team.get_all_teams()
# 透過 token 獲取團隊
team = await sdk.team.get_team_by_token("ABCD")
# 團隊認證
auth_response = await sdk.team.auth_team("ABCD")
# 認證並自動設置 token
auth_response = await sdk.team.auth_and_set_token("ABCD")
數據模型
排程任務
from escheduler_sdk import ScheduledTaskCreate, TargetType
task_data = ScheduledTaskCreate(
name="任務名稱",
description="任務描述",
schedule_expression="rate(5 minutes)", # 或 "cron(0 */5 * * * *)"
timezone="Asia/Taipei",
target_type=TargetType.HTTP,
target_arn="https://example.com/webhook",
target_input={"key": "value"},
max_retry_attempts=3
)
排程表達式
支援兩種格式:
-
Rate 表達式:
rate(value unit)rate(5 minutes)- 每5分鐘rate(1 hour)- 每小時rate(1 day)- 每天
-
Cron 表達式:
cron(minute hour day month day-of-week year)cron(0 12 * * ? *)- 每天中午12點cron(0 */2 * * ? *)- 每2小時cron(0 9 ? * MON-FRI *)- 工作日上午9點
目標類型
from escheduler_sdk import TargetType
# 支援的目標類型
TargetType.HTTP # HTTP 請求
TargetType.WEBHOOK # Webhook
TargetType.RABBITMQ # RabbitMQ 消息
TargetType.EMAIL # 電子郵件
任務狀態
from escheduler_sdk import TaskState
TaskState.ENABLED # 啟用
TaskState.DISABLED # 禁用
TaskState.PAUSED # 暫停
錯誤處理
SDK 提供了詳細的異常類型:
from escheduler_sdk import (
ESchedulerError,
AuthenticationError,
ValidationError,
NotFoundError,
ServerError,
RateLimitError,
TimeoutError,
NetworkError
)
try:
await sdk.scheduler.get_task(999)
except NotFoundError as e:
print(f"任務不存在: {e}")
except AuthenticationError as e:
print(f"認證失敗: {e}")
except ESchedulerError as e:
print(f"API 錯誤: {e}")
print(f"狀態碼: {e.status_code}")
print(f"回應數據: {e.response_data}")
範例
查看 examples/ 目錄中的完整範例:
basic_usage.py- 基本使用範例team_auth_example.py- 團隊認證範例
開發
安裝開發依賴
pip install -e ".[dev]"
運行測試
pytest
代碼格式化
black src/
isort src/
類型檢查
mypy src/
授權
MIT License
貢獻
歡迎提交 Issue 和 Pull Request!
更新日誌
v0.1.0
- 初始版本
- 支援排程任務 CRUD 操作
- 支援團隊認證
- 完整的錯誤處理
- 異步 API 支援
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
escheduler_sdk-0.0.2.tar.gz
(18.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file escheduler_sdk-0.0.2.tar.gz.
File metadata
- Download URL: escheduler_sdk-0.0.2.tar.gz
- Upload date:
- Size: 18.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56f51df6a3fa22d9ae5d5f264729b442026c9df7ff22752ea91232d3c975d3d4
|
|
| MD5 |
1f9931ab1835c019bb462e0136e6bc24
|
|
| BLAKE2b-256 |
4b74a23fa2e0cc1e596e11441958fb5b0ac78c0f266137b6a0bcd98d85051912
|
File details
Details for the file escheduler_sdk-0.0.2-py3-none-any.whl.
File metadata
- Download URL: escheduler_sdk-0.0.2-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a72fb8d3148b9733b53fcab81ad9a1657d271697388c29d30dd01f36a6e6317c
|
|
| MD5 |
9b38a215941092c8e5ba4ba46e73d5ae
|
|
| BLAKE2b-256 |
018b55ff9853e6f0beaafd0a956133da13af00214cac1991876254b3f013cb38
|