From db796747d92c782e5fa0a0fe640b0384159fa5cd Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 1 Jun 2026 15:03:13 +0000 Subject: [PATCH] =?UTF-8?q?`=5Fselect=5Fother=5Ffiles`=20returns=20non-cor?= =?UTF-8?q?e=20evidence=20files=20=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pashub_fetcher/pashub_client.py | 12 ++++++--- backend/pashub_fetcher/pashub_service.py | 10 ++++---- .../pashub_to_ara_trigger_request.py | 2 ++ .../tests/test_pashub_client.py | 25 +++++++++++++++++++ 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/backend/pashub_fetcher/pashub_client.py b/backend/pashub_fetcher/pashub_client.py index 79d81838..30c1ee76 100644 --- a/backend/pashub_fetcher/pashub_client.py +++ b/backend/pashub_fetcher/pashub_client.py @@ -92,6 +92,12 @@ class PashubClient: ) return None + def _select_other_files( + self, + files: List[EvidenceFileData], + ) -> List[EvidenceFileData]: + raise NotImplementedError + def _select_latest_core_files( self, files: List[EvidenceFileData], @@ -106,16 +112,16 @@ class PashubClient: continue grouped[core_type].append(file) - latest_files: Dict[CoreFiles, EvidenceFileData] = {} + latest_core_files: Dict[CoreFiles, EvidenceFileData] = {} for core_type, group in grouped.items(): if core_type == CoreFiles.RETROFIT_DESIGN_DOC and len(group) > 1: osm_candidates = [f for f in group if "-OSM-" in f.file_name] group = osm_candidates if osm_candidates else group latest = max(group, key=lambda f: datetime.fromisoformat(f.created_utc)) - latest_files[core_type] = latest + latest_core_files[core_type] = latest - return latest_files + return latest_core_files def _get_evidence_list(self, job_id: str) -> List[EvidenceFileData]: url = f"{self.base}/jobs/{job_id}/evidence" diff --git a/backend/pashub_fetcher/pashub_service.py b/backend/pashub_fetcher/pashub_service.py index f7f6ccd9..6138abe9 100644 --- a/backend/pashub_fetcher/pashub_service.py +++ b/backend/pashub_fetcher/pashub_service.py @@ -75,14 +75,14 @@ class PashubService: logger.info(f"No UPRN found for job {job_id}") try: - job_files: List[str] = active_client.get_core_evidence_files_by_job_id( + core_files: List[str] = active_client.get_core_evidence_files_by_job_id( job_id ) except UnauthorizedError: if active_client is not self._pashub_client: raise active_client = self._get_coordination_client() - job_files = active_client.get_core_evidence_files_by_job_id(job_id) + core_files = active_client.get_core_evidence_files_by_job_id(job_id) if uprn or hubspot_deal_id: logger.info("Uploading files to s3") @@ -92,7 +92,7 @@ class PashubService: else FileSourceEnum.COORDINATION_HUB ) upload_records = self._upload_to_s3_and_update_db( - job_files, uprn, hubspot_deal_id, file_source + core_files, uprn, hubspot_deal_id, file_source ) self._save_site_notes(upload_records) @@ -101,13 +101,13 @@ class PashubService: # if request.sharepoint_link: # self._upload_to_sharepoint(request.sharepoint_link, job_files) - for file_path in job_files: + for file_path in core_files: try: os.remove(file_path) except OSError: logger.warning(f"Failed to delete temp file {file_path}") - return job_files + return core_files def _upload_to_s3_and_update_db( self, diff --git a/backend/pashub_fetcher/pashub_to_ara_trigger_request.py b/backend/pashub_fetcher/pashub_to_ara_trigger_request.py index 715a09f8..7fb00508 100644 --- a/backend/pashub_fetcher/pashub_to_ara_trigger_request.py +++ b/backend/pashub_fetcher/pashub_to_ara_trigger_request.py @@ -14,6 +14,8 @@ class PashubToAraTriggerRequest(BaseModel): hubspot_listing_id: Optional[int] = None hubspot_deal_id: Optional[str] = None + get_other_files: Optional[bool] = False + @property def pashub_job_id(self) -> str: match = re.search(r"/jobs/([^/]+)", self.pashub_link) diff --git a/backend/pashub_fetcher/tests/test_pashub_client.py b/backend/pashub_fetcher/tests/test_pashub_client.py index 34260c73..a58b245e 100644 --- a/backend/pashub_fetcher/tests/test_pashub_client.py +++ b/backend/pashub_fetcher/tests/test_pashub_client.py @@ -25,6 +25,31 @@ def make_file( ) +# --------------------------------------------------------------------------- +# _select_other_files +# --------------------------------------------------------------------------- + + +def test_select_other_files_returns_non_core_files_only() -> None: + # Arrange + client = make_client() + files = [ + make_file(file_name="SiteNote_001.pdf"), + make_file(file_name="some_unknown_document.pdf"), + make_file(file_name="another_random_file.docx"), + make_file(file_name="Photopack_002.pdf"), + ] + + # Act + result = client._select_other_files(files) + + # Assert + assert [f.file_name for f in result] == [ + "some_unknown_document.pdf", + "another_random_file.docx", + ] + + # --------------------------------------------------------------------------- # _select_latest_core_files # ---------------------------------------------------------------------------