← back to Paul Conrad Archive
src/conrad/models.py
43 lines
"""Record model shared by all crawlers."""
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class CartoonRecord:
canonical_id: str # stable, source-derived key (e.g. 'loc:2016685149', 'hunt:CON-123')
identifier: str # the repository's own identifier for this record
granularity: str = "item" # item | folder | box_range
title: str | None = None
caption: str | None = None
description: str | None = None
date_exact: str | None = None
date_start: str | None = None
date_end: str | None = None
year: int | None = None
date_is_estimate: bool = False
publication: str | None = None
syndicate: str | None = None
medium: str | None = None
dimensions: str | None = None
signed_name: str | None = None
rights_text: str | None = None
copyright_holder: str | None = None
notes: str | None = None
# cartoon_sources fields
repository: str | None = None
collection_name: str | None = None
box: str | None = None
folder: str | None = None
page: str | None = None
record_url: str | None = None
image_url: str | None = None # METADATA ONLY — never fetched, never rendered
thumbnail_url: str | None = None # METADATA ONLY — never fetched, never rendered
access_level: str | None = None
rights_url: str | None = None
provenance: str | None = None
acquisition_method: str | None = None # see conrad.provenance.METHODS; derived from source_id when None
subjects: list[str] = field(default_factory=list)
people: list[str] = field(default_factory=list)