diff --git a/src/dmaf/gcs_watcher.py b/src/dmaf/gcs_watcher.py index b4b085c..f698278 100644 --- a/src/dmaf/gcs_watcher.py +++ b/src/dmaf/gcs_watcher.py @@ -96,9 +96,8 @@ def download_gcs_blob(gcs_path: str) -> Path: blob = bucket.blob(blob_name) suffix = Path(blob_name).suffix - tmp = tempfile.NamedTemporaryFile(delete=False, suffix=suffix, prefix="dmaf_gcs_") - blob.download_to_filename(tmp.name) - tmp.close() + with tempfile.NamedTemporaryFile(delete=False, suffix=suffix, prefix="dmaf_gcs_") as tmp: + blob.download_to_filename(tmp.name) logger.debug(f"Downloaded {gcs_path} -> {tmp.name}") return Path(tmp.name) diff --git a/tests/test_gcs_watcher.py b/tests/test_gcs_watcher.py index da1c710..f7ab732 100644 --- a/tests/test_gcs_watcher.py +++ b/tests/test_gcs_watcher.py @@ -69,14 +69,15 @@ def test_dedup_key_is_gcs_path(self, mock_get_client): from PIL import Image test_img = Image.fromarray(np.zeros((100, 100, 3), dtype=np.uint8)) - tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") - test_img.save(tmp.name) - tmp.close() + with tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") as tmp: + test_img.save(tmp.name) + temp_image_path = Path(tmp.name) # Mock blob download to copy our test image def fake_download(filename): import shutil - shutil.copy(tmp.name, filename) + + shutil.copy(temp_image_path, filename) mock_bucket.blob.return_value.download_to_filename = fake_download @@ -103,15 +104,15 @@ def fake_download(filename): assert result.processed == 1 # Clean up our test image - Path(tmp.name).unlink(missing_ok=True) + temp_image_path.unlink(missing_ok=True) def test_local_dirs_unchanged(self, tmp_path): """Local directory scanning should work exactly as before.""" - from dmaf.watcher import scan_and_process_once - import numpy as np from PIL import Image + from dmaf.watcher import scan_and_process_once + # Create a test image in local dir img_path = tmp_path / "test.jpg" test_img = Image.fromarray(np.zeros((100, 100, 3), dtype=np.uint8)) diff --git a/tests/test_watcher.py b/tests/test_watcher.py index a72260b..620de9a 100644 --- a/tests/test_watcher.py +++ b/tests/test_watcher.py @@ -615,7 +615,7 @@ def test_delete_source_enabled_batch_mode(self, mock_sha256, mock_image_open, te mock_img = Mock(spec=Image.Image) mock_img_rgb = Mock() mock_img.convert.return_value = mock_img_rgb - mock_image_open.return_value = mock_img + mock_image_open.return_value.__enter__.return_value = mock_img mock_sha256.return_value = "test_hash" @@ -656,7 +656,7 @@ def test_delete_source_disabled_batch_mode(self, mock_sha256, mock_image_open, t mock_img = Mock(spec=Image.Image) mock_img_rgb = Mock() mock_img.convert.return_value = mock_img_rgb - mock_image_open.return_value = mock_img + mock_image_open.return_value.__enter__.return_value = mock_img mock_sha256.return_value = "test_hash" @@ -698,7 +698,7 @@ def test_delete_source_upload_failure_batch_mode( mock_img = Mock(spec=Image.Image) mock_img_rgb = Mock() mock_img.convert.return_value = mock_img_rgb - mock_image_open.return_value = mock_img + mock_image_open.return_value.__enter__.return_value = mock_img mock_sha256.return_value = "test_hash"