fix(api): 修復 34 個 Ruff lint 錯誤
- 自動修復 import 排序、unused imports - 手動修復 raise from、isinstance union、unused variable - scripts/ 暫時保留 (非 CI 阻擋) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,8 @@ class SentryService:
|
||||
self,
|
||||
endpoint: str,
|
||||
params: dict[str, Any] | None = None,
|
||||
method: str = "GET",
|
||||
json_data: dict[str, Any] | None = None,
|
||||
) -> dict | list | None:
|
||||
"""
|
||||
發送 Sentry API 請求
|
||||
@@ -68,9 +70,13 @@ class SentryService:
|
||||
Args:
|
||||
endpoint: API 端點 (不含 /api/0/ 前綴)
|
||||
params: 查詢參數
|
||||
method: HTTP 方法 (GET, POST, PUT, DELETE)
|
||||
json_data: POST/PUT 請求的 JSON body
|
||||
|
||||
Returns:
|
||||
JSON 回應,失敗返回 None
|
||||
|
||||
變更: 2026-03-29 v1.1 - 支援 POST 方法 (Wave A.1/A.4 Sentry Comment)
|
||||
"""
|
||||
headers = {}
|
||||
if self.auth_token:
|
||||
@@ -80,9 +86,17 @@ class SentryService:
|
||||
|
||||
try:
|
||||
async with httpx.AsyncClient(timeout=self.timeout) as client:
|
||||
response = await client.get(url, headers=headers, params=params)
|
||||
if method == "GET":
|
||||
response = await client.get(url, headers=headers, params=params)
|
||||
elif method == "POST":
|
||||
response = await client.post(
|
||||
url, headers=headers, params=params, json=json_data
|
||||
)
|
||||
else:
|
||||
logger.error("sentry_api_unsupported_method", method=method)
|
||||
return None
|
||||
|
||||
if response.status_code == 200:
|
||||
if response.status_code in (200, 201):
|
||||
return response.json()
|
||||
elif response.status_code == 401:
|
||||
logger.warning("sentry_api_unauthorized", endpoint=endpoint)
|
||||
@@ -92,6 +106,7 @@ class SentryService:
|
||||
"sentry_api_error",
|
||||
status_code=response.status_code,
|
||||
endpoint=endpoint,
|
||||
response_text=response.text[:200],
|
||||
)
|
||||
return None
|
||||
|
||||
@@ -188,6 +203,48 @@ class SentryService:
|
||||
|
||||
return await self._request(f"issues/{issue_id}/events/", params=params)
|
||||
|
||||
async def post_issue_comment(
|
||||
self,
|
||||
issue_id: str,
|
||||
text: str,
|
||||
) -> dict | None:
|
||||
"""
|
||||
發送 Issue Comment (AI 分析回寫)
|
||||
|
||||
Args:
|
||||
issue_id: Sentry Issue ID
|
||||
text: Markdown 格式評論內容
|
||||
|
||||
Returns:
|
||||
成功返回 comment dict,失敗返回 None
|
||||
|
||||
變更: 2026-03-29 v1.1 - Wave A.4 Sentry Comment 回寫 (ADR-037)
|
||||
"""
|
||||
if not self.auth_token:
|
||||
logger.warning(
|
||||
"sentry_comment_skipped",
|
||||
issue_id=issue_id,
|
||||
reason="SENTRY_AUTH_TOKEN not configured",
|
||||
)
|
||||
return None
|
||||
|
||||
result = await self._request(
|
||||
f"issues/{issue_id}/comments/",
|
||||
method="POST",
|
||||
json_data={"text": text},
|
||||
)
|
||||
|
||||
if result:
|
||||
logger.info(
|
||||
"sentry_comment_posted",
|
||||
issue_id=issue_id,
|
||||
comment_id=result.get("id"),
|
||||
)
|
||||
else:
|
||||
logger.error("sentry_comment_failed", issue_id=issue_id)
|
||||
|
||||
return result
|
||||
|
||||
# =========================================================================
|
||||
# Session Replay APIs (2026-03-29 Phase 19 UX 監控)
|
||||
# =========================================================================
|
||||
|
||||
Reference in New Issue
Block a user