Repository navigation
Tracking: framework gaps for porting gis-data-portal onto SimpleModule #460
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Tracking issue: framework gaps found while assessing a port of a large production FastAPI/Celery GIS app (gis-data-portal: about 74k LOC backend, 3 Celery queues with multi-hour and torch-heavy jobs, multi-GB MinIO files, plus a TS web client and a Flutter mobile client generated from OpenAPI) onto SimpleModule. Each issue stands alone and can be fixed separately. Order is by how much each one blocks the port.
P0: blocks hosting the app's workloads
- background_tasks: no way for a module to route its tasks to a queue (task_routes hook) #447 background_tasks: task routing hook (
TASK_ROUTES) - background_tasks: Celery worker tuning is hard-coded — visibility_timeout, child recycling, time limits not configurable #448 background_tasks: configurable worker tuning (visibility_timeout, child recycling, time limits)
- background_tasks: heartbeat is only stamped at start/end, so any task running >5 min is flagged stuck #451 background_tasks: in-task heartbeat and per-task stuck threshold (long tasks are flagged stuck after 5 min)
- file_storage: S3 get() buffers the whole object in memory; no ranged reads #453 file_storage: stream S3 reads and support ranged reads (whole object is buffered today)
- file_storage: no multipart / presigned PUT uploads for large or resumable files #454 file_storage: multipart / presigned PUT / resumable uploads
P1: blocks external clients and safe operation
- users: personal access tokens / API keys for non-browser clients #455 users: personal access tokens / API keys
- hosting: first-class OpenAPI export for typed client generation (title/version, operationIds, CLI export) #456 hosting: OpenAPI export for typed client generation
- background_tasks: retry publishes to the broker before the TaskExecution row commits #452 background_tasks: retry publishes before commit (bug)
- background_tasks: every worker imports every module's tasks.py — no per-worker module/queue subset for heavy dependencies #450 background_tasks: per-worker task module subset for heavy deps (depends on background_tasks: no way for a module to route its tasks to a queue (task_routes hook) #447)
P2: smoother migration
- users: /auth/token login discards the upgraded password hash #457 users:
/auth/tokendiscards the upgraded password hash (bug; matters for importing bcrypt/passlib users) - db: Postgres extensions and custom column types (ltree, tsvector, pg_trgm) for module models #458 db: Postgres extensions and custom column types (ltree, tsvector)
- core: opt-in durable event delivery (outbox) — handler failures are only logged today #459 core: opt-in durable event delivery (outbox)
Out of scope here (app-side work, not framework gaps): async vs sync DB access in ported code, the tenant model for per-user billing, and frontend migration strategy.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Activity
antosubash commentedon Oct 15, 2026
Every gap tracked here is now closed: