Logo Lanfrica

gabrielmahia/coord-ingest

Domain:

environment and energy

Record type:

software
Creator:
gab
Host:
Turn open world-signal feeds (quakes, disasters, outbreaks) into africa-coord-bus coordination events — East Africa scoped, MIT, no API keys. # coord-ingest Global situational-awareness dashboards ingest hundreds of live feeds and turn them into an actionable picture — but they score the world's Tier-1 countries, and East Africa isn't on that list. The signals that matter here (drought onset, basin flooding, cholera clusters, rift-zone quakes) are in the same public feeds; nothing was turning them into events a regional coordination system could act on. `coord-ingest` is that missing rail: an MIT-licensed adapter that converts open, key-free world-signal feeds into `africa-coord-bus` coordination events, **filtered to East Africa**, so the bus can cascade them to the right domains (insurance, crop advisory, water testing, cross-border alerts). It ingests and normalizes; the bus routes. Clean separation, composable rails. ## What it does - **Adapters** for public sources — Open-Meteo rainfall (drought/flood signals), USGS earthquakes, GDACS disaster alerts, HDX humanitarian datasets (OCHA, key-free CKAN), Kobo/ODK field reports (bottom-up ground truth) — each mapping raw records to typed `CoordinationEvent`s. Add a feed by adding an adapter. - **East-Africa filter** — a signal becomes an event only if it lands in the regional bounding box or names a regional country. Global noise is dropped at ingest. - **Offline-capable** — ships with a `SampleAdapter` over bundled fixtures, so the full pipeline (and its tests) run with no network and no API keys. - **Feeds the bus, doesn't replace it** — routing, cascading, and cross-border logic stay in `africa-coord-bus`. ## Use it ```bash pip install coord-ingest ``` ```python from coord_ingest import IngestPipeline, SampleAdapter # Offline demo — no keys, no network summary = IngestPipeline([SampleAdapter()]).run() print(summary["collected"], "East Africa events") # global noise already dropped print(summary["by_domain"]) # {'water': 3, 'health': 1, 'transport': 1} # With live feeds + the bus: # from coord_ingest import OpenMeteoA …