Model/backend/app
Khalim Conn-Kowlessar 9ec7987e97 PR review: best-effort read path, true per-member streaming, race-safe 409, local email 🟩
Addresses PR #1498 review:
- A per-file read failure (missing/deleted object, or a bucket the role can't
  reach) is now a SkippedDocument(reason=unreadable), not a whole-run abort;
  an all-unreadable selection still fails (no empty package). Best-effort on
  the read path (ADR-0060).
- Each ZIP member is streamed to a temp file (S3DocumentDownloader.download,
  boto download_file) and added from disk, so a single multi-GB member never
  hits the heap — the 'never held whole in memory' claim is now true.
- The 409 double-submit guard is DB-arbitrated: the sub_task insert is
  conditional on the task having none, so a race creates only one.
- Local env gets a placeholder recipient email so the route is exercisable.
- PackageEntry carries landlord_property_id so a read failure can be reported.
- TODO noting the UploadedFile.s3_upload_timestamp typing fix.
Two new tests: per-file read failure skips-and-reports; address fallback flows
to the folder name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:08:46 +00:00
..
bulk_uploads property override 2026-06-05 12:18:13 +00:00
db Merge branch 'main' into feature/abri-api-integration 2026-07-07 14:08:52 +00:00
documents PR review: best-effort read path, true per-member streaming, race-safe 409, local email 🟩 2026-07-08 11:08:46 +00:00
domain define new domain object 2026-04-13 16:18:17 +00:00
energy_assessments Working upload of documents to backend 2024-09-04 19:39:31 +01:00
local save 2026-05-07 15:55:44 +00:00
modelling Both postcode batchers share one group-preserving packing core 🟪 2026-07-07 13:24:02 +00:00
plan fix dependency issue 2026-05-12 17:03:16 +00:00
portfolio Trying to get /backend and /model_data working together 2023-07-18 16:45:11 +01:00
requirements Move zip-size checker next to the fastapi requirements it checks 2026-07-06 13:00:59 +00:00
tasks implement trigger_categorisation API 2026-02-24 14:33:29 +00:00
whlg temp clearing endpoint 2025-11-16 16:26:23 +08:00
__init__.py Major project restructure and setup 2023-07-06 11:33:13 +01:00
assumptions.py fixed typing bug 2026-01-10 22:56:30 +00:00
BatterySapScorer.py commiting missing stuff 2025-12-10 17:56:53 +00:00
config.py FastAPI trigger route: POST /v1/documents/bulk-download 🟩 2026-07-08 09:59:02 +00:00
dependencies.py basic end up check 2026-05-10 21:07:16 +00:00
exceptions.py Adding database connection to fastapi 2023-07-31 11:02:22 +01:00
main.py FastAPI trigger route: POST /v1/documents/bulk-download 🟩 2026-07-08 09:59:02 +00:00
utils.py cleaning up data dictionary references 2026-03-19 18:47:39 +00:00