mirror of
https://github.com/zvx-echo6/navi.git
synced 2026-08-26 17:31:37 +00:00
* Add navi-offroute service (extraction #8 — the last one) Faithful port of recon's /api/offroute (POST) + /api/mvum (GET) and the runtime offroute modules into a new :8428 service. Closes the loop: after this, navi-frontend talks only to navi-backend. Ported: router.py (OffrouteRouter, EntryPointIndex, 4 route strategies, in-Python MCP_Geometric least-cost path, Valhalla integration, per-request osmium extract), mvum.py (MVUMReader over navi.db), cost.py, friction.py, trails.py, and barriers.py (runtime BarrierReader/WildernessReader only). NOT ported (per Phase A §3/§15): prototype.py (dead at runtime), barriers.py build_*_raster (offline GDB→raster prep). DEM imported from shared/dem.py (PR #9), not duplicated. Behaviour-faithful changes: hardcoded paths/URLs → env vars; the profile.offroute.* config (osm_pbf_path/postgis_dsn/densify_interval_m) → dedicated env vars (router drops deployment_config). Both routes public (no auth, matching recon). PADUS via libpq peer-auth DSN (dbname=padus) — NO secret. Owns no DB. 15 hermetic tests (offroute validation + mocked-router shape + close-always; fixture-SQLite MVUM roads/trails/fallback/null; admin auth + no-secrets + probe shape). Full suite 119 passed / 1 skipped. Adds scikit-image + rasterio. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * navi-offroute: PR #10 review cleanups (4 faithful-port deviations) 1. trails.py — drop recon-era "Run the Phase B rasterization script" reference from the not-found error (confusing in navi-offroute context). 2. friction.py — add FileNotFoundError-before-rasterio-open check to match barriers/trails consistency. 3. mvum.py — remove dead try/except shapely import + warnings.warn at 2 sites (shapely is a hard pyproject dep; the fallback was unreachable). 4. router.py — declare psutil in pyproject, drop the silent fallback; the MEMORY_LIMIT_GB safety check was silently disabled in prod. Adds test_friction_reader_raises_file_not_found_when_missing (16 navi-offroute tests; full suite 120 passed / 1 skipped). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: zvx-echo6 <mj@k7zvx.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4180d3513c
commit
ae82cee46a
17 changed files with 3960 additions and 0 deletions
|
|
@ -88,6 +88,24 @@ All `@require_auth`. The per-service admin endpoints stay localhost-only; this i
|
|||
the single edge-exposed admin surface (needs a Caddy `@authed_api` edit — see
|
||||
`deploy/caddy/navi-admin.caddy.notes.md`).
|
||||
|
||||
## Run (local) — navi-offroute (extraction #8)
|
||||
|
||||
```bash
|
||||
.venv/bin/pytest services/navi_offroute/tests/ -v
|
||||
|
||||
# All paths/URLs env-overridable (deploy/env/navi-offroute.env.example).
|
||||
# No secrets — PADUS via libpq peer-auth (dbname=padus). DEM via shared/dem.py.
|
||||
# Needs osmium-tool on the host + scikit-image/rasterio in the venv.
|
||||
.venv/bin/gunicorn 'services.navi_offroute.app:create_app()' \
|
||||
--bind 127.0.0.1:8428 --workers 2 --timeout 130
|
||||
```
|
||||
|
||||
`navi-offroute` serves `POST /api/offroute` (off-network effort-based routing —
|
||||
in-Python least-cost path over a DEM/friction/barriers/trails/MVUM cost grid,
|
||||
stitched to the road network via Valhalla) and `GET /api/mvum` (Motor Vehicle
|
||||
Use Map road/trail access lookup). Both public. The `^~ /api/offroute` nginx
|
||||
block needs a long `proxy_read_timeout` (130s); routes can take ~2 min.
|
||||
|
||||
## The admin-info convention (§4.5)
|
||||
|
||||
Every service exposes `GET /api/admin/<service-name>/info`, gated by `require_auth`,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue