Skip to content

Commit 0a434b7

Browse files
committed
wip python mutable
1 parent 7564a5c commit 0a434b7

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

python/src/reader.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use std::ops::Range;
2-
use std::sync::Arc;
32

43
use async_tiff::error::{AsyncTiffError, AsyncTiffResult};
54
use async_tiff::reader::{AsyncFileReader, ObjectReader};
@@ -21,12 +20,12 @@ pub(crate) enum StoreInput {
2120
}
2221

2322
impl StoreInput {
24-
pub(crate) fn into_async_file_reader(self, path: String) -> Arc<dyn AsyncFileReader> {
23+
pub(crate) fn into_async_file_reader(self, path: String) -> Box<dyn AsyncFileReader> {
2524
match self {
2625
Self::ObjectStore(store) => {
27-
Arc::new(ObjectReader::new(store.into_inner(), path.into()))
26+
Box::new(ObjectReader::new(store.into_inner(), path.into()))
2827
}
29-
Self::ObspecBackend(backend) => Arc::new(ObspecReader { backend, path }),
28+
Self::ObspecBackend(backend) => Box::new(ObspecReader { backend, path }),
3029
}
3130
}
3231
}
@@ -115,12 +114,12 @@ struct ObspecReader {
115114
}
116115

117116
impl AsyncFileReader for ObspecReader {
118-
fn get_bytes(&self, range: Range<u64>) -> BoxFuture<'_, AsyncTiffResult<Bytes>> {
117+
fn get_bytes(&mut self, range: Range<u64>) -> BoxFuture<'_, AsyncTiffResult<Bytes>> {
119118
self.backend.get_range_wrapper(&self.path, range).boxed()
120119
}
121120

122121
fn get_byte_ranges(
123-
&self,
122+
&mut self,
124123
ranges: Vec<Range<u64>>,
125124
) -> BoxFuture<'_, AsyncTiffResult<Vec<Bytes>>> {
126125
self.backend.get_ranges_wrapper(&self.path, ranges).boxed()

python/src/tiff.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::PyImageFileDirectory;
1515
#[pyclass(name = "TIFF", frozen)]
1616
pub(crate) struct PyTIFF {
1717
tiff: TIFF,
18-
reader: Arc<dyn AsyncFileReader>,
18+
reader: Box<dyn AsyncFileReader>,
1919
}
2020

2121
#[pymethods]
@@ -29,13 +29,15 @@ impl PyTIFF {
2929
store: StoreInput,
3030
prefetch: u64,
3131
) -> PyResult<Bound<'py, PyAny>> {
32-
let reader = store.into_async_file_reader(path);
32+
let mut 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();
36-
let mut metadata_reader = TiffMetadataReader::try_open(&metadata_fetch).await.unwrap();
35+
let mut metadata_fetch = PrefetchBuffer::new(&mut reader, prefetch).await.unwrap();
36+
let mut metadata_reader = TiffMetadataReader::try_open(&mut metadata_fetch)
37+
.await
38+
.unwrap();
3739
let ifds = metadata_reader
38-
.read_all_ifds(&metadata_fetch)
40+
.read_all_ifds(&mut metadata_fetch)
3941
.await
4042
.unwrap();
4143
let tiff = TIFF::new(ifds);
@@ -57,7 +59,7 @@ impl PyTIFF {
5759
y: usize,
5860
z: usize,
5961
) -> PyResult<Bound<'py, PyAny>> {
60-
let reader = self.reader.clone();
62+
let reader = &self.reader;
6163
let ifd = self
6264
.tiff
6365
.ifds()
@@ -67,7 +69,7 @@ impl PyTIFF {
6769
// TODO: avoid this clone; add Arc to underlying rust code?
6870
.clone();
6971
future_into_py(py, async move {
70-
let tile = ifd.fetch_tile(x, y, reader.as_ref()).await.unwrap();
72+
let tile = ifd.fetch_tile(x, y, reader.as_mut()).await.unwrap();
7173
Ok(PyTile::new(tile))
7274
})
7375
}

0 commit comments

Comments
 (0)