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

@@ -11,16 +11,16 @@ InsightFlow Phase 8 - 多租户 SaaS 架构管理模块
作者: InsightFlow Team
"""
import sqlite3
import json
import uuid
import hashlib
import re
from datetime import datetime
from typing import Optional, List, Dict, Any, Tuple
from dataclasses import dataclass, asdict
from enum import Enum
import json
import logging
import re
import sqlite3
import uuid
from dataclasses import asdict, dataclass
from datetime import datetime
from enum import StrEnum
from typing import Any
logger = logging.getLogger(__name__)
@@ -44,7 +44,7 @@ class TenantLimits:
UNLIMITED = -1
class TenantStatus(str, Enum):
class TenantStatus(StrEnum):
"""租户状态"""
ACTIVE = "active" # 活跃
SUSPENDED = "suspended" # 暂停
@@ -53,14 +53,14 @@ class TenantStatus(str, Enum):
PENDING = "pending" # 待激活
class TenantTier(str, Enum):
class TenantTier(StrEnum):
"""租户订阅层级"""
FREE = "free" # 免费版
PRO = "pro" # 专业版
ENTERPRISE = "enterprise" # 企业版
class TenantRole(str, Enum):
class TenantRole(StrEnum):
"""租户角色"""
OWNER = "owner" # 所有者
ADMIN = "admin" # 管理员
@@ -68,7 +68,7 @@ class TenantRole(str, Enum):
VIEWER = "viewer" # 查看者
class DomainStatus(str, Enum):
class DomainStatus(StrEnum):
"""域名状态"""
PENDING = "pending" # 待验证
VERIFIED = "verified" # 已验证
@@ -82,16 +82,16 @@ class Tenant:
id: str
name: str
slug: str # URL 友好的唯一标识
description: Optional[str]
description: str | None
tier: str # free/pro/enterprise
status: str # active/suspended/trial/expired/pending
owner_id: str # 所有者用户ID
created_at: datetime
updated_at: datetime
expires_at: Optional[datetime] # 订阅过期时间
settings: Dict[str, Any] # 租户级设置
resource_limits: Dict[str, Any] # 资源限制
metadata: Dict[str, Any] # 元数据
expires_at: datetime | None # 订阅过期时间
settings: dict[str, Any] # 租户级设置
resource_limits: dict[str, Any] # 资源限制
metadata: dict[str, Any] # 元数据
@dataclass
@@ -103,12 +103,12 @@ class TenantDomain:
status: str # pending/verified/failed/expired
verification_token: str # 验证令牌
verification_method: str # dns/file
verified_at: Optional[datetime]
verified_at: datetime | None
created_at: datetime
updated_at: datetime
is_primary: bool # 是否主域名
ssl_enabled: bool # SSL 是否启用
ssl_expires_at: Optional[datetime]
ssl_expires_at: datetime | None
@dataclass
@@ -116,14 +116,14 @@ class TenantBranding:
"""租户品牌配置数据类"""
id: str
tenant_id: str
logo_url: Optional[str] # Logo URL
favicon_url: Optional[str] # Favicon URL
primary_color: Optional[str] # 主题主色
secondary_color: Optional[str] # 主题次色
custom_css: Optional[str] # 自定义 CSS
custom_js: Optional[str] # 自定义 JS
login_page_bg: Optional[str] # 登录页背景
email_template: Optional[str] # 邮件模板
logo_url: str | None # Logo URL
favicon_url: str | None # Favicon URL
primary_color: str | None # 主题主色
secondary_color: str | None # 主题次色
custom_css: str | None # 自定义 CSS
custom_js: str | None # 自定义 JS
login_page_bg: str | None # 登录页背景
email_template: str | None # 邮件模板
created_at: datetime
updated_at: datetime
@@ -136,11 +136,11 @@ class TenantMember:
user_id: str
email: str
role: str # owner/admin/member/viewer
permissions: List[str] # 具体权限列表
invited_by: Optional[str] # 邀请者
permissions: list[str] # 具体权限列表
invited_by: str | None # 邀请者
invited_at: datetime
joined_at: Optional[datetime]
last_active_at: Optional[datetime]
joined_at: datetime | None
last_active_at: datetime | None
status: str # active/pending/suspended
@@ -151,10 +151,10 @@ class TenantPermission:
tenant_id: str
name: str # 权限名称
code: str # 权限代码
description: Optional[str]
description: str | None
resource_type: str # project/entity/api/etc
actions: List[str] # create/read/update/delete/etc
conditions: Optional[Dict] # 条件限制
actions: list[str] # create/read/update/delete/etc
conditions: dict | None # 条件限制
created_at: datetime
@@ -381,8 +381,8 @@ class TenantManager:
def create_tenant(self, name: str, owner_id: str,
tier: str = "free",
description: Optional[str] = None,
settings: Optional[Dict] = None) -> Tenant:
description: str | None = None,
settings: dict | None = None) -> Tenant:
"""创建新租户"""
conn = self._get_connection()
try:
@@ -436,7 +436,7 @@ class TenantManager:
finally:
conn.close()
def get_tenant(self, tenant_id: str) -> Optional[Tenant]:
def get_tenant(self, tenant_id: str) -> Tenant | None:
"""获取租户信息"""
conn = self._get_connection()
try:
@@ -451,7 +451,7 @@ class TenantManager:
finally:
conn.close()
def get_tenant_by_slug(self, slug: str) -> Optional[Tenant]:
def get_tenant_by_slug(self, slug: str) -> Tenant | None:
"""通过 slug 获取租户"""
conn = self._get_connection()
try:
@@ -466,7 +466,7 @@ class TenantManager:
finally:
conn.close()
def get_tenant_by_domain(self, domain: str) -> Optional[Tenant]:
def get_tenant_by_domain(self, domain: str) -> Tenant | None:
"""通过自定义域名获取租户"""
conn = self._get_connection()
try:
@@ -486,11 +486,11 @@ class TenantManager:
conn.close()
def update_tenant(self, tenant_id: str,
name: Optional[str] = None,
description: Optional[str] = None,
tier: Optional[str] = None,
status: Optional[str] = None,
settings: Optional[Dict] = None) -> Optional[Tenant]:
name: str | None = None,
description: str | None = None,
tier: str | None = None,
status: str | None = None,
settings: dict | None = None) -> Tenant | None:
"""更新租户信息"""
conn = self._get_connection()
try:
@@ -548,9 +548,9 @@ class TenantManager:
finally:
conn.close()
def list_tenants(self, status: Optional[str] = None,
tier: Optional[str] = None,
limit: int = 100, offset: int = 0) -> List[Tenant]:
def list_tenants(self, status: str | None = None,
tier: str | None = None,
limit: int = 100, offset: int = 0) -> list[Tenant]:
"""列出租户"""
conn = self._get_connection()
try:
@@ -689,7 +689,7 @@ class TenantManager:
finally:
conn.close()
def get_domain_verification_instructions(self, domain_id: str) -> Dict[str, Any]:
def get_domain_verification_instructions(self, domain_id: str) -> dict[str, Any]:
"""获取域名验证指导"""
conn = self._get_connection()
try:
@@ -739,7 +739,7 @@ class TenantManager:
finally:
conn.close()
def list_domains(self, tenant_id: str) -> List[TenantDomain]:
def list_domains(self, tenant_id: str) -> list[TenantDomain]:
"""列出租户的所有域名"""
conn = self._get_connection()
try:
@@ -758,7 +758,7 @@ class TenantManager:
# ==================== 品牌白标管理 ====================
def get_branding(self, tenant_id: str) -> Optional[TenantBranding]:
def get_branding(self, tenant_id: str) -> TenantBranding | None:
"""获取租户品牌配置"""
conn = self._get_connection()
try:
@@ -774,14 +774,14 @@ class TenantManager:
conn.close()
def update_branding(self, tenant_id: str,
logo_url: Optional[str] = None,
favicon_url: Optional[str] = None,
primary_color: Optional[str] = None,
secondary_color: Optional[str] = None,
custom_css: Optional[str] = None,
custom_js: Optional[str] = None,
login_page_bg: Optional[str] = None,
email_template: Optional[str] = None) -> TenantBranding:
logo_url: str | None = None,
favicon_url: str | None = None,
primary_color: str | None = None,
secondary_color: str | None = None,
custom_css: str | None = None,
custom_js: str | None = None,
login_page_bg: str | None = None,
email_template: str | None = None) -> TenantBranding:
"""更新租户品牌配置"""
conn = self._get_connection()
try:
@@ -890,7 +890,7 @@ class TenantManager:
# ==================== 成员与权限管理 ====================
def invite_member(self, tenant_id: str, email: str, role: str,
invited_by: str, permissions: Optional[List[str]] = None) -> TenantMember:
invited_by: str, permissions: list[str] | None = None) -> TenantMember:
"""邀请成员加入租户"""
conn = self._get_connection()
try:
@@ -967,7 +967,7 @@ class TenantManager:
conn.close()
def update_member_role(self, tenant_id: str, member_id: str,
role: str, permissions: Optional[List[str]] = None) -> bool:
role: str, permissions: list[str] | None = None) -> bool:
"""更新成员角色"""
conn = self._get_connection()
try:
@@ -988,7 +988,7 @@ class TenantManager:
finally:
conn.close()
def list_members(self, tenant_id: str, status: Optional[str] = None) -> List[TenantMember]:
def list_members(self, tenant_id: str, status: str | None = None) -> list[TenantMember]:
"""列出租户成员"""
conn = self._get_connection()
try:
@@ -1042,7 +1042,7 @@ class TenantManager:
finally:
conn.close()
def get_user_tenants(self, user_id: str) -> List[Dict[str, Any]]:
def get_user_tenants(self, user_id: str) -> list[dict[str, Any]]:
"""获取用户所属的所有租户"""
conn = self._get_connection()
try:
@@ -1108,8 +1108,8 @@ class TenantManager:
conn.close()
def get_usage_stats(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:
@@ -1165,7 +1165,7 @@ class TenantManager:
finally:
conn.close()
def check_resource_limit(self, tenant_id: str, resource_type: str) -> Tuple[bool, int, int]:
def check_resource_limit(self, tenant_id: str, resource_type: str) -> tuple[bool, int, int]:
"""检查资源是否超限
Returns:
@@ -1288,7 +1288,7 @@ class TenantManager:
def _add_member_internal(self, conn: sqlite3.Connection, tenant_id: str,
user_id: str, email: str, role: TenantRole,
invited_by: Optional[str]):
invited_by: str | None):
"""内部方法:添加成员"""
cursor = conn.cursor()
member_id = str(uuid.uuid4())
@@ -1416,8 +1416,8 @@ class TenantManager:
class TenantContext:
"""租户上下文管理器 - 用于请求级别的租户隔离"""
_current_tenant_id: Optional[str] = None
_current_user_id: Optional[str] = None
_current_tenant_id: str | None = None
_current_user_id: str | None = None
@classmethod
def set_current_tenant(cls, tenant_id: str):
@@ -1425,7 +1425,7 @@ class TenantContext:
cls._current_tenant_id = tenant_id
@classmethod
def get_current_tenant(cls) -> Optional[str]:
def get_current_tenant(cls) -> str | None:
"""获取当前租户ID"""
return cls._current_tenant_id
@@ -1435,7 +1435,7 @@ class TenantContext:
cls._current_user_id = user_id
@classmethod
def get_current_user(cls) -> Optional[str]:
def get_current_user(cls) -> str | None:
"""获取当前用户ID"""
return cls._current_user_id