feat: catalog Record dict conversion
This commit is contained in:
+18
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user