MCPcopy Create free account
hub / github.com/TheSmallHanCat/flow2api / GenerationHandler

Class GenerationHandler

src/services/generation_handler.py:1070–2791  ·  view source on GitHub ↗

统一生成处理器

Source from the content-addressed store, hash-verified

1068
1069
1070class GenerationHandler:
1071 """统一生成处理器"""
1072
1073 def __init__(self, flow_client, token_manager, load_balancer, db, concurrency_manager, proxy_manager):
1074 cache_dir = Path(__file__).resolve().parents[2] / "tmp"
1075 self.flow_client = flow_client
1076 self.token_manager = token_manager
1077 self.load_balancer = load_balancer
1078 self.db = db
1079 self.concurrency_manager = concurrency_manager
1080 self.file_cache = FileCache(
1081 cache_dir=str(cache_dir),
1082 default_timeout=config.cache_timeout,
1083 proxy_manager=proxy_manager,
1084 flow_client=flow_client,
1085 )
1086
1087 def _create_generation_result(self) -> Dict[str, Any]:
1088 """????????????????"""
1089 return dict(success=False, error_message=None, error_emitted=False)
1090
1091 def _create_response_state(self) -> Dict[str, Any]:
1092 """为单次请求创建独立的响应状态,避免并发请求互相污染。"""
1093 return {
1094 "url": None,
1095 "generated_assets": None,
1096 "base_url": None,
1097 }
1098
1099 def _mark_generation_failed(self, generation_result: Optional[Dict[str, Any]], error_message: str):
1100 """????????????????????"""
1101 if isinstance(generation_result, dict):
1102 generation_result["success"] = False
1103 generation_result["error_message"] = error_message
1104 generation_result["error_emitted"] = True
1105
1106 def _mark_generation_succeeded(self, generation_result: Optional[Dict[str, Any]]):
1107 """???????"""
1108 if isinstance(generation_result, dict):
1109 generation_result["success"] = True
1110 generation_result["error_message"] = None
1111 generation_result["error_emitted"] = False
1112
1113 async def _resolve_video_asset(
1114 self,
1115 token,
1116 operation: Dict[str, Any],
1117 ) -> Dict[str, Any]:
1118 """按当前上游逻辑解析视频资产:状态由 media 决定,URL 通过 redirect 二段获取。"""
1119 metadata = (operation.get("operation") or {}).get("metadata", {}) or {}
1120 video_info = metadata.get("video", {}) if isinstance(metadata.get("video"), dict) else {}
1121 media_name = (
1122 operation.get("mediaName")
1123 or video_info.get("mediaName")
1124 or video_info.get("mediaGenerationId")
1125 or operation.get("name")
1126 or (operation.get("operation") or {}).get("name")
1127 )

Callers 1

main.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected