fix(api): 修復時區 import 排序與未使用變數 lint 錯誤
- 修正 import 順序 (standard → third-party → local) - 修復 datetime/timedelta 未定義錯誤 - 移除未使用的 imports Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,8 +14,6 @@ Endpoints:
|
||||
from datetime import timedelta
|
||||
from typing import Any
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Query, status
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import func, select
|
||||
@@ -23,6 +21,7 @@ from sqlalchemy import func, select
|
||||
from src.core.logging import get_logger
|
||||
from src.db.base import get_db_context
|
||||
from src.db.models import AuditLog
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
router = APIRouter(prefix="/audit-logs", tags=["Audit Logs"])
|
||||
logger = get_logger("awoooi.audit")
|
||||
@@ -191,7 +190,6 @@ async def get_audit_stats() -> AuditStatsResponse:
|
||||
Returns:
|
||||
AuditStatsResponse: 統計資訊
|
||||
"""
|
||||
from datetime import timedelta
|
||||
|
||||
async with get_db_context() as db:
|
||||
# Total count
|
||||
|
||||
@@ -19,8 +19,6 @@ Phase 6.4 核心功能:
|
||||
|
||||
from typing import Any
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
@@ -30,6 +28,7 @@ from src.models.approval import ApprovalRequestResponse
|
||||
from src.models.incident import Incident, IncidentStatus, Severity
|
||||
from src.services.decision_manager import get_decision_manager
|
||||
from src.services.proposal_service import get_proposal_service
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
router = APIRouter(prefix="/incidents", tags=["Incidents"])
|
||||
logger = get_logger("awoooi.incidents")
|
||||
@@ -417,7 +416,6 @@ async def submit_feedback(
|
||||
Raises:
|
||||
HTTPException: 404 事件不存在
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import select
|
||||
|
||||
@@ -531,7 +529,6 @@ async def debug_resolve_incident(incident_id: str) -> dict[str, Any]:
|
||||
DEBUG: 直接更新 Incident 狀態為 RESOLVED
|
||||
用於測試 resolve_incident_after_approval 邏輯
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import select
|
||||
|
||||
@@ -653,7 +650,6 @@ async def sync_incidents_from_approvals() -> SyncResult:
|
||||
"""
|
||||
掃描所有 pending Approvals,為缺少 Incident 的補建
|
||||
"""
|
||||
from datetime import datetime
|
||||
from uuid import UUID
|
||||
|
||||
from src.models.incident import Signal
|
||||
|
||||
@@ -18,20 +18,19 @@ import uuid
|
||||
|
||||
import httpx
|
||||
import structlog
|
||||
|
||||
from fastapi import APIRouter, BackgroundTasks, HTTPException, Request
|
||||
from pydantic import BaseModel
|
||||
|
||||
from src.utils.timezone import now_taipei_iso
|
||||
from src.services.telegram_gateway import get_telegram_gateway
|
||||
from src.services.approval_db import get_approval_service
|
||||
from src.models.approval import (
|
||||
ApprovalRequestCreate,
|
||||
RiskLevel,
|
||||
BlastRadius,
|
||||
DataImpact,
|
||||
DryRunCheck,
|
||||
RiskLevel,
|
||||
)
|
||||
from src.services.approval_db import get_approval_service
|
||||
from src.services.telegram_gateway import get_telegram_gateway
|
||||
from src.utils.timezone import now_taipei_iso
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
|
||||
@@ -26,8 +26,6 @@ import hashlib
|
||||
import hmac
|
||||
from typing import Literal
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
from fastapi import APIRouter, BackgroundTasks, Header, HTTPException, Request, status
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
@@ -51,6 +49,7 @@ from src.services.openclaw import get_openclaw
|
||||
|
||||
# Phase 5: Telegram Gateway (行動戰情室)
|
||||
from src.services.telegram_gateway import TelegramGatewayError, get_telegram_gateway
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
router = APIRouter(prefix="/webhooks", tags=["Webhooks"])
|
||||
logger = get_logger("awoooi.webhooks")
|
||||
|
||||
@@ -14,12 +14,12 @@ Phase 3.3: 商業變現能力 - Day-1 ROI
|
||||
|
||||
import logging
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import timedelta
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
from datetime import datetime, timedelta
|
||||
from enum import Enum
|
||||
from typing import Literal
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
@@ -18,13 +18,13 @@ import re
|
||||
import uuid
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
from enum import Enum
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ Supported Operations:
|
||||
import asyncio
|
||||
import time
|
||||
from dataclasses import dataclass
|
||||
from src.utils.timezone import now_taipei, now_taipei_iso
|
||||
from enum import Enum
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
@@ -32,6 +31,7 @@ from src.core.config import settings
|
||||
from src.db.base import get_db_context
|
||||
from src.db.models import AuditLog
|
||||
from src.models.approval import ApprovalRequest
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
|
||||
@@ -12,11 +12,11 @@ Phase 6: leWOOOgo Output Plugins
|
||||
from abc import ABC, abstractmethod
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
from enum import Enum
|
||||
from typing import Any
|
||||
|
||||
from src.utils.timezone import now_taipei
|
||||
|
||||
|
||||
class NotificationStatus(str, Enum):
|
||||
"""通知狀態"""
|
||||
|
||||
@@ -23,9 +23,9 @@ import json
|
||||
import random
|
||||
import re
|
||||
import time
|
||||
import httpx
|
||||
from datetime import datetime
|
||||
|
||||
from src.utils.timezone import now_taipei_iso
|
||||
import httpx
|
||||
import structlog
|
||||
|
||||
from src.core.config import settings
|
||||
@@ -34,6 +34,7 @@ from src.models.ai import (
|
||||
OpenClawDecision,
|
||||
)
|
||||
from src.services.signoz_client import GoldMetrics, get_signoz_client
|
||||
from src.utils.timezone import now_taipei_iso
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ AWOOOI - 時區工具
|
||||
🔴 HARD RULE: 全系統使用台北時區,禁止 UTC
|
||||
"""
|
||||
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from datetime import UTC, datetime, timedelta, timezone
|
||||
|
||||
# 台北時區 (UTC+8)
|
||||
TAIPEI_TZ = timezone(timedelta(hours=8))
|
||||
@@ -38,7 +38,7 @@ def to_taipei(dt: datetime) -> datetime:
|
||||
"""
|
||||
if dt.tzinfo is None:
|
||||
# naive datetime,假設是 UTC
|
||||
dt = dt.replace(tzinfo=timezone.utc)
|
||||
dt = dt.replace(tzinfo=UTC)
|
||||
return dt.astimezone(TAIPEI_TZ)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user