redcap_api.py — Typed REDCap API Facade
BCHPR · 4 REDCap servers · 2023 – present
REDCap exposes one POST endpoint per project, dispatched by form parameters rather than typed routes, with no retry, no pagination, and no bulk file endpoint. This 6,561-line facade wraps 16 of those endpoints behind a typed surface of 42 exported names.
Highlights
- Retry and backoff on 429 and 5xx, with read and connect budgets split apart — a read timeout means REDCap is still generating the export, and every retry pays that cost again.
- REDCap has no offset pagination, so large exports are walked as date windows and reassembled in chronological order.
- Report downloads stream to disk in 1 MB chunks and only move into place once complete, so a failure cannot leave a truncated file for the next stage to read.
- Data-dictionary deployment defaults to a dry run and refuses to proceed without a backup directory: a metadata import replaces the dictionary wholesale, with no merge and no undo.
- File-field operations documented against a real trap — an http:// call to the file endpoint returns a 301 that silently drops the POST body, so the call appears to succeed and returns the redirect page.
- Bulk deletion returns a per-record accounting of succeeded, failed, and never-existed rather than a single boolean.
Related projects
Data Manager
data_quality_manager.py — Data-Quality Engine
REDCap validates one field at a time, at entry. It cannot express “this specimen date precedes the enrolment date on a different form”, or “these two record IDs are the same participant”. This 14,274-line engine does, and it remembers — every issue it raises has an open date, a close date, and a resolution time.
Data Manager
MANAGER.py — Manager.io Accounting API Client
15,661-line Manager.io API client. Full create / update / delete across 18 document types — sales quotes, orders, invoices, credit notes, delivery notes and receipts; purchase quotes, orders, invoices and debit notes; inventory items, locations, transfers, write-offs, goods receipts, production orders and starting balances; and payments. Customers, suppliers, projects, accounts, assets and tax codes are exposed read-only.
Data Manager
data_utilities.py — Shared DataFrame Toolbox
The dependency root of the library — 9,746 lines that import nothing else in the codebase and that everything else imports. 84 public callables covering REDCap activity-log parsing, data-dictionary recoding, checkbox column expansion, export diffing, and file I/O that survives a SharePoint sync.