_select_other_files returns non-core evidence files 🟥

This commit is contained in:
Daniel Roth 2026-06-01 15:03:13 +00:00 committed by Jun-te Kim
parent 6cb6c8c756
commit db796747d9
4 changed files with 41 additions and 8 deletions

View file

@ -92,6 +92,12 @@ class PashubClient:
) )
return None return None
def _select_other_files(
self,
files: List[EvidenceFileData],
) -> List[EvidenceFileData]:
raise NotImplementedError
def _select_latest_core_files( def _select_latest_core_files(
self, self,
files: List[EvidenceFileData], files: List[EvidenceFileData],
@ -106,16 +112,16 @@ class PashubClient:
continue continue
grouped[core_type].append(file) grouped[core_type].append(file)
latest_files: Dict[CoreFiles, EvidenceFileData] = {} latest_core_files: Dict[CoreFiles, EvidenceFileData] = {}
for core_type, group in grouped.items(): for core_type, group in grouped.items():
if core_type == CoreFiles.RETROFIT_DESIGN_DOC and len(group) > 1: if core_type == CoreFiles.RETROFIT_DESIGN_DOC and len(group) > 1:
osm_candidates = [f for f in group if "-OSM-" in f.file_name] osm_candidates = [f for f in group if "-OSM-" in f.file_name]
group = osm_candidates if osm_candidates else group group = osm_candidates if osm_candidates else group
latest = max(group, key=lambda f: datetime.fromisoformat(f.created_utc)) 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]: def _get_evidence_list(self, job_id: str) -> List[EvidenceFileData]:
url = f"{self.base}/jobs/{job_id}/evidence" url = f"{self.base}/jobs/{job_id}/evidence"

View file

@ -75,14 +75,14 @@ class PashubService:
logger.info(f"No UPRN found for job {job_id}") logger.info(f"No UPRN found for job {job_id}")
try: 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 job_id
) )
except UnauthorizedError: except UnauthorizedError:
if active_client is not self._pashub_client: if active_client is not self._pashub_client:
raise raise
active_client = self._get_coordination_client() 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: if uprn or hubspot_deal_id:
logger.info("Uploading files to s3") logger.info("Uploading files to s3")
@ -92,7 +92,7 @@ class PashubService:
else FileSourceEnum.COORDINATION_HUB else FileSourceEnum.COORDINATION_HUB
) )
upload_records = self._upload_to_s3_and_update_db( 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) self._save_site_notes(upload_records)
@ -101,13 +101,13 @@ class PashubService:
# if request.sharepoint_link: # if request.sharepoint_link:
# self._upload_to_sharepoint(request.sharepoint_link, job_files) # self._upload_to_sharepoint(request.sharepoint_link, job_files)
for file_path in job_files: for file_path in core_files:
try: try:
os.remove(file_path) os.remove(file_path)
except OSError: except OSError:
logger.warning(f"Failed to delete temp file {file_path}") logger.warning(f"Failed to delete temp file {file_path}")
return job_files return core_files
def _upload_to_s3_and_update_db( def _upload_to_s3_and_update_db(
self, self,

View file

@ -14,6 +14,8 @@ class PashubToAraTriggerRequest(BaseModel):
hubspot_listing_id: Optional[int] = None hubspot_listing_id: Optional[int] = None
hubspot_deal_id: Optional[str] = None hubspot_deal_id: Optional[str] = None
get_other_files: Optional[bool] = False
@property @property
def pashub_job_id(self) -> str: def pashub_job_id(self) -> str:
match = re.search(r"/jobs/([^/]+)", self.pashub_link) match = re.search(r"/jobs/([^/]+)", self.pashub_link)

View file

@ -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 # _select_latest_core_files
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------