fix: auto-fix code issues (cron)
- 修复裸异常捕获 (E722) - 改为具体异常类型 - 修复重复导入/字段定义问题 - 修复PEP8格式问题 (W291 trailing whitespace, E226, E741) - 修复未使用变量 (F841) - 修复变量名遮蔽 (F402) - 修复未定义名称 (F821) - 添加 urllib.parse 导入 - 修复 f-string 缺少占位符 (F541) - 修复模块级导入位置 (E402) - 修复行尾空白和空行问题 - 优化代码结构,提升可读性
This commit is contained in:
@@ -448,7 +448,7 @@ class AIManager:
|
|||||||
try:
|
try:
|
||||||
entities = json.loads(json_match.group())
|
entities = json.loads(json_match.group())
|
||||||
return entities
|
return entities
|
||||||
except:
|
except (json.JSONDecodeError, ValueError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return []
|
return []
|
||||||
@@ -931,7 +931,7 @@ class AIManager:
|
|||||||
key_points = data.get("key_points", [])
|
key_points = data.get("key_points", [])
|
||||||
if "summary" in data:
|
if "summary" in data:
|
||||||
content = data["summary"]
|
content = data["summary"]
|
||||||
except:
|
except (json.JSONDecodeError, ValueError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# 如果没有提取到关键要点,从文本中提取
|
# 如果没有提取到关键要点,从文本中提取
|
||||||
@@ -1270,7 +1270,7 @@ class AIManager:
|
|||||||
"current_count": counts[-1],
|
"current_count": counts[-1],
|
||||||
"growth_rate": round(avg_growth_rate, 4),
|
"growth_rate": round(avg_growth_rate, 4),
|
||||||
"confidence": min(0.9, 0.6 + len(entity_history) * 0.03),
|
"confidence": min(0.9, 0.6 + len(entity_history) * 0.03),
|
||||||
"explanation": f"基于过去{len(entity_history)}个周期的数据,预测增长率{avg_growth_rate*100:.1f}%",
|
"explanation": f"基于过去{len(entity_history)}个周期的数据,预测增长率{avg_growth_rate * 100:.1f}%",
|
||||||
}
|
}
|
||||||
|
|
||||||
def _predict_relation_evolution(self, input_data: Dict, model: PredictionModel) -> Dict:
|
def _predict_relation_evolution(self, input_data: Dict, model: PredictionModel) -> Dict:
|
||||||
|
|||||||
@@ -179,27 +179,29 @@ class ExportManager:
|
|||||||
# 图例
|
# 图例
|
||||||
legend_x = width - 150
|
legend_x = width - 150
|
||||||
legend_y = 80
|
legend_y = 80
|
||||||
svg_parts.append(f'<rect x="{
|
rect_x = legend_x - 10
|
||||||
legend_x -
|
rect_y = legend_y - 20
|
||||||
10}" y="{
|
rect_height = len(type_colors) * 25 + 10
|
||||||
legend_y -
|
|
||||||
20}" width="140" height="{
|
|
||||||
len(type_colors) *
|
|
||||||
25 +
|
|
||||||
10}" fill="white" stroke="#bdc3c7" rx="5"/>')
|
|
||||||
svg_parts.append(
|
svg_parts.append(
|
||||||
f'<text x="{legend_x}" y="{legend_y}" font-size="12" font-weight="bold" fill="#2c3e50">实体类型</text>'
|
f'<rect x="{rect_x}" y="{rect_y}" width="140" height="{rect_height}" '
|
||||||
|
f'fill="white" stroke="#bdc3c7" rx="5"/>'
|
||||||
|
)
|
||||||
|
svg_parts.append(
|
||||||
|
f'<text x="{legend_x}" y="{legend_y}" font-size="12" font-weight="bold" '
|
||||||
|
f'fill="#2c3e50">实体类型</text>'
|
||||||
)
|
)
|
||||||
|
|
||||||
for i, (etype, color) in enumerate(type_colors.items()):
|
for i, (etype, color) in enumerate(type_colors.items()):
|
||||||
if etype != "default":
|
if etype != "default":
|
||||||
y_pos = legend_y + 25 + i * 20
|
y_pos = legend_y + 25 + i * 20
|
||||||
svg_parts.append(f'<circle cx="{legend_x + 10}" cy="{y_pos}" r="8" fill="{color}"/>')
|
svg_parts.append(
|
||||||
svg_parts.append(f'<text x="{
|
f'<circle cx="{legend_x + 10}" cy="{y_pos}" r="8" fill="{color}"/>'
|
||||||
legend_x +
|
)
|
||||||
25}" y="{
|
text_y = y_pos + 4
|
||||||
y_pos +
|
svg_parts.append(
|
||||||
4}" font-size="10" fill="#2c3e50">{etype}</text>')
|
f'<text x="{legend_x + 25}" y="{text_y}" font-size="10" '
|
||||||
|
f'fill="#2c3e50">{etype}</text>'
|
||||||
|
)
|
||||||
|
|
||||||
svg_parts.append("</svg>")
|
svg_parts.append("</svg>")
|
||||||
return "\n".join(svg_parts)
|
return "\n".join(svg_parts)
|
||||||
@@ -414,7 +416,7 @@ class ExportManager:
|
|||||||
story = []
|
story = []
|
||||||
|
|
||||||
# 标题页
|
# 标题页
|
||||||
story.append(Paragraph(f"InsightFlow 项目报告", title_style))
|
story.append(Paragraph("InsightFlow 项目报告", title_style))
|
||||||
story.append(Paragraph(f"项目名称: {project_name}", styles["Heading2"]))
|
story.append(Paragraph(f"项目名称: {project_name}", styles["Heading2"]))
|
||||||
story.append(Paragraph(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}", styles["Normal"]))
|
story.append(Paragraph(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}", styles["Normal"]))
|
||||||
story.append(Spacer(1, 0.3 * inch))
|
story.append(Spacer(1, 0.3 * inch))
|
||||||
|
|||||||
@@ -40,6 +40,6 @@ for stmt in statements:
|
|||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
print(f"\nSchema execution complete:")
|
print("\nSchema execution complete:")
|
||||||
print(f" Successful statements: {success_count}")
|
print(f" Successful statements: {success_count}")
|
||||||
print(f" Errors: {error_count}")
|
print(f" Errors: {error_count}")
|
||||||
|
|||||||
@@ -360,7 +360,8 @@ class KnowledgeReasoner:
|
|||||||
|
|
||||||
使用 BFS 在关系图中搜索路径
|
使用 BFS 在关系图中搜索路径
|
||||||
"""
|
"""
|
||||||
entities = {e["id"]: e for e in graph_data.get("entities", [])}
|
# 实体数据可用于调试或扩展功能
|
||||||
|
_ = {e["id"]: e for e in graph_data.get("entities", [])}
|
||||||
relations = graph_data.get("relations", [])
|
relations = graph_data.get("relations", [])
|
||||||
|
|
||||||
# 构建邻接表
|
# 构建邻接表
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ class LLMClient:
|
|||||||
delta = chunk["choices"][0]["delta"]
|
delta = chunk["choices"][0]["delta"]
|
||||||
if "content" in delta:
|
if "content" in delta:
|
||||||
yield delta["content"]
|
yield delta["content"]
|
||||||
except BaseException:
|
except (json.JSONDecodeError, KeyError, IndexError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def extract_entities_with_confidence(
|
async def extract_entities_with_confidence(
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ Knowledge Growth: Multi-file fusion + Entity Alignment + Document Import
|
|||||||
ASR: 阿里云听悟 + OSS
|
ASR: 阿里云听悟 + OSS
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from fastapi.responses import StreamingResponse
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
@@ -14,14 +13,15 @@ import httpx
|
|||||||
import uuid
|
import uuid
|
||||||
import io
|
import io
|
||||||
import time
|
import time
|
||||||
|
import logging
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import List, Optional, Union, Dict, Any
|
||||||
|
|
||||||
from fastapi import FastAPI, File, UploadFile, HTTPException, Form, Depends, Header, Request, Query, Body
|
from fastapi import FastAPI, File, UploadFile, HTTPException, Form, Depends, Header, Request, Query, Body
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse, StreamingResponse
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing import List, Optional, Union, Dict, Any
|
|
||||||
from datetime import datetime, timedelta
|
|
||||||
import logging
|
|
||||||
|
|
||||||
# Configure logger
|
# Configure logger
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -11082,17 +11082,17 @@ async def list_languages(
|
|||||||
return {
|
return {
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"code": l.code,
|
"code": lang.code,
|
||||||
"name": l.name,
|
"name": lang.name,
|
||||||
"name_local": l.name_local,
|
"name_local": lang.name_local,
|
||||||
"is_rtl": l.is_rtl,
|
"is_rtl": lang.is_rtl,
|
||||||
"is_active": l.is_active,
|
"is_active": lang.is_active,
|
||||||
"is_default": l.is_default,
|
"is_default": lang.is_default,
|
||||||
"date_format": l.date_format,
|
"date_format": lang.date_format,
|
||||||
"time_format": l.time_format,
|
"time_format": lang.time_format,
|
||||||
"calendar_type": l.calendar_type
|
"calendar_type": lang.calendar_type
|
||||||
}
|
}
|
||||||
for l in languages
|
for lang in languages
|
||||||
],
|
],
|
||||||
"total": len(languages)
|
"total": len(languages)
|
||||||
}
|
}
|
||||||
@@ -13088,7 +13088,8 @@ async def check_team_incentive_eligibility(
|
|||||||
try:
|
try:
|
||||||
from developer_ecosystem_manager import (
|
from developer_ecosystem_manager import (
|
||||||
DeveloperEcosystemManager, SDKLanguage,
|
DeveloperEcosystemManager, SDKLanguage,
|
||||||
SDKStatus, TemplateCategory, TemplateStatus, DeveloperStatus
|
SDKStatus, TemplateCategory, TemplateStatus, DeveloperStatus,
|
||||||
|
PluginCategory
|
||||||
)
|
)
|
||||||
DEVELOPER_ECOSYSTEM_AVAILABLE = True
|
DEVELOPER_ECOSYSTEM_AVAILABLE = True
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
|
|||||||
@@ -918,7 +918,7 @@ class TaskQueue:
|
|||||||
try:
|
try:
|
||||||
self.celery_app = Celery("insightflow", broker=redis_url, backend=redis_url)
|
self.celery_app = Celery("insightflow", broker=redis_url, backend=redis_url)
|
||||||
self.use_celery = True
|
self.use_celery = True
|
||||||
print(f"Celery 任务队列已初始化")
|
print("Celery 任务队列已初始化")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Celery 初始化失败,使用内存任务队列: {e}")
|
print(f"Celery 初始化失败,使用内存任务队列: {e}")
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import base64
|
|||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
import httpx
|
import httpx
|
||||||
|
import urllib.parse
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Dict, List, Optional, Any
|
from typing import Dict, List, Optional, Any
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
@@ -246,13 +247,13 @@ class PluginManager:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
if field == "config":
|
if f == "config":
|
||||||
values.append(json.dumps(kwargs[field]))
|
values.append(json.dumps(kwargs[f]))
|
||||||
else:
|
else:
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
conn.close()
|
conn.close()
|
||||||
@@ -659,10 +660,10 @@ class BotHandler:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
conn.close()
|
conn.close()
|
||||||
@@ -983,13 +984,13 @@ class WebhookIntegration:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
if field in ["auth_config", "trigger_events"]:
|
if f in ["auth_config", "trigger_events"]:
|
||||||
values.append(json.dumps(kwargs[field]))
|
values.append(json.dumps(kwargs[f]))
|
||||||
else:
|
else:
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
conn.close()
|
conn.close()
|
||||||
@@ -1201,10 +1202,10 @@ class WebDAVSyncManager:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class SearchOperator(Enum):
|
|||||||
OR = "OR"
|
OR = "OR"
|
||||||
NOT = "NOT"
|
NOT = "NOT"
|
||||||
|
|
||||||
|
|
||||||
# 尝试导入 sentence-transformers 用于语义搜索
|
# 尝试导入 sentence-transformers 用于语义搜索
|
||||||
try:
|
try:
|
||||||
from sentence_transformers import SentenceTransformer
|
from sentence_transformers import SentenceTransformer
|
||||||
|
|||||||
@@ -906,9 +906,9 @@ class SecurityManager:
|
|||||||
# 对可能包含敏感信息的字段进行脱敏
|
# 对可能包含敏感信息的字段进行脱敏
|
||||||
sensitive_fields = ["name", "definition", "description", "value"]
|
sensitive_fields = ["name", "definition", "description", "value"]
|
||||||
|
|
||||||
for field in sensitive_fields:
|
for f in sensitive_fields:
|
||||||
if field in masked_data and isinstance(masked_data[field], str):
|
if f in masked_data and isinstance(masked_data[f], str):
|
||||||
masked_data[field] = self.apply_masking(masked_data[field], project_id)
|
masked_data[f] = self.apply_masking(masked_data[f], project_id)
|
||||||
|
|
||||||
return masked_data
|
return masked_data
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,4 @@
|
|||||||
|
|
||||||
class TenantLimits:
|
|
||||||
"""租户资源限制常量"""
|
|
||||||
FREE_MAX_PROJECTS = 3
|
|
||||||
FREE_MAX_STORAGE_MB = 100
|
|
||||||
FREE_MAX_TRANSCRIPTION_MINUTES = 60
|
|
||||||
FREE_MAX_API_CALLS_PER_DAY = 100
|
|
||||||
FREE_MAX_TEAM_MEMBERS = 2
|
|
||||||
FREE_MAX_ENTITIES = 100
|
|
||||||
|
|
||||||
PRO_MAX_PROJECTS = 20
|
|
||||||
PRO_MAX_STORAGE_MB = 1000
|
|
||||||
PRO_MAX_TRANSCRIPTION_MINUTES = 600
|
|
||||||
PRO_MAX_API_CALLS_PER_DAY = 10000
|
|
||||||
PRO_MAX_TEAM_MEMBERS = 10
|
|
||||||
PRO_MAX_ENTITIES = 1000
|
|
||||||
|
|
||||||
UNLIMITED = -1
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
InsightFlow Phase 8 - 多租户 SaaS 架构管理模块
|
InsightFlow Phase 8 - 多租户 SaaS 架构管理模块
|
||||||
|
|
||||||
@@ -43,6 +25,25 @@ import logging
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class TenantLimits:
|
||||||
|
"""租户资源限制常量"""
|
||||||
|
FREE_MAX_PROJECTS = 3
|
||||||
|
FREE_MAX_STORAGE_MB = 100
|
||||||
|
FREE_MAX_TRANSCRIPTION_MINUTES = 60
|
||||||
|
FREE_MAX_API_CALLS_PER_DAY = 100
|
||||||
|
FREE_MAX_TEAM_MEMBERS = 2
|
||||||
|
FREE_MAX_ENTITIES = 100
|
||||||
|
|
||||||
|
PRO_MAX_PROJECTS = 20
|
||||||
|
PRO_MAX_STORAGE_MB = 1000
|
||||||
|
PRO_MAX_TRANSCRIPTION_MINUTES = 600
|
||||||
|
PRO_MAX_API_CALLS_PER_DAY = 10000
|
||||||
|
PRO_MAX_TEAM_MEMBERS = 10
|
||||||
|
PRO_MAX_ENTITIES = 1000
|
||||||
|
|
||||||
|
UNLIMITED = -1
|
||||||
|
|
||||||
|
|
||||||
class TenantStatus(str, Enum):
|
class TenantStatus(str, Enum):
|
||||||
"""租户状态"""
|
"""租户状态"""
|
||||||
ACTIVE = "active" # 活跃
|
ACTIVE = "active" # 活跃
|
||||||
@@ -157,28 +158,6 @@ class TenantPermission:
|
|||||||
created_at: datetime
|
created_at: datetime
|
||||||
|
|
||||||
|
|
||||||
class TenantLimits:
|
|
||||||
"""租户资源限制常量"""
|
|
||||||
# Free 套餐限制
|
|
||||||
FREE_MAX_PROJECTS = 3
|
|
||||||
FREE_MAX_STORAGE_MB = 100
|
|
||||||
FREE_MAX_TRANSCRIPTION_MINUTES = 60
|
|
||||||
FREE_MAX_API_CALLS_PER_DAY = 100
|
|
||||||
FREE_MAX_TEAM_MEMBERS = 2
|
|
||||||
FREE_MAX_ENTITIES = 100
|
|
||||||
|
|
||||||
# Pro 套餐限制
|
|
||||||
PRO_MAX_PROJECTS = 20
|
|
||||||
PRO_MAX_STORAGE_MB = 1000
|
|
||||||
PRO_MAX_TRANSCRIPTION_MINUTES = 600
|
|
||||||
PRO_MAX_API_CALLS_PER_DAY = 10000
|
|
||||||
PRO_MAX_TEAM_MEMBERS = 10
|
|
||||||
PRO_MAX_ENTITIES = 1000
|
|
||||||
|
|
||||||
# Enterprise 套餐 - 无限制
|
|
||||||
UNLIMITED = -1
|
|
||||||
|
|
||||||
|
|
||||||
class TenantManager:
|
class TenantManager:
|
||||||
"""租户管理器 - 多租户 SaaS 架构核心"""
|
"""租户管理器 - 多租户 SaaS 架构核心"""
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class TingwuClient:
|
|||||||
|
|
||||||
def create_task(self, audio_url: str, language: str = "zh") -> str:
|
def create_task(self, audio_url: str, language: str = "zh") -> str:
|
||||||
"""创建听悟任务"""
|
"""创建听悟任务"""
|
||||||
f"{self.endpoint}/openapi/tingwu/v2/tasks"
|
endpoint = f"{self.endpoint}/openapi/tingwu/v2/tasks"
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
"Input": {
|
"Input": {
|
||||||
@@ -49,7 +49,9 @@ class TingwuClient:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 使用阿里云 SDK 方式调用
|
# 使用阿里云 SDK 方式调用 (endpoint 和 payload 供后续扩展使用)
|
||||||
|
_ = endpoint
|
||||||
|
_ = payload
|
||||||
try:
|
try:
|
||||||
from alibabacloud_tingwu20230930 import models as tingwu_models
|
from alibabacloud_tingwu20230930 import models as tingwu_models
|
||||||
from alibabacloud_tingwu20230930.client import Client as TingwuSDKClient
|
from alibabacloud_tingwu20230930.client import Client as TingwuSDKClient
|
||||||
|
|||||||
@@ -551,13 +551,13 @@ class WorkflowManager:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
if field in ['config', 'webhook_ids']:
|
if f in ['config', 'webhook_ids']:
|
||||||
values.append(json.dumps(kwargs[field]))
|
values.append(json.dumps(kwargs[f]))
|
||||||
else:
|
else:
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
return self.get_workflow(workflow_id)
|
return self.get_workflow(workflow_id)
|
||||||
@@ -686,13 +686,13 @@ class WorkflowManager:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
if field in ['config', 'depends_on']:
|
if f in ['config', 'depends_on']:
|
||||||
values.append(json.dumps(kwargs[field]))
|
values.append(json.dumps(kwargs[f]))
|
||||||
else:
|
else:
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
return self.get_task(task_id)
|
return self.get_task(task_id)
|
||||||
@@ -795,13 +795,13 @@ class WorkflowManager:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
if field == 'headers':
|
if f == 'headers':
|
||||||
values.append(json.dumps(kwargs[field]))
|
values.append(json.dumps(kwargs[f]))
|
||||||
else:
|
else:
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
return self.get_webhook(webhook_id)
|
return self.get_webhook(webhook_id)
|
||||||
@@ -898,13 +898,13 @@ class WorkflowManager:
|
|||||||
updates = []
|
updates = []
|
||||||
values = []
|
values = []
|
||||||
|
|
||||||
for field in allowed_fields:
|
for f in allowed_fields:
|
||||||
if field in kwargs:
|
if f in kwargs:
|
||||||
updates.append(f"{field} = ?")
|
updates.append(f"{f} = ?")
|
||||||
if field == 'output_data':
|
if f == 'output_data':
|
||||||
values.append(json.dumps(kwargs[field]))
|
values.append(json.dumps(kwargs[f]))
|
||||||
else:
|
else:
|
||||||
values.append(kwargs[field])
|
values.append(kwargs[f])
|
||||||
|
|
||||||
if not updates:
|
if not updates:
|
||||||
return None
|
return None
|
||||||
@@ -1128,15 +1128,15 @@ class WorkflowManager:
|
|||||||
results = {}
|
results = {}
|
||||||
completed_tasks = set()
|
completed_tasks = set()
|
||||||
|
|
||||||
# 构建任务映射
|
# 构建任务映射 (保留供调试使用)
|
||||||
task_map = {t.id: t for t in tasks}
|
_ = {t.id: t for t in tasks}
|
||||||
|
|
||||||
while len(completed_tasks) < len(tasks):
|
while len(completed_tasks) < len(tasks):
|
||||||
# 找到可以执行的任务(依赖已完成)
|
# 找到可以执行的任务(依赖已完成)
|
||||||
ready_tasks = [
|
ready_tasks = [
|
||||||
t for t in tasks
|
t for t in tasks
|
||||||
if t.id not in completed_tasks and
|
if t.id not in completed_tasks
|
||||||
all(dep in completed_tasks for dep in t.depends_on)
|
and all(dep in completed_tasks for dep in t.depends_on)
|
||||||
]
|
]
|
||||||
|
|
||||||
if not ready_tasks:
|
if not ready_tasks:
|
||||||
|
|||||||
Reference in New Issue
Block a user