5050)
5151from ..openslide import TileDBOpenSlide
5252from ..version import version as PKG_VERSION
53- from . import DATASET_TYPE , FMT_VERSION
53+ from . import DATASET_TYPE , DEFAULT_SCRATCH_SPACE , FMT_VERSION
5454from .axes import Axes
5555from .tiles import iter_tiles , num_tiles
5656
57- DEFAULT_SCRATCH_SPACE = "/dev/shm"
58-
5957
6058class ImageReader (ABC ):
6159 @abstractmethod
@@ -64,8 +62,10 @@ def __init__(
6462 input_path : str ,
6563 * ,
6664 logger : Optional [logging .Logger ],
67- config : Optional [tiledb .Config ] = None ,
68- ctx : Optional [tiledb .Ctx ] = None ,
65+ source_config : Optional [tiledb .Config ] = None ,
66+ source_ctx : Optional [tiledb .Ctx ] = None ,
67+ dest_config : Optional [tiledb .Config ] = None ,
68+ dest_ctx : Optional [tiledb .Config ] = None ,
6969 ** kwargs : Any ,
7070 ):
7171 """Initialize this ImageReader"""
@@ -76,6 +76,16 @@ def __enter__(self) -> ImageReader:
7676 def __exit__ (self , exc_type : Any , exc_val : Any , exc_tb : Any ) -> None :
7777 pass
7878
79+ @property
80+ @abstractmethod
81+ def source_ctx (self ) -> tiledb .Ctx :
82+ """The ctx of the source path of this image reader."""
83+
84+ @property
85+ @abstractmethod
86+ def dest_ctx (self ) -> tiledb .Ctx :
87+ """The ctx of the dest path of this image reader."""
88+
7989 @property
8090 @abstractmethod
8191 def logger (self ) -> Optional [logging .Logger ]:
@@ -309,7 +319,7 @@ def to_tiledb(
309319 exclude_metadata : bool = False ,
310320 compressor : Optional [Union [Mapping [int , Any ], Any ]] = None ,
311321 log : Optional [Union [bool , logging .Logger ]] = None ,
312- reader_kwargs : Optional [Mapping [str , Any ]] = None ,
322+ reader_kwargs : Optional [MutableMapping [str , Any ]] = None ,
313323 pyramid_kwargs : Optional [Mapping [str , Any ]] = None ,
314324 ) -> Type [ImageConverter ]:
315325 """
@@ -360,6 +370,15 @@ def to_tiledb(
360370 default_verbose = False
361371 logger = get_logger_wrapper (default_verbose )
362372
373+ # Backwards compatibility config v0.2.13
374+ if reader_kwargs :
375+ common_cfg = reader_kwargs .get ("config" , None )
376+ if common_cfg :
377+ # Overwrite the source and destination configs with the common
378+ reader_kwargs ["source_config" ] = reader_kwargs [
379+ "dest_config"
380+ ] = common_cfg
381+
363382 if isinstance (source , ImageReader ):
364383 if cls ._ImageReaderType != source .__class__ :
365384 raise ValueError ("Image reader should match converter on source format" )
@@ -379,7 +398,7 @@ def to_tiledb(
379398 max_tiles .update (tiles )
380399 logger .debug (f"Updated max tiles:{ max_tiles } " )
381400
382- rw_group = ReadWriteGroup (output_path )
401+ rw_group = ReadWriteGroup (output_path , ctx = reader . dest_ctx )
383402
384403 metadata = {}
385404 original_metadata = {}
@@ -498,7 +517,10 @@ def to_tiledb(
498517 fmt_version = FMT_VERSION ,
499518 channels = json .dumps (reader .channels ),
500519 levels = jsonpickle .encode (
501- sorted (iter_levels_meta (rw_group .r_group ), key = itemgetter ("level" )),
520+ sorted (
521+ iter_levels_meta (rw_group .r_group , ctx = reader .dest_ctx ),
522+ key = itemgetter ("level" ),
523+ ),
502524 unpicklable = False ,
503525 ),
504526 metadata = jsonpickle .encode (metadata , unpicklable = False ),
@@ -579,9 +601,9 @@ def _convert_level_to_tiledb(
579601 # get or create TileDB array uri
580602 uri , created = rw_group .get_or_create (f"l_{ level } .tdb" , schema )
581603
582- if created or not validate_ingestion (uri ):
604+ if created or not validate_ingestion (uri , ctx = reader . dest_ctx ):
583605 # write image and metadata to TileDB array
584- with open_bioimg (uri , "w" ) as out_array :
606+ with open_bioimg (uri , "w" , ctx = reader . dest_ctx ) as out_array :
585607 out_array .meta .update (reader .level_metadata (level ), level = level )
586608 inv_axes_mapper = axes_mapper .inverse
587609 if chunked :
0 commit comments