diff --git a/python/src/tiff.rs b/python/src/tiff.rs index 82f1351..d173aa8 100644 --- a/python/src/tiff.rs +++ b/python/src/tiff.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use async_tiff::metadata::{PrefetchBuffer, TiffMetadataReader}; use async_tiff::reader::AsyncFileReader; use async_tiff::TIFF; -use pyo3::exceptions::PyIndexError; +use pyo3::exceptions::{PyFileNotFoundError, PyIndexError}; use pyo3::prelude::*; use pyo3::types::PyType; use pyo3_async_runtimes::tokio::future_into_py; @@ -32,7 +32,9 @@ impl PyTIFF { let reader = store.into_async_file_reader(path); let cog_reader = future_into_py(py, async move { - let metadata_fetch = PrefetchBuffer::new(reader.clone(), prefetch).await.unwrap(); + let metadata_fetch = PrefetchBuffer::new(reader.clone(), prefetch) + .await + .map_err(|err| PyFileNotFoundError::new_err(err.to_string()))?; let mut metadata_reader = TiffMetadataReader::try_open(&metadata_fetch).await.unwrap(); let ifds = metadata_reader .read_all_ifds(&metadata_fetch) diff --git a/python/tests/test_cog.py b/python/tests/test_cog.py index 5aa7758..55029ed 100644 --- a/python/tests/test_cog.py +++ b/python/tests/test_cog.py @@ -1,5 +1,7 @@ +import pytest + from async_tiff import TIFF, enums -from async_tiff.store import S3Store +from async_tiff.store import LocalStore, S3Store async def test_cog_s3(): @@ -23,3 +25,12 @@ async def test_cog_s3(): gkd = ifd.geo_key_directory assert gkd.citation == "WGS 84 / UTM zone 12N" assert gkd.projected_type == 32612 + + +async def test_cog_missing_file(): + """ + Ensure that a FileNotFoundError is raised when passing in a missing file. + """ + store = LocalStore() + with pytest.raises(FileNotFoundError): + await TIFF.open(path="imaginary_file.tif", store=store)