Skip to content

Commit 58fcf88

Browse files
authored
Raise FileNotFoundError instead of panic when opening missing files (#93)
Avoid panic when non-existent file is passed into `TIFF.open`
1 parent 5daebd9 commit 58fcf88

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

python/src/tiff.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::sync::Arc;
33
use async_tiff::metadata::{PrefetchBuffer, TiffMetadataReader};
44
use async_tiff::reader::AsyncFileReader;
55
use async_tiff::TIFF;
6-
use pyo3::exceptions::PyIndexError;
6+
use pyo3::exceptions::{PyFileNotFoundError, PyIndexError};
77
use pyo3::prelude::*;
88
use pyo3::types::PyType;
99
use pyo3_async_runtimes::tokio::future_into_py;
@@ -32,7 +32,9 @@ impl PyTIFF {
3232
let reader = store.into_async_file_reader(path);
3333

3434
let cog_reader = future_into_py(py, async move {
35-
let metadata_fetch = PrefetchBuffer::new(reader.clone(), prefetch).await.unwrap();
35+
let metadata_fetch = PrefetchBuffer::new(reader.clone(), prefetch)
36+
.await
37+
.map_err(|err| PyFileNotFoundError::new_err(err.to_string()))?;
3638
let mut metadata_reader = TiffMetadataReader::try_open(&metadata_fetch).await.unwrap();
3739
let ifds = metadata_reader
3840
.read_all_ifds(&metadata_fetch)

python/tests/test_cog.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import pytest
2+
13
from async_tiff import TIFF, enums
2-
from async_tiff.store import S3Store
4+
from async_tiff.store import LocalStore, S3Store
35

46

57
async def test_cog_s3():
@@ -23,3 +25,12 @@ async def test_cog_s3():
2325
gkd = ifd.geo_key_directory
2426
assert gkd.citation == "WGS 84 / UTM zone 12N"
2527
assert gkd.projected_type == 32612
28+
29+
30+
async def test_cog_missing_file():
31+
"""
32+
Ensure that a FileNotFoundError is raised when passing in a missing file.
33+
"""
34+
store = LocalStore()
35+
with pytest.raises(FileNotFoundError):
36+
await TIFF.open(path="imaginary_file.tif", store=store)

0 commit comments

Comments
 (0)