30 lines
834 B
Python
30 lines
834 B
Python
"""Stage 1 — the per-clip strict-PD provenance record (spec §3.1).
|
|
|
|
Captured at source time so license + source + URL travel with the media. The
|
|
'no explicit license -> assume PD, verify' trap (scales design §2.1) applies:
|
|
"free stock" (Pexels/Pixabay) is NOT public domain.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import asdict, dataclass
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Provenance:
|
|
scale: str
|
|
license: str
|
|
source: str
|
|
url: str
|
|
fetched_at: str # ISO date; passed in (no clock here -> deterministic)
|
|
|
|
def to_dict(self) -> dict:
|
|
return asdict(self)
|
|
|
|
@classmethod
|
|
def from_dict(cls, d: dict) -> "Provenance":
|
|
return cls(
|
|
scale=d["scale"], license=d["license"], source=d["source"],
|
|
url=d["url"], fetched_at=d["fetched_at"],
|
|
)
|