Skip to content

feat(estense): add Jarvis provider and discovery wording cleanup#160

Merged
nikazzio merged 5 commits intomainfrom
feat/estense-jarvis-provider
Apr 20, 2026
Merged

feat(estense): add Jarvis provider and discovery wording cleanup#160
nikazzio merged 5 commits intomainfrom
feat/estense-jarvis-provider

Conversation

@nikazzio
Copy link
Copy Markdown
Owner

@nikazzio nikazzio commented Apr 19, 2026

Summary

  • add Biblioteca Estense (Jarvis) as a native IIIF provider
  • add Estense network/settings integration and paginated discovery support
  • neutralize Discovery/document wording where the UI incorrectly assumed every item was a manuscript

Related

Closes #105

Verification

  • pytest tests/test_estense_unit.py
  • pytest tests/test_discovery_handlers_resolve_manifest.py
  • ruff check src/studio_ui/components/discovery_results.py src/studio_ui/components/discovery_download_panel.py src/studio_ui/routes/discovery_handlers.py

Biblioteca Estense Universitaria in Modena is served by the Jarvis backend
at jarvis.edl.beniculturali.it and exposes real IIIF — Presentation v2 and
v3, Image API level 2 with tile and zoom. Wire it into Discovery as a
first-class provider so the downloader, Studio reader, and Settings pane
work without the on-the-fly conversions needed for ICCU.

- resolvers/estense.py: recognise manifest URLs (v2 and v3), Mirador
  wrapper URLs on the Jarvis host, and bare UUIDs (8-4-4-4-12). Helpers
  build_manifest_url / build_viewer_url keep URL construction in one place.
- resolvers/search/estense.py: use the Spring HATEOAS endpoint
  findBySgttOrAutnOrPressmark (short title / author / pressmark in one
  call) with Spring Pageable (0-based). Parse _embedded.culturalItems and
  expose totalElements / totalPages through the shared
  _search_total_results / _search_total_pages raw meta used by the
  Discovery UI.
- providers.py: register "Estense" with search_strategy="estense",
  search_mode="search_first", sort_order=75 (between e-codices and
  Harvard).
- network_policy.py: new "estense" key plus aliases (estense, edl,
  biblioteca estense, etc.) with the default non-custom policy — the
  Jarvis backend is a modern service and behaves like the IIIF-native
  providers, so no custom rate limiting is needed.
- routes/discovery_handlers.py: add "estense" to _PAGINATABLE_STRATEGIES
  so Carica altri works.
- components/settings/panes/network.py: dedicated Network & Libraries card
  for Estense matching the existing pattern.
- tests/test_estense_unit.py + fixture: 11 unit tests covering UUID
  extraction across input shapes, URL builders, resolver behavior, search
  parsing against a real Jarvis response and Spring Pageable mapping.
- Docs (provider-support, configuration, CONFIG_REFERENCE, discovery
  guide): Estense listed in the registry, added to the matrix and to the
  paginable provider list, dedicated Per-Provider Notes section with
  accepted inputs and SPA URL caveats.

Refs #105
@nikazzio nikazzio changed the title feat/estense jarvis provider feat(estense): add Jarvis provider and discovery wording cleanup Apr 19, 2026
@nikazzio nikazzio added area:discovery Discovery search and provider resolution minor Increments the minor version when adding new functionality in a backward-compatible manner. priority:P2 Medium priority type:feature New user-facing feature labels Apr 19, 2026
@nikazzio nikazzio merged commit 5de26a0 into main Apr 20, 2026
6 checks passed
@nikazzio nikazzio deleted the feat/estense-jarvis-provider branch April 20, 2026 15:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:discovery Discovery search and provider resolution minor Increments the minor version when adding new functionality in a backward-compatible manner. priority:P2 Medium priority type:feature New user-facing feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: onboard additional IIIF libraries through a shared provider architecture

1 participant