"""Error handling utilities for Connpass API."""
import httpx
class ConnpassError:
"""Connpass API error handler."""
@staticmethod
def handle_http_error(error: httpx.HTTPStatusError) -> dict:
"""
HTTPエラーを処理して適切なエラーメッセージを返す。
Args:
error: HTTPStatusError例外
Returns:
エラー情報を含む辞書
"""
status_code = error.response.status_code
if status_code == 404:
return {
"error": "リソースが見つかりません。入力内容を確認してください。",
"details": "ユーザー名やグループ名が正しいか確認してください。",
"status_code": 404
}
elif status_code == 429:
return {
"error": "APIレート制限に達しました(1秒間に1リクエストまで)。",
"details": "しばらく待ってから再実行してください。",
"status_code": 429
}
elif status_code == 401:
return {
"error": "APIキーが無効または未設定です。",
"details": ".envファイルのCONNPASS_API設定を確認してください。APIキー取得: https://connpass.com/about/api/",
"status_code": 401
}
else:
return {
"error": f"HTTP {status_code}エラーが発生しました。",
"details": error.response.text,
"status_code": status_code
}
@staticmethod
def handle_general_error(error: Exception) -> dict:
"""
一般的なエラーを処理する。
Args:
error: 例外オブジェクト
Returns:
エラー情報を含む辞書
"""
return {
"error": "リクエストが失敗しました。",
"details": str(error)
}
@staticmethod
def missing_api_key() -> dict:
"""APIキー未設定エラー。"""
return {
"error": "CONNPASS_API_KEY is not configured in .env file",
"details": "APIキーを.envファイルに設定してください。"
}
@staticmethod
def invalid_group(group_name: str, available_groups: list) -> dict:
"""無効なグループ名エラー。"""
return {
"error": f"グループ '{group_name}' が見つかりません。",
"available_groups": available_groups
}
@staticmethod
def invalid_prefecture(prefecture: str, available_prefectures: list) -> dict:
"""無効な都道府県エラー。"""
return {
"error": f"都道府県 '{prefecture}' が見つかりません。",
"available_prefectures": ", ".join(available_prefectures)
}
@staticmethod
def missing_parameters(required: list) -> dict:
"""必須パラメータ不足エラー。"""
return {
"error": "必須パラメータが不足しています。",
"required_parameters": required
}