feat: catalog Record dict conversion

This commit is contained in:
Ben Stull
2026-06-04 01:34:20 -07:00
parent 8b3d17a6aa
commit c36ef73342
2 changed files with 41 additions and 1 deletions
+18 -1
View File
@@ -2,7 +2,7 @@
from __future__ import annotations
from dataclasses import dataclass
from dataclasses import dataclass, asdict, fields
from typing import Optional
MODES = frozenset({"audio", "video", "av"})
@@ -70,3 +70,20 @@ def validate(record: Record) -> None:
raise CatalogError("duration_s must be non-negative")
if record.license in ATTRIBUTION_LICENSES and not record.attribution:
raise CatalogError(f"license {record.license} requires attribution")
def record_to_dict(record: Record) -> dict:
"""Convert a Record to a plain dict suitable for JSON serialization."""
return asdict(record)
def record_from_dict(data: dict) -> Record:
"""Build a Record from a dict, rejecting unknown or missing fields."""
known = {f.name for f in fields(Record)}
unknown = set(data) - known
if unknown:
raise CatalogError(f"unknown fields: {sorted(unknown)}")
try:
return Record(**data)
except TypeError as exc:
raise CatalogError(str(exc)) from exc