Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions parsons/catalist/catalist.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import time
import urllib
from pathlib import Path
from zipfile import ZipFile
from zipfile import ZipFile, is_zipfile

from parsons import Table
from parsons.sftp import SFTP
Expand Down Expand Up @@ -371,11 +371,22 @@ def load_matches(self, id: str) -> Table:
remote_filepaths = self.sftp.list_directory("/myDownloads/")
remote_filename = [filename for filename in remote_filepaths if id in filename][0]
remote_filepath = "/myDownloads/" + remote_filename

temp_file_zip = self.sftp.get_file(
remote_path=remote_filepath, export_chunk_size=DEFAULT_EXPORT_CHUNK_SIZE
)
Comment on lines 375 to 377
Copy link
Copy Markdown
Collaborator

@bmos bmos Apr 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will fix your test failure, not sure what happened here.

Suggested change
temp_file_zip = self.sftp.get_file(
remote_path=remote_filepath, export_chunk_size=DEFAULT_EXPORT_CHUNK_SIZE
)
temp_file_zip = Path(
self.sftp.get_file(
remote_path=remote_filepath,
export_chunk_size=DEFAULT_EXPORT_CHUNK_SIZE,
)
)

temp_dir = tempfile.mkdtemp()

if not is_zipfile(temp_file_zip):
raise RuntimeError(
f"Downloaded file for job {id} is not a valid zip file "
f"(size: {temp_file_zip.stat().st_size} bytes, remote path: {remote_filepath}). "
"The SFTP download may be corrupt or incomplete."
)

logger.debug(
f"Download complete for job {id} (local size: {temp_file_zip.stat().st_size} bytes)."
)
Comment on lines +386 to +388
Copy link
Copy Markdown
Collaborator

@bmos bmos Apr 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On an unrelated note, you might also want to use lazy formatting in your logger call, since f-strings are resolved even when the logger is not in debug mode.

Suggested change
logger.debug(
f"Download complete for job {id} (local size: {temp_file_zip.stat().st_size} bytes)."
)
logger.debug(
"Download complete for job %s (local size: %s bytes).", id, temp_file_zip.stat().st_size
)

temp_dir = tempfile.mkdtemp()
with ZipFile(temp_file_zip) as zf:
zf.extractall(path=temp_dir)

Expand All @@ -387,7 +398,7 @@ def load_matches(self, id: str) -> Table:
def validate_table(self, table: Table, template_id: str = "48827") -> None:
"""Validate table structure and contents."""
if template_id != "48827":
logger.warn(f"No validator implemented for template {template_id}.")
logger.warning(f"No validator implemented for template {template_id}.")
return

expected_table_columns = [
Expand Down
Loading