fix: auto-fix code issues (cron)

- 修复重复导入/字段
- 修复异常处理
- 修复PEP8格式问题
- 添加类型注解
This commit is contained in:
OpenClaw Bot
2026-02-27 18:09:24 +08:00
parent 646b64daf7
commit 17bda3dbce
38 changed files with 1993 additions and 1972 deletions

View File

@@ -10,19 +10,19 @@ InsightFlow Phase 8 - 订阅与计费系统模块
作者: InsightFlow Team
"""
import sqlite3
import json
import uuid
from datetime import datetime, timedelta
from typing import Optional, List, Dict, Any
from dataclasses import dataclass
from enum import Enum
import logging
import sqlite3
import uuid
from dataclasses import dataclass
from datetime import datetime, timedelta
from enum import StrEnum
from typing import Any
logger = logging.getLogger(__name__)
class SubscriptionStatus(str, Enum):
class SubscriptionStatus(StrEnum):
"""订阅状态"""
ACTIVE = "active" # 活跃
CANCELLED = "cancelled" # 已取消
@@ -32,7 +32,7 @@ class SubscriptionStatus(str, Enum):
PENDING = "pending" # 待支付
class PaymentProvider(str, Enum):
class PaymentProvider(StrEnum):
"""支付提供商"""
STRIPE = "stripe" # Stripe
ALIPAY = "alipay" # 支付宝
@@ -40,7 +40,7 @@ class PaymentProvider(str, Enum):
BANK_TRANSFER = "bank_transfer" # 银行转账
class PaymentStatus(str, Enum):
class PaymentStatus(StrEnum):
"""支付状态"""
PENDING = "pending" # 待支付
PROCESSING = "processing" # 处理中
@@ -50,7 +50,7 @@ class PaymentStatus(str, Enum):
PARTIAL_REFUNDED = "partial_refunded" # 部分退款
class InvoiceStatus(str, Enum):
class InvoiceStatus(StrEnum):
"""发票状态"""
DRAFT = "draft" # 草稿
ISSUED = "issued" # 已开具
@@ -60,7 +60,7 @@ class InvoiceStatus(str, Enum):
CREDIT_NOTE = "credit_note" # 贷项通知单
class RefundStatus(str, Enum):
class RefundStatus(StrEnum):
"""退款状态"""
PENDING = "pending" # 待处理
APPROVED = "approved" # 已批准
@@ -79,12 +79,12 @@ class SubscriptionPlan:
price_monthly: float # 月付价格
price_yearly: float # 年付价格
currency: str # CNY/USD
features: List[str] # 功能列表
limits: Dict[str, Any] # 资源限制
features: list[str] # 功能列表
limits: dict[str, Any] # 资源限制
is_active: bool
created_at: datetime
updated_at: datetime
metadata: Dict[str, Any]
metadata: dict[str, Any]
@dataclass
@@ -97,14 +97,14 @@ class Subscription:
current_period_start: datetime
current_period_end: datetime
cancel_at_period_end: bool
canceled_at: Optional[datetime]
trial_start: Optional[datetime]
trial_end: Optional[datetime]
payment_provider: Optional[str]
provider_subscription_id: Optional[str] # 支付提供商的订阅ID
canceled_at: datetime | None
trial_start: datetime | None
trial_end: datetime | None
payment_provider: str | None
provider_subscription_id: str | None # 支付提供商的订阅ID
created_at: datetime
updated_at: datetime
metadata: Dict[str, Any]
metadata: dict[str, Any]
@dataclass
@@ -117,8 +117,8 @@ class UsageRecord:
unit: str # minutes/mb/count
recorded_at: datetime
cost: float # 费用
description: Optional[str]
metadata: Dict[str, Any]
description: str | None
metadata: dict[str, Any]
@dataclass
@@ -126,18 +126,18 @@ class Payment:
"""支付记录数据类"""
id: str
tenant_id: str
subscription_id: Optional[str]
invoice_id: Optional[str]
subscription_id: str | None
invoice_id: str | None
amount: float
currency: str
provider: str
provider_payment_id: Optional[str]
provider_payment_id: str | None
status: str
payment_method: Optional[str]
payment_details: Dict[str, Any]
paid_at: Optional[datetime]
failed_at: Optional[datetime]
failure_reason: Optional[str]
payment_method: str | None
payment_details: dict[str, Any]
paid_at: datetime | None
failed_at: datetime | None
failure_reason: str | None
created_at: datetime
updated_at: datetime
@@ -147,7 +147,7 @@ class Invoice:
"""发票数据类"""
id: str
tenant_id: str
subscription_id: Optional[str]
subscription_id: str | None
invoice_number: str
status: str
amount_due: float
@@ -156,11 +156,11 @@ class Invoice:
period_start: datetime
period_end: datetime
description: str
line_items: List[Dict[str, Any]]
line_items: list[dict[str, Any]]
due_date: datetime
paid_at: Optional[datetime]
voided_at: Optional[datetime]
void_reason: Optional[str]
paid_at: datetime | None
voided_at: datetime | None
void_reason: str | None
created_at: datetime
updated_at: datetime
@@ -171,18 +171,18 @@ class Refund:
id: str
tenant_id: str
payment_id: str
invoice_id: Optional[str]
invoice_id: str | None
amount: float
currency: str
reason: str
status: str
requested_by: str
requested_at: datetime
approved_by: Optional[str]
approved_at: Optional[str]
completed_at: Optional[datetime]
provider_refund_id: Optional[str]
metadata: Dict[str, Any]
approved_by: str | None
approved_at: str | None
completed_at: datetime | None
provider_refund_id: str | None
metadata: dict[str, Any]
created_at: datetime
updated_at: datetime
@@ -199,7 +199,7 @@ class BillingHistory:
reference_id: str # 关联的订阅/支付/退款ID
balance_after: float # 操作后余额
created_at: datetime
metadata: Dict[str, Any]
metadata: dict[str, Any]
class SubscriptionManager:
@@ -542,7 +542,7 @@ class SubscriptionManager:
# ==================== 订阅计划管理 ====================
def get_plan(self, plan_id: str) -> Optional[SubscriptionPlan]:
def get_plan(self, plan_id: str) -> SubscriptionPlan | None:
"""获取订阅计划"""
conn = self._get_connection()
try:
@@ -557,7 +557,7 @@ class SubscriptionManager:
finally:
conn.close()
def get_plan_by_tier(self, tier: str) -> Optional[SubscriptionPlan]:
def get_plan_by_tier(self, tier: str) -> SubscriptionPlan | None:
"""通过层级获取订阅计划"""
conn = self._get_connection()
try:
@@ -572,7 +572,7 @@ class SubscriptionManager:
finally:
conn.close()
def list_plans(self, include_inactive: bool = False) -> List[SubscriptionPlan]:
def list_plans(self, include_inactive: bool = False) -> list[SubscriptionPlan]:
"""列出所有订阅计划"""
conn = self._get_connection()
try:
@@ -591,8 +591,8 @@ class SubscriptionManager:
def create_plan(self, name: str, tier: str, description: str,
price_monthly: float, price_yearly: float,
currency: str = "CNY", features: List[str] = None,
limits: Dict[str, Any] = None) -> SubscriptionPlan:
currency: str = "CNY", features: list[str] = None,
limits: dict[str, Any] = None) -> SubscriptionPlan:
"""创建新订阅计划"""
conn = self._get_connection()
try:
@@ -639,7 +639,7 @@ class SubscriptionManager:
finally:
conn.close()
def update_plan(self, plan_id: str, **kwargs) -> Optional[SubscriptionPlan]:
def update_plan(self, plan_id: str, **kwargs) -> SubscriptionPlan | None:
"""更新订阅计划"""
conn = self._get_connection()
try:
@@ -685,7 +685,7 @@ class SubscriptionManager:
# ==================== 订阅管理 ====================
def create_subscription(self, tenant_id: str, plan_id: str,
payment_provider: Optional[str] = None,
payment_provider: str | None = None,
trial_days: int = 0,
billing_cycle: str = "monthly") -> Subscription:
"""创建新订阅"""
@@ -785,7 +785,7 @@ class SubscriptionManager:
finally:
conn.close()
def get_subscription(self, subscription_id: str) -> Optional[Subscription]:
def get_subscription(self, subscription_id: str) -> Subscription | None:
"""获取订阅信息"""
conn = self._get_connection()
try:
@@ -800,7 +800,7 @@ class SubscriptionManager:
finally:
conn.close()
def get_tenant_subscription(self, tenant_id: str) -> Optional[Subscription]:
def get_tenant_subscription(self, tenant_id: str) -> Subscription | None:
"""获取租户的当前订阅"""
conn = self._get_connection()
try:
@@ -819,7 +819,7 @@ class SubscriptionManager:
finally:
conn.close()
def update_subscription(self, subscription_id: str, **kwargs) -> Optional[Subscription]:
def update_subscription(self, subscription_id: str, **kwargs) -> Subscription | None:
"""更新订阅"""
conn = self._get_connection()
try:
@@ -862,7 +862,7 @@ class SubscriptionManager:
conn.close()
def cancel_subscription(self, subscription_id: str,
at_period_end: bool = True) -> Optional[Subscription]:
at_period_end: bool = True) -> Subscription | None:
"""取消订阅"""
conn = self._get_connection()
try:
@@ -904,7 +904,7 @@ class SubscriptionManager:
conn.close()
def change_plan(self, subscription_id: str, new_plan_id: str,
prorate: bool = True) -> Optional[Subscription]:
prorate: bool = True) -> Subscription | None:
"""更改订阅计划"""
conn = self._get_connection()
try:
@@ -950,8 +950,8 @@ class SubscriptionManager:
def record_usage(self, tenant_id: str, resource_type: str,
quantity: float, unit: str,
description: Optional[str] = None,
metadata: Optional[Dict] = None) -> UsageRecord:
description: str | None = None,
metadata: dict | None = None) -> UsageRecord:
"""记录用量"""
conn = self._get_connection()
try:
@@ -989,8 +989,8 @@ class SubscriptionManager:
conn.close()
def get_usage_summary(self, tenant_id: str,
start_date: Optional[datetime] = None,
end_date: Optional[datetime] = None) -> Dict[str, Any]:
start_date: datetime | None = None,
end_date: datetime | None = None) -> dict[str, Any]:
"""获取用量汇总"""
conn = self._get_connection()
try:
@@ -1061,10 +1061,10 @@ class SubscriptionManager:
# ==================== 支付管理 ====================
def create_payment(self, tenant_id: str, amount: float, currency: str,
provider: str, subscription_id: Optional[str] = None,
invoice_id: Optional[str] = None,
payment_method: Optional[str] = None,
payment_details: Optional[Dict] = None) -> Payment:
provider: str, subscription_id: str | None = None,
invoice_id: str | None = None,
payment_method: str | None = None,
payment_details: dict | None = None) -> Payment:
"""创建支付记录"""
conn = self._get_connection()
try:
@@ -1113,7 +1113,7 @@ class SubscriptionManager:
conn.close()
def confirm_payment(self, payment_id: str,
provider_payment_id: Optional[str] = None) -> Optional[Payment]:
provider_payment_id: str | None = None) -> Payment | None:
"""确认支付完成"""
conn = self._get_connection()
try:
@@ -1160,7 +1160,7 @@ class SubscriptionManager:
finally:
conn.close()
def fail_payment(self, payment_id: str, reason: str) -> Optional[Payment]:
def fail_payment(self, payment_id: str, reason: str) -> Payment | None:
"""标记支付失败"""
conn = self._get_connection()
try:
@@ -1179,7 +1179,7 @@ class SubscriptionManager:
finally:
conn.close()
def get_payment(self, payment_id: str) -> Optional[Payment]:
def get_payment(self, payment_id: str) -> Payment | None:
"""获取支付记录"""
conn = self._get_connection()
try:
@@ -1187,8 +1187,8 @@ class SubscriptionManager:
finally:
conn.close()
def list_payments(self, tenant_id: str, status: Optional[str] = None,
limit: int = 100, offset: int = 0) -> List[Payment]:
def list_payments(self, tenant_id: str, status: str | None = None,
limit: int = 100, offset: int = 0) -> list[Payment]:
"""列出支付记录"""
conn = self._get_connection()
try:
@@ -1212,7 +1212,7 @@ class SubscriptionManager:
finally:
conn.close()
def _get_payment_internal(self, conn: sqlite3.Connection, payment_id: str) -> Optional[Payment]:
def _get_payment_internal(self, conn: sqlite3.Connection, payment_id: str) -> Payment | None:
"""内部方法:获取支付记录"""
cursor = conn.cursor()
cursor.execute("SELECT * FROM payments WHERE id = ?", (payment_id,))
@@ -1225,10 +1225,10 @@ class SubscriptionManager:
# ==================== 发票管理 ====================
def _create_invoice_internal(self, conn: sqlite3.Connection, tenant_id: str,
subscription_id: Optional[str], amount: float,
subscription_id: str | None, amount: float,
currency: str, period_start: datetime,
period_end: datetime, description: str,
line_items: Optional[List[Dict]] = None) -> Invoice:
line_items: list[dict] | None = None) -> Invoice:
"""内部方法:创建发票"""
invoice_id = str(uuid.uuid4())
invoice_number = self._generate_invoice_number()
@@ -1275,7 +1275,7 @@ class SubscriptionManager:
return invoice
def get_invoice(self, invoice_id: str) -> Optional[Invoice]:
def get_invoice(self, invoice_id: str) -> Invoice | None:
"""获取发票"""
conn = self._get_connection()
try:
@@ -1290,7 +1290,7 @@ class SubscriptionManager:
finally:
conn.close()
def get_invoice_by_number(self, invoice_number: str) -> Optional[Invoice]:
def get_invoice_by_number(self, invoice_number: str) -> Invoice | None:
"""通过发票号获取发票"""
conn = self._get_connection()
try:
@@ -1305,8 +1305,8 @@ class SubscriptionManager:
finally:
conn.close()
def list_invoices(self, tenant_id: str, status: Optional[str] = None,
limit: int = 100, offset: int = 0) -> List[Invoice]:
def list_invoices(self, tenant_id: str, status: str | None = None,
limit: int = 100, offset: int = 0) -> list[Invoice]:
"""列出发票"""
conn = self._get_connection()
try:
@@ -1330,7 +1330,7 @@ class SubscriptionManager:
finally:
conn.close()
def void_invoice(self, invoice_id: str, reason: str) -> Optional[Invoice]:
def void_invoice(self, invoice_id: str, reason: str) -> Invoice | None:
"""作废发票"""
conn = self._get_connection()
try:
@@ -1442,7 +1442,7 @@ class SubscriptionManager:
finally:
conn.close()
def approve_refund(self, refund_id: str, approved_by: str) -> Optional[Refund]:
def approve_refund(self, refund_id: str, approved_by: str) -> Refund | None:
"""批准退款"""
conn = self._get_connection()
try:
@@ -1469,7 +1469,7 @@ class SubscriptionManager:
conn.close()
def complete_refund(self, refund_id: str,
provider_refund_id: Optional[str] = None) -> Optional[Refund]:
provider_refund_id: str | None = None) -> Refund | None:
"""完成退款"""
conn = self._get_connection()
try:
@@ -1507,7 +1507,7 @@ class SubscriptionManager:
finally:
conn.close()
def reject_refund(self, refund_id: str, reason: str) -> Optional[Refund]:
def reject_refund(self, refund_id: str, reason: str) -> Refund | None:
"""拒绝退款"""
conn = self._get_connection()
try:
@@ -1530,7 +1530,7 @@ class SubscriptionManager:
finally:
conn.close()
def get_refund(self, refund_id: str) -> Optional[Refund]:
def get_refund(self, refund_id: str) -> Refund | None:
"""获取退款记录"""
conn = self._get_connection()
try:
@@ -1538,8 +1538,8 @@ class SubscriptionManager:
finally:
conn.close()
def list_refunds(self, tenant_id: str, status: Optional[str] = None,
limit: int = 100, offset: int = 0) -> List[Refund]:
def list_refunds(self, tenant_id: str, status: str | None = None,
limit: int = 100, offset: int = 0) -> list[Refund]:
"""列出退款记录"""
conn = self._get_connection()
try:
@@ -1563,7 +1563,7 @@ class SubscriptionManager:
finally:
conn.close()
def _get_refund_internal(self, conn: sqlite3.Connection, refund_id: str) -> Optional[Refund]:
def _get_refund_internal(self, conn: sqlite3.Connection, refund_id: str) -> Refund | None:
"""内部方法:获取退款记录"""
cursor = conn.cursor()
cursor.execute("SELECT * FROM refunds WHERE id = ?", (refund_id,))
@@ -1593,9 +1593,9 @@ class SubscriptionManager:
))
def get_billing_history(self, tenant_id: str,
start_date: Optional[datetime] = None,
end_date: Optional[datetime] = None,
limit: int = 100, offset: int = 0) -> List[BillingHistory]:
start_date: datetime | None = None,
end_date: datetime | None = None,
limit: int = 100, offset: int = 0) -> list[BillingHistory]:
"""获取账单历史"""
conn = self._get_connection()
try:
@@ -1626,7 +1626,7 @@ class SubscriptionManager:
def create_stripe_checkout_session(self, tenant_id: str, plan_id: str,
success_url: str, cancel_url: str,
billing_cycle: str = "monthly") -> Dict[str, Any]:
billing_cycle: str = "monthly") -> dict[str, Any]:
"""创建 Stripe Checkout 会话(占位实现)"""
# 这里应该集成 Stripe SDK
# 简化实现,返回模拟数据
@@ -1638,7 +1638,7 @@ class SubscriptionManager:
}
def create_alipay_order(self, tenant_id: str, plan_id: str,
billing_cycle: str = "monthly") -> Dict[str, Any]:
billing_cycle: str = "monthly") -> dict[str, Any]:
"""创建支付宝订单(占位实现)"""
# 这里应该集成支付宝 SDK
plan = self.get_plan(plan_id)
@@ -1654,7 +1654,7 @@ class SubscriptionManager:
}
def create_wechat_order(self, tenant_id: str, plan_id: str,
billing_cycle: str = "monthly") -> Dict[str, Any]:
billing_cycle: str = "monthly") -> dict[str, Any]:
"""创建微信支付订单(占位实现)"""
# 这里应该集成微信支付 SDK
plan = self.get_plan(plan_id)
@@ -1669,7 +1669,7 @@ class SubscriptionManager:
"provider": "wechat"
}
def handle_webhook(self, provider: str, payload: Dict[str, Any]) -> bool:
def handle_webhook(self, provider: str, payload: dict[str, Any]) -> bool:
"""处理支付提供商的 Webhook占位实现"""
# 这里应该实现实际的 Webhook 处理逻辑
logger.info(f"Received webhook from {provider}: {payload.get('event_type', 'unknown')}")