Skip to content

[EPIC] Port ROR Reconciler to Python Application #360

@adambuttrick

Description

@adambuttrick

Summary

We should port ROR Reconciler to be a lightweight Python application. The existing service is a ~190-line Sinatra app running inside a Phusion Passenger/Nginx Docker container (phusion/passenger-ruby32:3.1.6). This should be replaced with a minimal Python web framework (e.g., Flask or FastAPI) to align the service with the use of Python across the rest of the ROR's services.

Tasks

  • Rewrite all endpoints in Python with equivalent behavior:
    • GET / — redirect to ror.org
    • GET /heartbeat — health check
    • GET /reconcile — service metadata
    • POST /reconcile` — reconciliation queries (batch support)
    • GET /suggest — autocomplete suggestions
    • GET /flyout — inline preview data
    • GET /preview/* — HTML preview of ROR records
  • Maintain W3C Reconciliation API compliance
  • CORS support
  • Create a new Dockerfile with minimal base image
  • Update docker-compose.yml for local development
  • Update GitHub Actions workflows (dev, staging, prod)
  • Update Terraform variables
  • Improved test suite
  • CloudWatch monitoring for container lifecycle

Acceptance criteria

  • All existing endpoints return equivalent responses to the Ruby implementation
  • OpenRefine reconciliation workflows function identically against the Python service
  • Test suite covers all endpoints
  • CI/CD pipelines (dev/staging/prod) build and deploy the Python image
  • CloudWatch alerts are in place for container restart anomalies
  • No degradation in response times under normal load
  • Documentation (README) updated to reflect the new stack

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions