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,20 +10,19 @@ InsightFlow Developer Ecosystem Manager - Phase 8 Task 6
作者: InsightFlow Team
"""
import os
import json
import os
import sqlite3
import uuid
from typing import List, Dict, Optional
from dataclasses import dataclass
from datetime import datetime
from enum import Enum
from enum import StrEnum
# Database path
DB_PATH = os.path.join(os.path.dirname(__file__), "insightflow.db")
class SDKLanguage(str, Enum):
class SDKLanguage(StrEnum):
"""SDK 语言类型"""
PYTHON = "python"
@@ -34,7 +33,7 @@ class SDKLanguage(str, Enum):
RUST = "rust"
class SDKStatus(str, Enum):
class SDKStatus(StrEnum):
"""SDK 状态"""
DRAFT = "draft" # 草稿
@@ -44,7 +43,7 @@ class SDKStatus(str, Enum):
ARCHIVED = "archived" # 已归档
class TemplateCategory(str, Enum):
class TemplateCategory(StrEnum):
"""模板分类"""
MEDICAL = "medical" # 医疗
@@ -55,7 +54,7 @@ class TemplateCategory(str, Enum):
GENERAL = "general" # 通用
class TemplateStatus(str, Enum):
class TemplateStatus(StrEnum):
"""模板状态"""
PENDING = "pending" # 待审核
@@ -65,7 +64,7 @@ class TemplateStatus(str, Enum):
UNLISTED = "unlisted" # 未列出
class PluginStatus(str, Enum):
class PluginStatus(StrEnum):
"""插件状态"""
PENDING = "pending" # 待审核
@@ -76,7 +75,7 @@ class PluginStatus(str, Enum):
SUSPENDED = "suspended" # 已暂停
class PluginCategory(str, Enum):
class PluginCategory(StrEnum):
"""插件分类"""
INTEGRATION = "integration" # 集成
@@ -87,7 +86,7 @@ class PluginCategory(str, Enum):
CUSTOM = "custom" # 自定义
class DeveloperStatus(str, Enum):
class DeveloperStatus(StrEnum):
"""开发者认证状态"""
UNVERIFIED = "unverified" # 未认证
@@ -113,13 +112,13 @@ class SDKRelease:
package_name: str # pip/npm/go module name
status: SDKStatus
min_platform_version: str
dependencies: List[Dict] # [{"name": "requests", "version": ">=2.0"}]
dependencies: list[dict] # [{"name": "requests", "version": ">=2.0"}]
file_size: int
checksum: str
download_count: int
created_at: str
updated_at: str
published_at: Optional[str]
published_at: str | None
created_by: str
@@ -148,17 +147,17 @@ class TemplateMarketItem:
name: str
description: str
category: TemplateCategory
subcategory: Optional[str]
tags: List[str]
subcategory: str | None
tags: list[str]
author_id: str
author_name: str
status: TemplateStatus
price: float # 0 = 免费
currency: str
preview_image_url: Optional[str]
demo_url: Optional[str]
documentation_url: Optional[str]
download_url: Optional[str]
preview_image_url: str | None
demo_url: str | None
documentation_url: str | None
download_url: str | None
install_count: int
rating: float
rating_count: int
@@ -169,7 +168,7 @@ class TemplateMarketItem:
checksum: str
created_at: str
updated_at: str
published_at: Optional[str]
published_at: str | None
@dataclass
@@ -196,20 +195,20 @@ class PluginMarketItem:
name: str
description: str
category: PluginCategory
tags: List[str]
tags: list[str]
author_id: str
author_name: str
status: PluginStatus
price: float
currency: str
pricing_model: str # free, paid, freemium, subscription
preview_image_url: Optional[str]
demo_url: Optional[str]
documentation_url: Optional[str]
repository_url: Optional[str]
download_url: Optional[str]
webhook_url: Optional[str] # 用于插件回调
permissions: List[str] # 需要的权限列表
preview_image_url: str | None
demo_url: str | None
documentation_url: str | None
repository_url: str | None
download_url: str | None
webhook_url: str | None # 用于插件回调
permissions: list[str] # 需要的权限列表
install_count: int
active_install_count: int
rating: float
@@ -221,10 +220,10 @@ class PluginMarketItem:
checksum: str
created_at: str
updated_at: str
published_at: Optional[str]
reviewed_by: Optional[str]
reviewed_at: Optional[str]
review_notes: Optional[str]
published_at: str | None
reviewed_by: str | None
reviewed_at: str | None
review_notes: str | None
@dataclass
@@ -251,12 +250,12 @@ class DeveloperProfile:
user_id: str
display_name: str
email: str
bio: Optional[str]
website: Optional[str]
github_url: Optional[str]
avatar_url: Optional[str]
bio: str | None
website: str | None
github_url: str | None
avatar_url: str | None
status: DeveloperStatus
verification_documents: Dict # 认证文档
verification_documents: dict # 认证文档
total_sales: float
total_downloads: int
plugin_count: int
@@ -264,7 +263,7 @@ class DeveloperProfile:
rating_average: float
created_at: str
updated_at: str
verified_at: Optional[str]
verified_at: str | None
@dataclass
@@ -296,11 +295,11 @@ class CodeExample:
category: str
code: str
explanation: str
tags: List[str]
tags: list[str]
author_id: str
author_name: str
sdk_id: Optional[str] # 关联的 SDK
api_endpoints: List[str] # 涉及的 API 端点
sdk_id: str | None # 关联的 SDK
api_endpoints: list[str] # 涉及的 API 端点
view_count: int
copy_count: int
rating: float
@@ -330,16 +329,16 @@ class DeveloperPortalConfig:
name: str
description: str
theme: str
custom_css: Optional[str]
custom_js: Optional[str]
logo_url: Optional[str]
favicon_url: Optional[str]
custom_css: str | None
custom_js: str | None
logo_url: str | None
favicon_url: str | None
primary_color: str
secondary_color: str
support_email: str
support_url: Optional[str]
github_url: Optional[str]
discord_url: Optional[str]
support_url: str | None
github_url: str | None
discord_url: str | None
api_base_url: str
is_active: bool
created_at: str
@@ -373,7 +372,7 @@ class DeveloperEcosystemManager:
repository_url: str,
package_name: str,
min_platform_version: str,
dependencies: List[Dict],
dependencies: list[dict],
file_size: int,
checksum: str,
created_by: str,
@@ -442,7 +441,7 @@ class DeveloperEcosystemManager:
return sdk
def get_sdk_release(self, sdk_id: str) -> Optional[SDKRelease]:
def get_sdk_release(self, sdk_id: str) -> SDKRelease | None:
"""获取 SDK 发布详情"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM sdk_releases WHERE id = ?", (sdk_id,)).fetchone()
@@ -452,8 +451,8 @@ class DeveloperEcosystemManager:
return None
def list_sdk_releases(
self, language: Optional[SDKLanguage] = None, status: Optional[SDKStatus] = None, search: Optional[str] = None
) -> List[SDKRelease]:
self, language: SDKLanguage | None = None, status: SDKStatus | None = None, search: str | None = None
) -> list[SDKRelease]:
"""列出 SDK 发布"""
query = "SELECT * FROM sdk_releases WHERE 1=1"
params = []
@@ -474,7 +473,7 @@ class DeveloperEcosystemManager:
rows = conn.execute(query, params).fetchall()
return [self._row_to_sdk_release(row) for row in rows]
def update_sdk_release(self, sdk_id: str, **kwargs) -> Optional[SDKRelease]:
def update_sdk_release(self, sdk_id: str, **kwargs) -> SDKRelease | None:
"""更新 SDK 发布"""
allowed_fields = [
"name",
@@ -499,7 +498,7 @@ class DeveloperEcosystemManager:
return self.get_sdk_release(sdk_id)
def publish_sdk_release(self, sdk_id: str) -> Optional[SDKRelease]:
def publish_sdk_release(self, sdk_id: str) -> SDKRelease | None:
"""发布 SDK"""
now = datetime.now().isoformat()
@@ -529,7 +528,7 @@ class DeveloperEcosystemManager:
)
conn.commit()
def get_sdk_versions(self, sdk_id: str) -> List[SDKVersion]:
def get_sdk_versions(self, sdk_id: str) -> list[SDKVersion]:
"""获取 SDK 版本历史"""
with self._get_db() as conn:
rows = conn.execute(
@@ -588,16 +587,16 @@ class DeveloperEcosystemManager:
name: str,
description: str,
category: TemplateCategory,
subcategory: Optional[str],
tags: List[str],
subcategory: str | None,
tags: list[str],
author_id: str,
author_name: str,
price: float = 0.0,
currency: str = "CNY",
preview_image_url: Optional[str] = None,
demo_url: Optional[str] = None,
documentation_url: Optional[str] = None,
download_url: Optional[str] = None,
preview_image_url: str | None = None,
demo_url: str | None = None,
documentation_url: str | None = None,
download_url: str | None = None,
version: str = "1.0.0",
min_platform_version: str = "1.0.0",
file_size: int = 0,
@@ -679,7 +678,7 @@ class DeveloperEcosystemManager:
return template
def get_template(self, template_id: str) -> Optional[TemplateMarketItem]:
def get_template(self, template_id: str) -> TemplateMarketItem | None:
"""获取模板详情"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM template_market WHERE id = ?", (template_id,)).fetchone()
@@ -690,14 +689,14 @@ class DeveloperEcosystemManager:
def list_templates(
self,
category: Optional[TemplateCategory] = None,
status: Optional[TemplateStatus] = None,
search: Optional[str] = None,
author_id: Optional[str] = None,
min_price: Optional[float] = None,
max_price: Optional[float] = None,
category: TemplateCategory | None = None,
status: TemplateStatus | None = None,
search: str | None = None,
author_id: str | None = None,
min_price: float | None = None,
max_price: float | None = None,
sort_by: str = "created_at",
) -> List[TemplateMarketItem]:
) -> list[TemplateMarketItem]:
"""列出模板"""
query = "SELECT * FROM template_market WHERE 1=1"
params = []
@@ -735,7 +734,7 @@ class DeveloperEcosystemManager:
rows = conn.execute(query, params).fetchall()
return [self._row_to_template(row) for row in rows]
def approve_template(self, template_id: str, reviewed_by: str) -> Optional[TemplateMarketItem]:
def approve_template(self, template_id: str, reviewed_by: str) -> TemplateMarketItem | None:
"""审核通过模板"""
now = datetime.now().isoformat()
@@ -752,7 +751,7 @@ class DeveloperEcosystemManager:
return self.get_template(template_id)
def publish_template(self, template_id: str) -> Optional[TemplateMarketItem]:
def publish_template(self, template_id: str) -> TemplateMarketItem | None:
"""发布模板"""
now = datetime.now().isoformat()
@@ -769,7 +768,7 @@ class DeveloperEcosystemManager:
return self.get_template(template_id)
def reject_template(self, template_id: str, reason: str) -> Optional[TemplateMarketItem]:
def reject_template(self, template_id: str, reason: str) -> TemplateMarketItem | None:
"""拒绝模板"""
now = datetime.now().isoformat()
@@ -874,7 +873,7 @@ class DeveloperEcosystemManager:
(round(row["avg_rating"], 2) if row["avg_rating"] else 0, row["count"], row["count"], template_id),
)
def get_template_reviews(self, template_id: str, limit: int = 50) -> List[TemplateReview]:
def get_template_reviews(self, template_id: str, limit: int = 50) -> list[TemplateReview]:
"""获取模板评价"""
with self._get_db() as conn:
rows = conn.execute(
@@ -893,19 +892,19 @@ class DeveloperEcosystemManager:
name: str,
description: str,
category: PluginCategory,
tags: List[str],
tags: list[str],
author_id: str,
author_name: str,
price: float = 0.0,
currency: str = "CNY",
pricing_model: str = "free",
preview_image_url: Optional[str] = None,
demo_url: Optional[str] = None,
documentation_url: Optional[str] = None,
repository_url: Optional[str] = None,
download_url: Optional[str] = None,
webhook_url: Optional[str] = None,
permissions: List[str] = None,
preview_image_url: str | None = None,
demo_url: str | None = None,
documentation_url: str | None = None,
repository_url: str | None = None,
download_url: str | None = None,
webhook_url: str | None = None,
permissions: list[str] = None,
version: str = "1.0.0",
min_platform_version: str = "1.0.0",
file_size: int = 0,
@@ -1003,7 +1002,7 @@ class DeveloperEcosystemManager:
return plugin
def get_plugin(self, plugin_id: str) -> Optional[PluginMarketItem]:
def get_plugin(self, plugin_id: str) -> PluginMarketItem | None:
"""获取插件详情"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM plugin_market WHERE id = ?", (plugin_id,)).fetchone()
@@ -1014,12 +1013,12 @@ class DeveloperEcosystemManager:
def list_plugins(
self,
category: Optional[PluginCategory] = None,
status: Optional[PluginStatus] = None,
search: Optional[str] = None,
author_id: Optional[str] = None,
category: PluginCategory | None = None,
status: PluginStatus | None = None,
search: str | None = None,
author_id: str | None = None,
sort_by: str = "created_at",
) -> List[PluginMarketItem]:
) -> list[PluginMarketItem]:
"""列出插件"""
query = "SELECT * FROM plugin_market WHERE 1=1"
params = []
@@ -1051,7 +1050,7 @@ class DeveloperEcosystemManager:
def review_plugin(
self, plugin_id: str, reviewed_by: str, status: PluginStatus, notes: str = ""
) -> Optional[PluginMarketItem]:
) -> PluginMarketItem | None:
"""审核插件"""
now = datetime.now().isoformat()
@@ -1068,7 +1067,7 @@ class DeveloperEcosystemManager:
return self.get_plugin(plugin_id)
def publish_plugin(self, plugin_id: str) -> Optional[PluginMarketItem]:
def publish_plugin(self, plugin_id: str) -> PluginMarketItem | None:
"""发布插件"""
now = datetime.now().isoformat()
@@ -1182,7 +1181,7 @@ class DeveloperEcosystemManager:
(round(row["avg_rating"], 2) if row["avg_rating"] else 0, row["count"], row["count"], plugin_id),
)
def get_plugin_reviews(self, plugin_id: str, limit: int = 50) -> List[PluginReview]:
def get_plugin_reviews(self, plugin_id: str, limit: int = 50) -> list[PluginReview]:
"""获取插件评价"""
with self._get_db() as conn:
rows = conn.execute(
@@ -1268,8 +1267,8 @@ class DeveloperEcosystemManager:
return revenue
def get_developer_revenues(
self, developer_id: str, start_date: Optional[datetime] = None, end_date: Optional[datetime] = None
) -> List[DeveloperRevenue]:
self, developer_id: str, start_date: datetime | None = None, end_date: datetime | None = None
) -> list[DeveloperRevenue]:
"""获取开发者收益记录"""
query = "SELECT * FROM developer_revenues WHERE developer_id = ?"
params = [developer_id]
@@ -1287,7 +1286,7 @@ class DeveloperEcosystemManager:
rows = conn.execute(query, params).fetchall()
return [self._row_to_developer_revenue(row) for row in rows]
def get_developer_revenue_summary(self, developer_id: str) -> Dict:
def get_developer_revenue_summary(self, developer_id: str) -> dict:
"""获取开发者收益汇总"""
with self._get_db() as conn:
row = conn.execute(
@@ -1318,10 +1317,10 @@ class DeveloperEcosystemManager:
user_id: str,
display_name: str,
email: str,
bio: Optional[str] = None,
website: Optional[str] = None,
github_url: Optional[str] = None,
avatar_url: Optional[str] = None,
bio: str | None = None,
website: str | None = None,
github_url: str | None = None,
avatar_url: str | None = None,
) -> DeveloperProfile:
"""创建开发者档案"""
profile_id = f"dev_{uuid.uuid4().hex[:16]}"
@@ -1382,7 +1381,7 @@ class DeveloperEcosystemManager:
return profile
def get_developer_profile(self, developer_id: str) -> Optional[DeveloperProfile]:
def get_developer_profile(self, developer_id: str) -> DeveloperProfile | None:
"""获取开发者档案"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM developer_profiles WHERE id = ?", (developer_id,)).fetchone()
@@ -1391,7 +1390,7 @@ class DeveloperEcosystemManager:
return self._row_to_developer_profile(row)
return None
def get_developer_profile_by_user(self, user_id: str) -> Optional[DeveloperProfile]:
def get_developer_profile_by_user(self, user_id: str) -> DeveloperProfile | None:
"""通过用户 ID 获取开发者档案"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM developer_profiles WHERE user_id = ?", (user_id,)).fetchone()
@@ -1400,7 +1399,7 @@ class DeveloperEcosystemManager:
return self._row_to_developer_profile(row)
return None
def verify_developer(self, developer_id: str, status: DeveloperStatus) -> Optional[DeveloperProfile]:
def verify_developer(self, developer_id: str, status: DeveloperStatus) -> DeveloperProfile | None:
"""验证开发者"""
now = datetime.now().isoformat()
@@ -1473,11 +1472,11 @@ class DeveloperEcosystemManager:
category: str,
code: str,
explanation: str,
tags: List[str],
tags: list[str],
author_id: str,
author_name: str,
sdk_id: Optional[str] = None,
api_endpoints: List[str] = None,
sdk_id: str | None = None,
api_endpoints: list[str] = None,
) -> CodeExample:
"""创建代码示例"""
example_id = f"ex_{uuid.uuid4().hex[:16]}"
@@ -1536,7 +1535,7 @@ class DeveloperEcosystemManager:
return example
def get_code_example(self, example_id: str) -> Optional[CodeExample]:
def get_code_example(self, example_id: str) -> CodeExample | None:
"""获取代码示例"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM code_examples WHERE id = ?", (example_id,)).fetchone()
@@ -1547,11 +1546,11 @@ class DeveloperEcosystemManager:
def list_code_examples(
self,
language: Optional[str] = None,
category: Optional[str] = None,
sdk_id: Optional[str] = None,
search: Optional[str] = None,
) -> List[CodeExample]:
language: str | None = None,
category: str | None = None,
sdk_id: str | None = None,
search: str | None = None,
) -> list[CodeExample]:
"""列出代码示例"""
query = "SELECT * FROM code_examples WHERE 1=1"
params = []
@@ -1650,7 +1649,7 @@ class DeveloperEcosystemManager:
return doc
def get_api_documentation(self, doc_id: str) -> Optional[APIDocumentation]:
def get_api_documentation(self, doc_id: str) -> APIDocumentation | None:
"""获取 API 文档"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM api_documentation WHERE id = ?", (doc_id,)).fetchone()
@@ -1659,7 +1658,7 @@ class DeveloperEcosystemManager:
return self._row_to_api_documentation(row)
return None
def get_latest_api_documentation(self) -> Optional[APIDocumentation]:
def get_latest_api_documentation(self) -> APIDocumentation | None:
"""获取最新 API 文档"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM api_documentation ORDER BY generated_at DESC LIMIT 1").fetchone()
@@ -1675,16 +1674,16 @@ class DeveloperEcosystemManager:
name: str,
description: str,
theme: str = "default",
custom_css: Optional[str] = None,
custom_js: Optional[str] = None,
logo_url: Optional[str] = None,
favicon_url: Optional[str] = None,
custom_css: str | None = None,
custom_js: str | None = None,
logo_url: str | None = None,
favicon_url: str | None = None,
primary_color: str = "#1890ff",
secondary_color: str = "#52c41a",
support_email: str = "support@insightflow.io",
support_url: Optional[str] = None,
github_url: Optional[str] = None,
discord_url: Optional[str] = None,
support_url: str | None = None,
github_url: str | None = None,
discord_url: str | None = None,
api_base_url: str = "https://api.insightflow.io",
) -> DeveloperPortalConfig:
"""创建开发者门户配置"""
@@ -1746,7 +1745,7 @@ class DeveloperEcosystemManager:
return config
def get_portal_config(self, config_id: str) -> Optional[DeveloperPortalConfig]:
def get_portal_config(self, config_id: str) -> DeveloperPortalConfig | None:
"""获取开发者门户配置"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM developer_portal_configs WHERE id = ?", (config_id,)).fetchone()
@@ -1755,7 +1754,7 @@ class DeveloperEcosystemManager:
return self._row_to_portal_config(row)
return None
def get_active_portal_config(self) -> Optional[DeveloperPortalConfig]:
def get_active_portal_config(self) -> DeveloperPortalConfig | None:
"""获取活跃的开发者门户配置"""
with self._get_db() as conn:
row = conn.execute("SELECT * FROM developer_portal_configs WHERE is_active = 1 LIMIT 1").fetchone()