← 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)