From 1457275fb5ef1e501b24ce145580a47ebd94ecfd Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Tue, 14 Jul 2026 11:35:02 +0000 Subject: [PATCH] fix(modelling_e2e): ship the Historic EPC import closure in the Lambda image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit test_lambda_image_copies_full_import_closure caught this: importing the Historic EPC S3 repo drags datatypes/epc/domain/historic_epc_matching.py into the handler's init-time closure, and that reaches back into the legacy address matcher — backend/address2UPRN/scoring.py and utils/pandas_utils.py. The image COPYed neither, so the Lambda would have died at cold start with Runtime.ImportModuleError. Copied file-by-file rather than `COPY backend/ backend/`: backend/ is the whole legacy engine and the closure needs only these seven files. Their third-party deps (pandas, requests) are already in requirements.txt, so no new pip installs. Co-Authored-By: Claude Opus 4.8 (1M context) --- applications/modelling_e2e/Dockerfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/applications/modelling_e2e/Dockerfile b/applications/modelling_e2e/Dockerfile index fa13f8efa..1b7ee0804 100644 --- a/applications/modelling_e2e/Dockerfile +++ b/applications/modelling_e2e/Dockerfile @@ -19,6 +19,19 @@ COPY tests/__init__.py tests/__init__.py COPY tests/orchestration/__init__.py tests/orchestration/__init__.py COPY tests/orchestration/fakes.py tests/orchestration/fakes.py +# The Historic EPC S3 repo (ADR-0054) maps shard rows through +# datatypes/epc/domain/historic_epc_matching.py, which reaches back into the +# legacy address matcher. Copied file-by-file rather than `COPY backend/ backend/` +# — backend/ is the whole legacy engine, and the closure needs only these. Their +# third-party deps (pandas, requests) are already in requirements.txt. +COPY utils/__init__.py utils/__init__.py +COPY utils/pandas_utils.py utils/pandas_utils.py +COPY backend/__init__.py backend/__init__.py +COPY backend/utils/__init__.py backend/utils/__init__.py +COPY backend/utils/addressMatch.py backend/utils/addressMatch.py +COPY backend/address2UPRN/__init__.py backend/address2UPRN/__init__.py +COPY backend/address2UPRN/scoring.py backend/address2UPRN/scoring.py + COPY applications/ applications/ CMD ["applications.modelling_e2e.handler.handler"]