feat: Phase 1 handover - schema migration, correction mechanism, API fixes
Schema changes: dev.chunks->dev.chunk, remove old_chunk_id/chunk_index Correction: asr-1.json format, generate/apply scripts API: 37/37 endpoints fixed and tested Docs: HANDOVER_V2.0.md for M4
This commit is contained in:
@@ -48,19 +48,25 @@ pub fn verify_output(processor: &ProcessorType, file_uuid: &str) -> Verification
|
||||
|
||||
let json_str = match std::fs::read_to_string(&output_path) {
|
||||
Ok(s) => s,
|
||||
Err(e) => return VerificationResult::fail(proc_name, file_uuid, &format!("unreadable: {}", e)),
|
||||
Err(e) => {
|
||||
return VerificationResult::fail(proc_name, file_uuid, &format!("unreadable: {}", e))
|
||||
}
|
||||
};
|
||||
|
||||
let value: serde_json::Value = match serde_json::from_str(&json_str) {
|
||||
Ok(v) => v,
|
||||
Err(e) => return VerificationResult::fail(proc_name, file_uuid, &format!("invalid JSON: {}", e)),
|
||||
Err(e) => {
|
||||
return VerificationResult::fail(proc_name, file_uuid, &format!("invalid JSON: {}", e))
|
||||
}
|
||||
};
|
||||
|
||||
match processor {
|
||||
ProcessorType::Asr | ProcessorType::Asrx => {
|
||||
let segs = value.get("segments").and_then(|v| v.as_array());
|
||||
match segs {
|
||||
Some(s) if s.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 segments"),
|
||||
Some(s) if s.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 segments")
|
||||
}
|
||||
Some(s) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::fail(proc_name, file_uuid, "missing 'segments' field"),
|
||||
}
|
||||
@@ -68,7 +74,9 @@ pub fn verify_output(processor: &ProcessorType, file_uuid: &str) -> Verification
|
||||
ProcessorType::Cut => {
|
||||
let scenes = value.get("scenes").and_then(|v| v.as_array());
|
||||
match scenes {
|
||||
Some(s) if s.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 scenes"),
|
||||
Some(s) if s.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 scenes")
|
||||
}
|
||||
Some(_) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::fail(proc_name, file_uuid, "missing 'scenes' field"),
|
||||
}
|
||||
@@ -76,15 +84,22 @@ pub fn verify_output(processor: &ProcessorType, file_uuid: &str) -> Verification
|
||||
ProcessorType::Yolo => {
|
||||
let frames = value.get("frames").and_then(|v| v.as_object());
|
||||
match frames {
|
||||
Some(f) if f.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 frames"),
|
||||
Some(f) if f.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 frames")
|
||||
}
|
||||
Some(_) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::fail(proc_name, file_uuid, "missing 'frames' field"),
|
||||
}
|
||||
}
|
||||
ProcessorType::Face => {
|
||||
let faces = value.get("faces").or_else(|| value.get("frames")).and_then(|v| v.as_array());
|
||||
let faces = value
|
||||
.get("faces")
|
||||
.or_else(|| value.get("frames"))
|
||||
.and_then(|v| v.as_array());
|
||||
match faces {
|
||||
Some(f) if f.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 faces"),
|
||||
Some(f) if f.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 faces")
|
||||
}
|
||||
Some(_) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::fail(proc_name, file_uuid, "missing 'faces'/'frames'"),
|
||||
}
|
||||
@@ -92,7 +107,9 @@ pub fn verify_output(processor: &ProcessorType, file_uuid: &str) -> Verification
|
||||
ProcessorType::Ocr => {
|
||||
let frames = value.get("frames").and_then(|v| v.as_array());
|
||||
match frames {
|
||||
Some(f) if f.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 frames"),
|
||||
Some(f) if f.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 frames")
|
||||
}
|
||||
Some(_) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::fail(proc_name, file_uuid, "missing 'frames'"),
|
||||
}
|
||||
@@ -100,7 +117,9 @@ pub fn verify_output(processor: &ProcessorType, file_uuid: &str) -> Verification
|
||||
ProcessorType::Pose => {
|
||||
let frames = value.get("frames").and_then(|v| v.as_array());
|
||||
match frames {
|
||||
Some(f) if f.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 frames"),
|
||||
Some(f) if f.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 frames")
|
||||
}
|
||||
Some(_) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::fail(proc_name, file_uuid, "missing 'frames'"),
|
||||
}
|
||||
@@ -108,7 +127,9 @@ pub fn verify_output(processor: &ProcessorType, file_uuid: &str) -> Verification
|
||||
ProcessorType::Scene => {
|
||||
let scenes = value.get("scenes").and_then(|v| v.as_array());
|
||||
match scenes {
|
||||
Some(s) if s.is_empty() => VerificationResult::fail(proc_name, file_uuid, "0 scenes"),
|
||||
Some(s) if s.is_empty() => {
|
||||
VerificationResult::fail(proc_name, file_uuid, "0 scenes")
|
||||
}
|
||||
Some(_) => VerificationResult::ok(proc_name, file_uuid),
|
||||
None => VerificationResult::ok(proc_name, file_uuid),
|
||||
}
|
||||
@@ -142,7 +163,10 @@ pub fn cleanup_temp_files(processor: &ProcessorType, file_uuid: &str) {
|
||||
}
|
||||
}
|
||||
if removed > 0 {
|
||||
info!("Cleaned up {} temp files for {}.{}", removed, file_uuid, proc_name);
|
||||
info!(
|
||||
"Cleaned up {} temp files for {}.{}",
|
||||
removed, file_uuid, proc_name
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user