Merge pull request #11 from Hommy-master/dev

增加接口容错。
This commit is contained in:
Hommy
2025-12-10 23:00:16 +08:00
committed by GitHub
2 changed files with 91 additions and 13 deletions
+15 -13
View File
@@ -59,6 +59,7 @@ def add_keyframes(
# 4. 处理每个关键帧
keyframes_added = 0
affected_segments: List[str] = []
failed_keyframes = 0 # 记录失败的关键帧数量
for i, keyframe_item in enumerate(keyframe_items):
try:
@@ -67,20 +68,23 @@ def add_keyframes(
# 查找片段
segment = find_segment_by_id(script, keyframe_item['segment_id'])
if segment is None:
logger.error(f"Segment not found: {keyframe_item['segment_id']}")
raise CustomException(CustomError.SEGMENT_NOT_FOUND)
logger.error(f"Segment not found: {keyframe_item['segment_id']}, skipping this keyframe")
failed_keyframes += 1
continue # 继续处理下一个关键帧,而不是抛出异常
# 验证片段类型
if not isinstance(segment, VisualSegment):
logger.error(f"Segment {keyframe_item['segment_id']} is not a visual segment, cannot add keyframes")
raise CustomException(CustomError.INVALID_SEGMENT_TYPE)
logger.error(f"Segment {keyframe_item['segment_id']} is not a visual segment, cannot add keyframes, skipping this keyframe")
failed_keyframes += 1
continue # 继续处理下一个关键帧
# 验证动画属性类型
try:
property_enum = KeyframeProperty(keyframe_item['property'])
except ValueError:
logger.error(f"Invalid property type: {keyframe_item['property']}")
raise CustomException(CustomError.INVALID_KEYFRAME_PROPERTY)
logger.error(f"Invalid property type: {keyframe_item['property']}, skipping this keyframe")
failed_keyframes += 1
continue # 继续处理下一个关键帧
# 计算时间偏移(将相对位置转换为微秒)
segment_duration = segment.duration
@@ -97,22 +101,20 @@ def add_keyframes(
logger.info(f"Successfully added keyframe {i+1}, total added: {keyframes_added}")
except CustomException:
logger.error(f"Failed to add keyframe {i+1}: {keyframe_item}")
raise
except Exception as e:
logger.error(f"Failed to add keyframe {i+1}, error: {str(e)}")
raise CustomException(CustomError.KEYFRAME_ADD_FAILED)
logger.error(f"Failed to add keyframe {i+1}, error: {str(e)}, skipping this keyframe")
failed_keyframes += 1
# 继续处理下一个关键帧,而不是抛出异常
# 5. 保存草稿
try:
script.save()
logger.info(f"Draft saved successfully, keyframes_added: {keyframes_added}")
logger.info(f"Draft saved successfully, keyframes_added: {keyframes_added}, failed_keyframes: {failed_keyframes}")
except Exception as e:
logger.error(f"Failed to save draft: {str(e)}")
raise CustomException(CustomError.KEYFRAME_ADD_FAILED)
logger.info(f"add_keyframes completed successfully - draft_id: {draft_id}, keyframes_added: {keyframes_added}, affected_segments: {affected_segments}")
logger.info(f"add_keyframes completed - draft_id: {draft_id}, keyframes_added: {keyframes_added}, affected_segments: {affected_segments}, failed_keyframes: {failed_keyframes}")
return draft_url, keyframes_added, affected_segments
+76
View File
@@ -0,0 +1,76 @@
import sys
import os
import json
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from src.service.add_keyframes import parse_keyframes_data
def test_parse_keyframes_data():
"""测试关键帧数据解析"""
print("Testing keyframe data parsing...")
# 测试数据
test_keyframes = [
{
"segment_id": "segment-1",
"property": "KFTypePositionX",
"offset": 0.0,
"value": 0.0
},
{
"segment_id": "segment-1",
"property": "KFTypePositionX",
"offset": 1.0,
"value": 0.5
}
]
# 将测试数据转换为JSON字符串
keyframes_json = json.dumps(test_keyframes)
# 解析关键帧数据
parsed_keyframes = parse_keyframes_data(keyframes_json)
# 验证解析结果
assert len(parsed_keyframes) == 2
assert parsed_keyframes[0]["segment_id"] == "segment-1"
assert parsed_keyframes[0]["property"] == "KFTypePositionX"
assert parsed_keyframes[0]["offset"] == 0.0
assert parsed_keyframes[0]["value"] == 0.0
assert parsed_keyframes[1]["segment_id"] == "segment-1"
assert parsed_keyframes[1]["property"] == "KFTypePositionX"
assert parsed_keyframes[1]["offset"] == 1.0
assert parsed_keyframes[1]["value"] == 0.5
print("✓ Keyframe data parsing test passed")
def test_parse_invalid_keyframes_data():
"""测试无效关键帧数据解析"""
print("Testing invalid keyframe data parsing...")
# 测试缺少必填字段的数据
invalid_keyframes = [
{
"segment_id": "segment-1",
"property": "KFTypePositionX",
# 缺少offset和value字段
}
]
# 将测试数据转换为JSON字符串
keyframes_json = json.dumps(invalid_keyframes)
# 尝试解析关键帧数据,应该抛出异常
try:
parse_keyframes_data(keyframes_json)
assert False, "Should have raised an exception"
except Exception as e:
print(f"✓ Invalid keyframe data parsing test passed, caught expected exception: {e}")
if __name__ == "__main__":
print("Running add_keyframes refactor tests...")
test_parse_keyframes_data()
test_parse_invalid_keyframes_data()
print("All tests passed!")