← back to Paul Conrad Archive

src/conrad/crawlers/wichita.py

45 lines

"""Wichita State University — Cartoon Collection of Paul Conrad (MS 90-18).
Tries the legacy static finding aid and the ArchivesSpace public UI directly (robots Crawl-delay 35 honoured).
The ArchivesSpace PUI sits behind an AWS WAF JS challenge; the legacy aid now redirects to the AS home page.
If blocked, the seed cache (fetched earlier via r.jina.ai — provenance caveat in REPORT.md) is relied on."""
from __future__ import annotations

from .base import Blocked, Crawler, Transient

LEGACY = "https://specialcollections.wichita.edu/collections/ms/90-18/90-18-a.html"
RESOURCE = "https://archivesspace.wichita.edu/repositories/3/resources/166"
SERIES2 = "https://archivesspace.wichita.edu/repositories/3/archival_objects/111935"


class Wichita(Crawler):
    source_id = "wichita"
    name = "Wichita State University Special Collections — MS 90-18"
    repository = "Wichita State University"
    url = RESOURCE
    classification = "PHYSICAL_ARCHIVE"
    access_notes = "Item-level ArchivesSpace records (Series 2, 1968-1971); originals viewable in Special Collections."

    def crawl(self) -> None:
        live = False
        for url in (LEGACY, RESOURCE, SERIES2):
            try:
                st, html = self.http.get(url)
                self.stats["pages"] += 1
                if st == 200 and ("Conrad" in html or "90-18" in html):
                    live = True
                    self.notes.append(f"live ok: {url}")
                elif st == 200:
                    self.error(url, "HTTP 200 but no Conrad content (legacy aid retired -> redirects to AS home)")
                    self.notes.append(f"{url}: retired/redirected")
                else:
                    self.error(url, f"HTTP {st}")
            except (Blocked, Transient) as e:
                self.error(url, f"BLOCKED: {e}")
                self.notes.append(f"blocked: {url}")
        if not live:
            self.status = "blocked"
            self.notes.append("REQUIRES_PERMISSION for automated access; relying on seed_wichita cache (r.jina.ai provenance)")


CRAWLER = Wichita