Initial video AI analysis project
This commit is contained in:
35
video_ai_analysis_poc/manifest.py
Normal file
35
video_ai_analysis_poc/manifest.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any, Iterable
|
||||
|
||||
|
||||
def write_manifest(path: str | Path, records: Iterable[dict[str, Any]]) -> None:
|
||||
manifest_path = Path(path).expanduser().resolve(strict=False)
|
||||
manifest_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with manifest_path.open("w", encoding="utf-8") as handle:
|
||||
for record in records:
|
||||
normalized = _normalize_record(record)
|
||||
handle.write(
|
||||
json.dumps(normalized, ensure_ascii=False, sort_keys=True) + "\n"
|
||||
)
|
||||
|
||||
|
||||
def read_jsonl(path: str | Path) -> list[dict[str, Any]]:
|
||||
jsonl_path = Path(path).expanduser().resolve(strict=False)
|
||||
if not jsonl_path.exists():
|
||||
return []
|
||||
records = []
|
||||
for line in jsonl_path.read_text(encoding="utf-8").splitlines():
|
||||
if line.strip():
|
||||
records.append(json.loads(line))
|
||||
return records
|
||||
|
||||
|
||||
def _normalize_record(record: dict[str, Any]) -> dict[str, Any]:
|
||||
normalized = dict(record)
|
||||
normalized.setdefault("status", "pending")
|
||||
normalized.setdefault("retry_count", 0)
|
||||
normalized.setdefault("last_error", None)
|
||||
return normalized
|
||||
Reference in New Issue
Block a user